Eine virtuelle Maschine (VM) ist ein allgemeiner Begriff für viele Virtualisierungstechnologien.
Es gibt viele Variationen der Virtualisierungstechnologien, aber die wichtigsten sind:
- Virtualisierung auf Hardwareebene
- Virtualisierung auf Betriebssystemebene
qemu-kvm
und VMWare
sind Beispiele für die erste. Sie verwenden einen Hypervisor, um die virtuellen Umgebungen zu verwalten, in denen ein vollständiges Betriebssystem ausgeführt wird. Auf einem qemu-kvm
System kann beispielsweise eine VM mit FreeBSD, eine andere mit Windows und eine andere mit Linux ausgeführt werden.
Die durch diese Technologien erstellten virtuellen Maschinen verhalten sich für den Gast wie isolierte Einzelcomputer. Diese haben eine virtuelle CPU, RAM, NIC, Grafik usw., von denen der Gast glaubt, dass sie der echte Artikel sind. Aus diesem Grund können viele verschiedene Betriebssysteme auf den VMs installiert werden und funktionieren "out of the box", ohne dass Änderungen erforderlich sind.
Dies ist zwar sehr praktisch, da viele Betriebssysteme ohne großen Aufwand installiert werden können, hat jedoch den Nachteil, dass der Hypervisor die gesamte Hardware simulieren muss, was zu Verzögerungen führen kann. Eine Alternative ist paravirtualisierte Hardware, bei der ein neues virtuelles Gerät und ein neuer Treiber für den Gast entwickelt werden, die für die Leistung in einer virtuellen Umgebung ausgelegt sind. qemu-kvm
Stellen Sie hierfür eine virtio
Reihe von Geräten und Treibern zur Verfügung. Ein Nachteil dabei ist, dass das Gastbetriebssystem unterstützt werden muss. Wenn dies jedoch unterstützt wird, sind die Leistungsvorteile groß.
lxc
ist ein Beispiel für Virtualisierung auf Betriebssystemebene oder Container. Unter diesem System ist nur ein Kernel installiert - der Host-Kernel. Jeder Container ist einfach eine Isolation der Userland-Prozesse. Beispielsweise wird ein Webserver (zum Beispiel apache
) in einem Container installiert. Für diesen Webserver ist der einzige installierte Server selbst. Auf einem anderen Container wird möglicherweise ein FTP-Server ausgeführt. Dieser FTP-Server kennt die Installation des Webservers nicht - nur seine eigene. Ein anderer Container kann die vollständige Userland-Installation einer Linux-Distribution enthalten (sofern diese Distribution mit dem Kernel des Host-Systems ausgeführt werden kann).
Bei der Verwendung von Containern gibt es jedoch keine separaten Betriebssysteminstallationen - nur isolierte Instanzen von Userland-Diensten. Aus diesem Grund können Sie keine verschiedenen Plattformen in einem Container installieren - kein Windows unter Linux.
Container werden normalerweise mit a erstellt chroot
. Dadurch wird ein separates privates root ( /
) erstellt, mit dem ein Prozess arbeiten kann. Durch das Erstellen vieler einzelner privater Roots werden Prozesse (Webserver oder eine Linux-Distribution usw.) in einem eigenen isolierten Dateisystem ausgeführt. Fortgeschrittenere Techniken, wie z. B. cgroups
andere Ressourcen wie Netzwerk und RAM isolieren können.
Beide haben Vor- und Nachteile und viele langjährige Debatten darüber, welche am besten ist.
- Container sind insofern leichter, als nicht für jedes Betriebssystem ein vollständiges Betriebssystem installiert ist. Das ist der Fall für Hypervisoren. Sie können daher auf Hardware mit niedrigeren Spezifikationen ausgeführt werden. Sie können jedoch nur Linux-Gäste ausführen (auf Linux-Hosts). Da sie den Kernel gemeinsam nutzen, besteht auch die Möglichkeit, dass ein gefährdeter Container einen anderen beeinflusst.
- Hypervisoren sind sicherer und können verschiedene Betriebssysteme ausführen, da auf jeder VM ein vollständiges Betriebssystem installiert ist und die Gäste andere VMs nicht kennen. Dies verbraucht jedoch mehr Ressourcen auf dem Host, was relativ leistungsfähig sein muss.