Was ist ein Linux-Container und ein Linux-Hypervisor?

10

Ich habe mir die Stackexchange-Site angesehen, aber nichts gefunden. Ich habe mir den Wikipedia-Eintrag im Linux-Container https://en.wikipedia.org/wiki/LXC und den Hypervisor https://en.wikipedia.org/wiki/Hypervisor angesehen, aber die Erklärung für beide ist jenseits einer Person, die hat auch nicht gearbeitet wird verstehen. Ich habe auch http://www.linux.com/news/enterprise/cloud-computing/785769-containers-vs-hypervisors-the-battle-has-just-begun gesehen, aber das erklärt es auch nicht.

Ich habe mit VMs wie Virtualbox gespielt. Eine der ersten Ideen für mein begrenztes Verständnis war möglicherweise, dass virtuelle Maschinen Software in einer Sandbox-Umgebung testen (eine Solaris-Box haben, wenn Sie die Maschine nicht kaufen / sich leisten können und trotzdem eine Vorstellung davon haben, wie die Software Sie entwickeln für diese Zielhardware funktioniert.) Während begrenzt, hatte es verwendet. Dies ist wahrscheinlich auch einer der Wege, die den Sprung in das Cloud-Computing geschafft haben. Die Fragen sind weit gefasst, so destilliere ich es -

Können einige Leute erklären, was ein Hypervisor und ein * nix-Container sind (wenn möglich mit Analogien)?
Ist ein * nix-Hypervisor mit einer virtuellen Maschine identisch oder gibt es einen Unterschied?

shirish
quelle

Antworten:

9

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-kvmund VMWaresind 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-kvmSystem 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-kvmStellen Sie hierfür eine virtioReihe 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ß.


lxcist 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. cgroupsandere 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.
garethTheRed
quelle
2

Ein Container ähnelt einer Chroot-Umgebung , erreicht jedoch eine vollständigere Isolierung des Benutzerbereichs. Es wird keine echte VM bereitgestellt, sondern ein virtuelles Betriebssystem. VMs erzeugen die Illusion mehrerer Maschinen, auf denen jeweils ein reales, vollständiges Betriebssystem wie auf Bare-Metal ausgeführt werden kann. "Komplettes Betriebssystem" enthält hier einen Kernel. Einige VMs (z. B. QEMU ) ermöglichen sogar die Stimulierung verschiedener Arten von "Bare-Metal" -Architekturen.

Container erzeugen stattdessen die Illusion mehrerer Kernel, von denen jeder ein vollständiges Benutzerland ausführt. Sie können beispielsweise Debian in einem Container und Arch in einem anderen ausführen, sodass die Perspektive innerhalb des Containers der einer VM sehr ähnlich ist. Sie können jedoch nur ein Betriebssystem-Userland ausführen, das mit dem einen tatsächlichen Kernel kompatibel ist, in diesem Fall Linux. Dies unterscheidet sich von echten VMs, bei denen Sie einen unabhängigen Kernel und damit jede Art von Betriebssystem ausführen können.

Echte VMs sind also ressourcenmäßig teurer als Container. Wenn Sie nicht in jeder VM unterschiedliche Kernel benötigen, können Sie auch einen Container verwenden.

Es gibt andere Virtualisierungssysteme, die etwas Ähnliches wie LXE tun, wie beispielsweise openVZ , das von VPS-Anbietern häufig verwendet wird. Ein openVZ VPS ist ein unabhängiges Benutzerland, das den Kernel seines Host-Betriebssystems verwendet. Aus diesem Grund gibt es solche VPS in einer Reihe von Linux-Varianten, aber sonst nichts. Sie müssen mit dem Host-Kernel kompatibel sein.

Die Virtualisierung im OpenVZ- und LXC-Stil wird als Virtualisierung auf Betriebssystemebene bezeichnet .

Ein Hypervisor ist ein System, das virtuelle Maschinen wie VirtualBox , QEMU oder Xen verwaltet . Einige Hypervisoren, wie z. B. Xen, werden auf Bare-Metal-Basis ausgeführt und erfordern kein Host-Betriebssystem (obwohl möglicherweise ein gehostetes Betriebssystem als Steuerungsschnittstelle erforderlich ist). Andere, wie VirtualBox und QEMU, werden in einem Host-Betriebssystem ausgeführt. Einige, wie z. B. QEMU, ermöglichen die Simulation verschiedener Maschinenarchitekturen. andere, wie z. B. VirtualBox, tun dies nicht (dh die VM-Architektur ist immer dieselbe wie die des realen Hosts). Das Simulieren einer Architektur erfordert mehr Ressourcen, genauso wie echte VMs mehr Ressourcen als Container benötigen.

Die Virtualisierung im Hypervisor-Stil wird als Virtualisierung auf Plattformebene bezeichnet .

Goldlöckchen
quelle