Asiri - stock.adobe.com

Was sind die Hauptunterschiede von Container und VMs?

Container sind eine Option für die Bereitstellung von Apps, aber sie haben Einschränkungen und funktionieren anders als virtuelle Maschinen (VMs). Aber auch VMs haben Nachteile.

Der Unterschied zwischen Containern und VMs liegt hauptsächlich in der Position der Virtualisierungsschicht und der Art und Weise, wie Betriebssystemressourcen genutzt werden. Container und VMs sind einfach verschiedene Möglichkeiten, Rechenressourcen – Prozessoren, Memory und E/A – bereitzustellen und zu nutzen, die bereits in einem physischen Computer vorhanden sind. Obwohl das Ziel der Virtualisierung dasselbe ist wie bei Containern, ist der Ansatz deutlich anders, und jeder Ansatz bietet einzigartige Eigenschaften und Kompromisse für Unternehmens-Workloads.

Was sind VMs?

Virtuelle Maschinen basieren auf einem Hypervisor, einer Softwareschicht, die auf der Bare-Metal-Systemhardware installiert ist. Solche Hypervisoren werden als Typ-1- oder Bare-Metal-Hypervisoren bezeichnet. Typ-1-Hypervisoren wie VMware vSphere ESXi und Microsoft Hyper-V werden als eigenständige Betriebssysteme wahrgenommen. Sobald Administratoren die Hypervisor-Schicht installiert haben, können sie VM-Instanzen aus den verfügbaren Rechenressourcen des Systems bereitstellen. Jede VM kann dann ihr eigenes, einzigartiges Betriebssystem und ihre eigene Arbeitslast erhalten. Somit sind VMs vollständig voneinander isoliert – keine VM ist sich der Anwesenheit einer anderen VM auf demselben System bewusst oder ist darauf angewiesen – und Malware, Anwendungsabstürze und andere Probleme betreffen nur diese VM. Administratoren können VMs von einem virtualisierten System auf ein anderes migrieren, ohne Rücksicht auf die Hardware oder die Betriebssysteme des Systems nehmen zu müssen.

Ein System kann mit vielen VMs ausgestattet werden. Häufig ist die erste VM die Host-VM, die für Systemverwaltungs-Workloads wie Microsoft System Center verwendet wird. Nachfolgende VMs enthalten andere Unternehmens-Workloads wie Datenbank-, ERP-, CRM-, E-Mail-Server-, Medienserver-, Webserver- oder andere Geschäftsanwendungen. VMs zeichnen sich durch mehrere gemeinsame Merkmale oder Eigenschaften aus:

  • Isolierung: Jede VM ist logisch von jeder anderen VM isoliert. VMs sind sich gegenseitig nicht bekannt und teilen keine Softwarekomponenten.
  • Kompatibilität: VMs sind vollständig kompatibel mit allen standardmäßigen x86-Betriebssystemen, Anwendungen und anderen Softwarekomponenten, sodass VMs jede Software ausführen können, die auf einem physischen x86-Computer ausgeführt werden kann.
  • Portabilität: VMs können von einem virtualisierten Computer auf einen anderen virtualisieren Computer migriert werden.

Vorteile von VMs

VMs haben sich in den letzten 20 Jahren als de-facto-Standard für die Virtualisierung in Unternehmen etabliert und bieten zahlreiche Vorteile für das Unternehmen, darunter die folgenden:

  • Unabhängigkeit: Die Isolierung jeder VM bedeutet, dass Fehler und Ausfälle im Betriebssystem oder in der Anwendung der VM keine Auswirkungen auf andere VMs auf demselben Computer oder auf anderen Computern in der Rechenzentrumsumgebung haben.
  • Ressourcennutzung: Da mehrere VMs auf demselben physischen Computer bereitgestellt und eingesetzt werden können, kann ein System effektiv mehrere Arbeitslasten hosten, ohne dass mehrere Computer gekauft werden müssen. Das ermöglicht eine Serverkonsolidierung im Rechenzentrum, was zu Einsparungen bei den Hardwarekosten, dem Stromverbrauch, der Kühlung und dem Platzbedarf führt.
  • Verfügbarkeit: Die Portabilität von VMs ermöglicht es, die VM-Arbeit auf mehrere Systeme zu verteilen, um die Leistung zu verbessern und die Systemwartungsaufgaben zu unterstützen. VMs können auch in Dateien kopiert oder daraus wiederhergestellt werden, was einen schnellen VM-Schutz und eine schnelle VM-Wiederherstellung ermöglicht.
  • Flexibilität: Jede VM benötigt ein eigenes Betriebssystem, aber jedes Betriebssystem kann unterschiedlich sein. Dadurch kann ein Unternehmen mehrere Betriebssysteme auf demselben physischen Computer verwenden, was auf Bare-Metal-Systeme nicht möglich ist.
  • Sicherheit: Hypervisoren und die von ihnen bereitgestellte logische Isolierung haben sich für VMs als sicher erwiesen. Auch wenn eine VM kompromittiert werden kann, sind andere VMs dadurch nicht gefährdet.

Nachteile von VMs

Trotz der erheblichen Vorteile haben VMs auch einige Nachteile:

  • Größe: VM-Instanzen können groß sein und mehrere Prozessoren und erhebliche Mengen an Memory umfassen. Das funktioniert gut für Workloads der Unternehmensklasse, aber es gibt eine praktische Begrenzung für die Anzahl der VMs, die auf einem Computer bereitgestellt werden können.
  • Zeit: Die Bereitstellung und Implementierung von VMs kann mehrere Sekunden bis mehrere Minuten dauern. Obwohl das ein kurzer Zeitraum zu sein scheint, lassen sich VMs möglicherweise nicht schnell genug skalieren, um dynamische oder kurzfristige Rechenanforderungen zu erfüllen, bei denen die Elastizität der Ressourcen wichtig ist.
  • Softwarelizenzierung: Jede VM benötigt ein Betriebssystem und eine Arbeitslast, was die Kosten für die Lizenzierung von Betriebssystemen und Anwendungen in die Höhe treiben kann. Ein Unternehmen muss die VM-Bereitstellung sorgfältig verwalten, um Lizenzen zu kontrollieren und sicherzustellen, dass VMs mit teuren Betriebssystem- und Anwendungslizenzen ausgeführt werden und produktive Arbeit für das Unternehmen leisten, um VM-Sprawl zu vermeiden.
Virtuelle Maschinen und Container im Vergleich
Abbildung 1: VMs benötigen mehr Speicherplatz als Container, da sie ein Gastbetriebssystem benötigen, um zu laufen. Jeder Container teilt sich das Betriebssystem des Hosts. Einige Anwender setzen Container innerhalb von VMs ein, um die Sicherheit von Containern zu verbessern.

Was sind Container?

Container sind logische Instanzen, die von Systemhardwareressourcen bereitgestellt werden, die von einer Container-Engine-Software virtualisiert wurden. Jeder Container kann dann mit einer Softwareanwendung und den zugehörigen Abhängigkeiten geladen werden und lässt sich leicht zwischen physischen Systemen neu bereitstellen, auf denen eine geeignete Container-Engine vorhanden ist.

Die virtualisierte Containerumgebung ist anders aufgebaut. Bei Containern wird zuerst ein Host-Betriebssystem wie Linux auf dem System installiert und dann eine Containerebene – in der Regel ein Containermanager wie Docker – auf dem Host-Betriebssystem installiert. Der Containermanager stellt den Hypervisor für Container bereit. Der Ansatz ist fast identisch mit gehosteten oder Typ-2-Hypervisoren.

Sobald Administratoren die Containerebene installiert haben, können sie Containerinstanzen aus den verfügbaren Rechenressourcen des Systems bereitstellen und die Unternehmensanwendungskomponenten in den Containern implementieren. Allerdings verwendet jeder containerisierte Anwendung dasselbe zugrunde liegende Betriebssystem: das einzelne Host-Betriebssystem. Im Vergleich dazu erhält jede virtuelle Maschine ihr eigenes, einzigartiges Betriebssystem. Obwohl die Container-Ebene eine Ebene der logischen Isolierung zwischen Containern bietet, kann das gemeinsame Betriebssystem einen Single Point of Failure für alle Container im System darstellen. Wie bei VMs können auch Container leicht zwischen physischen Systemen mit einem geeigneten Betriebssystem und einer Container-Layer-Umgebung migriert werden.

Vorteile von Containern

Container bieten ihre eigenen einzigartigen Funktionen und Eigenschaften:

  • Größe: Container teilen sich einen einzigen gemeinsamen Betriebssystem-Kernel und verwenden keine eigenen isolierten Betriebssysteme, sodass Container viel kleinere logische Einheiten sind als VMs. Dadurch kann ein Computer weitaus mehr Container gleichzeitig hosten als VMs.
  • Geschwindigkeit: Durch ihre geringe Größe können Containerinstanzen viel schneller erstellt und gelöscht werden als VMs. Dadurch eignen sich Container gut für schnelle Skalierbarkeit und kurzfristige Anwendungsfälle, die für VMs unpraktisch sein könnten.
  • Einzigartiger Hypervisor: Container basieren auf spezialisierten Hypervisor-Plattformen für das Hosting und die Verwaltung, wie zum Beispiel Docker, rkt und Apache Mesos.
  • Unveränderlichkeit: Im Gegensatz zu VMs bewegen sich Container nicht. Stattdessen startet und stoppt der Container-Orchestrator in der Containersoftwareschicht Container, wenn sie benötigt werden. Ebenso wird die Software, die in Containern läuft, nicht wie herkömmliche Software aktualisiert oder gepatcht. Vielmehr werden die Aktualisierungen in ein neues Container-Image integriert, das bei Bedarf erneut bereitgestellt werden kann.

Nachteile von Containern

Container ermöglichen eine enorme Skalierbarkeit und Flexibilität für Unternehmen, haben aber auch einige Nachteile:

  • Leistung: Es kann eine Vielzahl von Containern geben, und Container teilen sich ein gemeinsames Betriebssystem zusätzlich zur Containerschicht. Das bedeutet, dass Container Ressourcen effizient nutzen, aber es kann zu Konflikten zwischen Containern kommen, die versuchen, über das gemeinsame Betriebssystem auf Hardwareressourcen wie Storage oder Netzwerke zuzugreifen. Solche Konflikte können die Gesamtleistung von Containern beeinträchtigen.
  • Kompatibilität: Container, die für eine bestimmte Plattform entwickelt wurden, wie zum Beispiel Docker, funktionieren möglicherweise nicht mit anderen Plattformen. Ebenso funktionieren einige Container-Tools möglicherweise nicht mehr mit mehreren Containerplattformen. Red Hat OpenShift zum Beispiel funktioniert nur mit dem Kubernetes-Orchestrator. Berücksichtigen Sie das Containerökosystem, wenn Sie Containertechnologien für Ihr Unternehmen evaluieren.
  • Storage: Container sind von Haus aus so konzipiert, dass sie zustandslos sind – die Daten in einem Container verschwinden, wenn der Container verschwindet. Es gibt Möglichkeiten, persistenten Storage für Container bereitzustellen, wie zum Beispiel Docker-Datenvolumina, aber persistenter Container Storage ist kein nativer Bestandteil der Containertechnologie und wird oft als separates Thema behandelt.
  • Angemessenheit: Container sind in der Regel kleine und wendige Einheiten, die sich am besten für Anwendungskomponenten oder Dienste wie Microservices eignen. Unternehmensanwendungen mit vollem Funktionsumfang funktionieren in Containern nicht gut. Berücksichtigen Sie die Eignung bei der Planung von Containereinsätzen.

Vergleich von Containern und VMs

Container und VMs weisen jeweils spezielle Merkmale und Kompromisse auf, aber es gibt viele Aspekte, die bei der Auswahl einer Virtualisierungstechnologie zu berücksichtigen sind. In der folgenden Liste werden die wichtigsten Funktionen beider Technologien verglichen:

  • Bereitstellung: Sowohl Container als auch VMs können bereitgestellt werden, indem eine gewünschte Image-Datei in eine entsprechende virtuelle Instanz geladen wird. Eine Image-Datei enthält alle Komponenten, die zum Starten einer VM oder eines Containers erforderlich sind. VMs können auch manuell bereitgestellt werden, da sie sich wie unabhängige Computer verhalten.
  • Fault Tolerance: Sowohl Container als auch VMs unterstützen fehlertolerante Techniken wie zum Beispiel Load-Balanced Clustering, und beide können problemlos aus ihren jeweiligen Image-Dateien wiederhergestellt oder neu gestartet werden. Container sind von Natur aus zustandslos und bergen in der Regel nur ein geringes Risiko von Datenverlusten, wenn ein Fehler auftritt. VMs sind von Natur aus beständig und können bei einem Fehler ein gewisses Maß an Datenverlust erleiden.
  • Isolierung: VMs haben eine vollständige logische Isolierung. VMs wissen nichts von anderen VMs in der Umgebung – auch wenn andere VMs auf demselben physischen Computer ausgeführt werden können. Bei Containern ist die Isolierung geringer, da Container einen gemeinsamen Betriebssystem-Kernel nutzen.
  • Load Balancing: VMs ermöglichen eine Live-Migration und können von einem virtualisierten Computer zu einem anderen migriert werden, um Rechen- und Netzwerklasten auszugleichen. Container bewegen sich nicht, sondern werden auf den Zielcomputer neu erstellt, bevor die ursprüngliche Instanz zerstört wird. Daher unterstützten Container problemlos unveränderliche Infrastrukturkonzepte.
  • Vernetzung: Sowohl Container als auch VMs können instanzübergreifend kommunizieren, entweder auf demselben Computer oder zwischen Computern, die über ein IP-Netzwerk verbunden sind. Die große Anzahl von Containern, die in einer Rechenzentrumsumgebung möglich ist, kann die LAN-Bandbreite schneller belasten als weniger VMs.
  • Leistung: Sowohl Container als auch VMs bieten eine hervorragende Leistung bei annähernd Bare-Metal-Geschwindigkeit. VMs haben einen leichten Leistungsvorteil, da VMs nicht mit den potenziellen Konflikten eines gemeinsam genutzten Betriebssystems konfrontiert sind.
  • Persistentes Storage: VMs verfügen über persistentes Storage mit einer virtuellen Festplatte. Container arbeiten nativ aus dem Memory heraus und erfordern sorgfältige Storage-Tools, wie zum Beispiel Docker-Data-Volumes, um die Containerdaten nach der Zerstörung des Containers zu erhalten.
  • Portabilität und Kompatibilität: VMs nutzen gemeinsame Virtualisierungstechnologien, die häufig auf Open-Source-Komponenten basieren oder aus diesen aufgebaut sind. VMs können portabel oder kompatibel mit Systemen sein, die ähnliche Virtualisierungsplattformen verwenden. Container sind in hohem Maße portabel, und das in Container-Image-Dateien enthaltene Komponentenpaket ermöglicht die Ausführung von Containern auf fast jedem System, das die Containerplattform unterstützt. Allerdings sind die Containerplattformen nicht vollständig kompatibel.
  • Ressourcen: Container benötigen weniger Rechenressourcen und hosten in der Regel kleinere Anwendungen als VMs, so dass ein Unternehmen potenziell viel mehr Container auf einem einzigen Computer unterbringen kann.
  • Skalierbarkeit: Container sind kleiner und benötigen weniger Ressourcen als VMs, so dass Container viel schneller als VMs skaliert – erstellt oder zerstört – werden können. Container werden häufig dort eingesetzt, wo kurzfristig Recheninstanzen benötigt werden.
  • Sicherheit: VMs verwenden separate Betriebssysteme und Anwendungen, so dass eine Sicherheitslücke in einer VM nicht auf andere VMs in der Umgebung übertragbar ist. Container nutzen ein gemeinsames Betriebssystem und können von Fehlern in diesem Betriebssystem betroffen sein, weshalb sie nicht so sicher sind wie VMs. Container können jedoch innerhalb einer VM in einem hybriden Bereitstellungsansatz betrieben werden, was dazu beitragen kann, potenzielle Sicherheitsschwachstellen einzudämmen.
  • Updates und Upgrades: VMs verhalten sich wie unabhängige, voll funktionsfähige Computer. VM-Inhalte, wie Betriebssysteme, Treiber und Anwendungen, können mit herkömmlichen Techniken gepatcht, aktualisiert und aufgerüstet werden. Container verwenden ein festes Paket von Bibliotheken und Binärdateien, die für die Ausführung von Containerplattformen wie Docker erstellt werden. Container können nicht ohne Weiteres live aktualisiert oder aufgerüstet werden. Stattdessen werden Containerdateien aktualisiert und versioniert, und die neue Image-Datei kann erneut bereitgestellt werden, um die Aktualisierungen zu implementieren. Das unterstützt auch unveränderliche Infrastrukturkonzepte.

Vergleich der Sicherheitsaspekte von Containern und VMs

VMs gelten als sicherste und widerstandsfähigste Plattform für Workloads. Hypervisor-Technologien haben sich bewährt, und die logische Isolierung, die Hypervisoren zwischen VMs bieten, stellt sicher, dass jede VM als separater logischer Server mit eigenem Betriebssystem und eigenen Treibern existiert. Alle Elemente, die in und um die VM herum ausgeführt werden – Betriebssystem, Anwendung, Treiber, Autorisierung und Authentifizierung sowie Netzwerkverkehr – sind jedoch Sicherheitslücken ausgesetzt, die genauso wie bei jeder herkömmlichen physischen Bereitstellung ständig behoben werden müssen. Wenn ein Höchstmaß an Isolierung für die Sicherheit erforderlich ist, sind VMs im Vorteil.

Container sind wendig und schnell, aber alle Container laufen auf einem gemeinsamen Betriebssystem. Das ist technisch in Ordnung und hat sich bewährt, aber jeder Fehler oder jede Sicherheitslücke im Betriebssystem kann potenziell alle Container gefährden, die über den gemeinsamen Betriebssystemkern laufen. Der zugrunde liegende Betriebssystemkern stellt eine einzige Schwachstelle dar. Systeme, die für Container eingesetzt werden, verwenden in der Regel ein gehärtetes Betriebssystem. Die Administratoren wenden Sicherheits-Updates und -Patches erst nach umfangreichen Tests und Prüfungen an. Außerdem werden Sicherheitstaktiken wie Intrusion Detection und Prevention in der Regel zum Schutz des Servers eingesetzt. Die Sicherheit kann erhöht werden, indem Gruppen von Containern in VMs ausgeführt werden, wobei die Vorteile von Containern mit der verbesserten Isolierung von VMs kombiniert werden.

Container, VMs oder beides: Die Wahl der besten Option

Die Wahl der Instanz wird durch architektonische Ziele bestimmt. Herkömmliche monolithische Anwendungen – die immer noch weit verbreitet und für viele Unternehmensanwendungen geeignet sind – sind optimal für VMs und gängige Hochverfügbarkeitstechniken wie Clustering. Solche traditionellen Anwendungen sollen oft über lange Zeiträume laufen und nutzen die hohe Sicherheit, die die VM-Isolierung bieten kann.

Im Vergleich dazu können Anwendungskomponenten und -dienste recht gut in Containern funktionieren, wo Eigenschaften wie schneller Start, Elastizität und hohe Skalierbarkeit – und möglicherweise kurze Betriebszeiten – zum Vorteil der Container wirken. Container werden jedoch zunehmend von neuen Software-Designmodellen wie Microservices-Architekturen angetrieben. Microservices ermöglichen es, das Design einer Anwendung als separate funktionale Komponenten aufzubrechen, zu entwickeln, bereitzustellen und zu unterstützen, jede in einem schnellen, hoch skalierbaren Container, der auch unabhängig skaliert und migriert werden kann. Somit sind Container für flexible und skalierbare Anwendungsdesigns attraktiv geworden.

Die Wahl zwischen Containern und VMs schließt sich nicht gegenseitig aus. Container und VMs können ohne Weiteres in derselben Rechenzentrumsumgebung – und sogar auf demselben Server – koexistieren. Daher werden die beiden Technologien als komplementär betrachtet und erweitern das verfügbare Toolset von Anwendungsarchitekten und Rechenzentrumsadministratoren, um einzigartige Vorteile für die am besten geeigneten Workloads zu bieten. Der Trick besteht also darin, die virtuelle Instanz an die richtige Arbeitslast anzupassen.

Erfahren Sie mehr über Server- und Desktop-Virtualisierung