Zdenk Kluka - stock.adobe.com
Container oder virtuelle Maschinen? So entscheiden Sie sich
Container sind eine neue, beliebte Technologie für die Rechenzentrums-Virtualisierung. Doch in manchen Fällen ist es besser, auf herkömmliche virtuelle Maschinen zu setzen.
Virtualisierung hat das Gesicht des modernen Computing verändert. Sie hat die Systemauslastung verbessert, Anwendungen von der zugrundeliegenden Hardware entkoppelt sowie die Mobilität und den Schutz von Workloads verbessert. Hypervisoren und virtuelle Maschinen sind jedoch nur eine Methode zur Bereitstellung virtueller Workloads.
Containervirtualisierung hat sich als effiziente und zuverlässige Alternative zur herkömmlichen Virtualisierung herausgestellt. Sie bietet Fachleuten in Rechenzentren neue Funktionen und Lösungen für bekannte Probleme.
Der Unterschied zwischen Containern und virtuellen Maschinen (VMs) liegt hauptsächlich im Speicherort der Virtualisierungsschicht und in der Art und Weise, wie die Architektur Betriebssystemressourcen verwendet. Container und VMs sind einfach verschiedene Methoden für das Bereitstellen und Verwalten von Rechenressourcen – Prozessoren, Speicher und E/A (Eingang/Ausgang, Input/Output, I/O) – wie sie bereits in einem physischen Computer vorhanden sind. Die beiden Ansätze ähneln sich also in ihrem allgemeinen Ziel, erreichen dieses aber auf unterschiedlichen Wegen.
Was sind virtuelle Maschinen?
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. Einige Hypervisoren wie VMware vSphere ESXi und Microsoft Hyper-V benötigen kein zusätzliches Betriebssystem; die zugehörigen Funktionen übernehmen sie selbst. Sobald Administratoren die Hypervisor-Schicht installiert haben, können sie VM-Instanzen aus den verfügbaren Computerressourcen bereitstellen.
Jede VM erhält dann ihr eigenes Betriebssystem und ihre eigenen Workloads. Somit sind VMs vollständig voneinander isoliert und laufen unabhängig. Malware, Anwendungsabstürze und andere Probleme betreffen nur diese VM. Administratoren können virtuelle Maschinen von einem virtualisierten System auf ein anderes migrieren, ohne Rücksicht auf die Hardware oder die Betriebssysteme nehmen zu müssen.
Dieselbe Hardware kann verschiedene virtuelle Maschinen hosten. Häufig ist die erste virtuelle Maschine die Host-VM, in der Systemverwaltungs-Workloads wie Microsoft System Center laufen. Nachfolgende VMs enthalten dann andere Unternehmens-Workloads wie Datenbanken, ERP (Enterprise Resource Planing), CRM (Customer Relations Management), E-Mail-Server, Medienserver, Webserver oder andere Geschäftsanwendungen.
VMs zeichnen sich durch mehrere gemeinsame Merkmale aus:
Isolation: Jede VM ist logisch von den anderen isoliert. VMs enthalten keine Informationen über die Existenz anderer virtueller Maschinen und teilen keine Softwarekomponenten.
Kompatibilität: VMs sind vollständig kompatibel mit allen Standard-x86-Betriebssystemen, -Anwendungen und anderen Softwarekomponenten, so dass sie jede Software ausführen können, die auf einem physischen x86-Computer läuft.
Portabilität: Virtuelle Maschinen können von einem virtualisierten Computer auf einen anderen virtualisierten Computer migriert werden.
Vorteile von Virtuellen Maschinen
VMs sind in den letzten 20 Jahren zu einem De-facto-Standard für die Virtualisierung geworden und bieten Unternehmen zahlreiche Vorteile, darunter:
Unabhängigkeit: Das Isolieren virtueller Maschinen bedeutet, dass Fehler und Ausfälle im Betriebssystem oder in Anwendungen keine Auswirkungen auf andere VMs in der Rechenzentrumsumgebung haben.
Ressourcennutzung: Da mehrere VMs auf demselben physischen Computer bereitgestellt und betrieben werden, passen durch die Technologie mehr Workloads auf dasselbe Gerät. Dies ermöglicht die Serverkonsolidierung im Rechenzentrum.
Verfügbarkeit: Durch die Portabilität können Administratoren mit virtuellen Maschinen die Last auf mehrere Systeme verteilen, um die Leistung zu verbessern und Systemwartungsaufgaben zu unterstützen. Sie können VMs auch in Dateien kopieren oder aus diesen wiederherstellen. Das erhöht die Ausfallsicherheit der Umgebung.
Flexibilität: Mit virtuellen Maschinen ist es möglich, mehrere Betriebssysteme auf demselben physischen Computer zu verwenden. Das geht mit Bare-Metal-Systemen nicht.
Sicherheit: Hypervisoren und die von ihnen bereitgestellte logische Isolation haben sich für VMs als sicher erwiesen. Einzelne virtuelle Maschinen können kompromittiert sein, doch das wirkt sich nicht auf die anderen aus.
Nachteil von virtuellen Maschinen
Trotz der erheblichen Vorteile weisen VMs auch einige Nachteile auf:
Größe: VM-Instanzen können recht groß werden, mehrere Prozessoren und viel Speicher umfassen. Das funktioniert gut für Workloads der Enterprise-Klasse, aber die Anzahl der virtuellen Maschinen, die auf einen Computer passt, ist praktisch begrenzt.
Zeit: Das Erstellen und Bereitstellen von VMs kann einige Sekunden bis mehrere Minuten dauern. Das ist nicht viel, doch in manchen Fällen können virtuelle Maschinen dadurch nicht schnell genug skalieren, um dynamische oder kurzfristige Computeranforderungen zu erfüllen.
Softwarelizenzen: Jede virtuelle Maschine benötigt ein Betriebssystem und viele enthalten Anwendungen, so dass die Kosten für deren Lizenzierung in die Höhe schießen können. Administratoren müssen also diese Bereitstellungen sorgfältig verwalten, um Lizenzen zu steuern und sicherzustellen, dass die zugehörigen virtuellen Maschinen produktive Arbeit für das Unternehmen leisten.
Was sind Container?
Die virtualisierte Containerumgebung ist anders strukturiert als eine virtuelle Maschine. Bei Containern ist zuerst ein Host-Betriebssystem wie Linux auf dem System installiert, und auf dieser läuft eine Containerschicht – normalerweise ein Containermanager wie Docker. Der Containermanager stellt im Wesentlichen den Hypervisor für Container bereit. Die Vorgehensweise ist fast identisch mit gehosteten oder Typ 2-Hypervisoren.
Sobald Administratoren die Containerebene installiert haben, können sie Containerinstanzen aus den verfügbaren Computerressourcen des Systems bereitstellen und Unternehmens-Anwendungskomponenten in den Containern betreiben. Jede containerisierte Anwendung verwendet jedoch dasselbe zugrunde liegende Betriebssystem: das Host-Betriebssystem. Im Vergleich dazu erhält jede VM ein eigenes Betriebssystem. Obwohl die Containerebene eine logische Isolationsstufe zwischen Containern bietet, kann ein Fehler beim Betriebssystem allen zugehörigen Container beeinflussen.
Wie bei virtuellen Maschinen können auch Container problemlos zwischen physischen Systemen verschoben werden, solange diese das geeignete Betriebssystem haben.
Vorteile von Containern
Container bieten ihre eigenen einzigartigen Merkmale und Eigenschaften:
Größe: Container enthalten kein eigenes Betriebssystem, sondern teilen sich eines. Dadurch sind sie viel kleinere Einheiten als virtuelle Maschinen. Auf dasselbe Gerät passen somit viel mehr Container als virtuelle Maschinen.
Geschwindigkeit: Durch die geringe Größe der Containerinstanzen können sie viel schneller als VMs herauf- und wieder herunterfahren. Das macht Container gut geeignet für Szenarien, in denen Nutzer auf schnelle Skalierbarkeit angewiesen sind und Ressourcen nur kurzfristig benötigen.
Einzigartiger Hypervisor: Container basieren auf speziellen Hypervisor-Plattformen wie Docker, rkt und Apache Mesos.
Unveränderlichkeit: Im Gegensatz zu VMs verändern sich Container nicht. Stattdessen startet und stoppt der Containerorchestrator in der Containersoftwareschicht Container nach Bedarf. Ebenso wird die Software, die in Containern ausgeführt wird, nicht wie herkömmliche Software aktualisiert oder gepatcht. Stattdessen erstellen Admins anhand der aktualisierten Version ein neues Container-Image und starten dann von diesem Image einen Container.
Nachteile von Containern
Container bieten Unternehmen eine enorme Skalierbarkeit und Flexibilität im Vergleich zu anderen Formen der Virtualisierung; es gibt jedoch mehrere Nachteile:
Performance: Viele Container passen zeitgleich auf eine Infrastruktur und sie basieren auf einem gemeinsamen Betriebssystem. Das erlaubt es ihnen, Ressourcen besonders effizient zu nutzen. Es kann jedoch zu Konflikten zwischen Containern kommen, die versuchen zeitgleich auf Hardwareressourcen wie Netzwerke zuzugreifen. Das kann die Leistung der Architektur negativ beeinflussen.
Kompatibilität: Für eine Plattform wie Docker verpackte Container funktionieren möglicherweise nicht auf anderen Plattformen. In ähnlicher Weise funktionieren einige Container-Tools möglicherweise nicht mit verschiedenen Containerplattformen. So arbeitet Red Hat OpenShift nur mit Kubernetes. Wer sich für ein Containerökosystem interessiert, sollte bei dessen Bewertung daher auf Kompatibilität achten.
Lager: Container sind von Haus aus so konzipiert, dass sie zustandslos (stateless) sind. In einem Container lassen sich also keine Daten aus einer Sitzung speichern und in der nächsten wiederverwenden. Es gibt Möglichkeiten, einen dauerhaften Speicher für Container bereitzustellen, zum Beispiel mit Docker-Daten-Volumes. Persistenter Speicher für Container wird jedoch häufig als separates Problem behandelt.
Eignung: Container sind in der Regel kleine und agile Einheiten, die sich am besten für Anwendungskomponenten oder -dienste wie Microservices eignen. Umfangreiche Unternehmensanwendungen funktionieren hingegen in Containern im Allgemeinen nicht gut.
Container und virtuelle Maschinen im Vergleich
Container und VMs weisen jeweils einzigartige Eigenschaften auf und haben ihre eigenen Ansprüche. Bei der Auswahl einer Virtualisierungstechnologie sind viele Faktoren zu berücksichtigen. Die folgende Liste fasst einige der häufigsten Entscheidungskriterien zusammen:
Bereitstellungsweise: Nutzer starten sowohl Container als auch virtuelle Maschinen von einer Image-Datei. Sie enthält alle Komponenten, die zum Laden einer VM oder eines Containers erforderlich sind. Virtuelle Maschinen können Anwender auch manuell bereitstellen, da sie als unabhängige Computer fungieren.
Fehlertoleranz: Sowohl Container als auch VMs unterstützen Technologien zur Verbesserung der Fehlertoleranz von Infrastrukturen wie Cluster mit Lastenausgleich (Load Balancing). Administratoren stellen außerdem beide Varianten problemlos aus ihren jeweiligen Image-Dateien wieder her. Container sind von Haus aus zustandslos und bergen normalerweise nur ein geringes Risiko für Datenverlust, wenn ein Fehler auftritt. VMs sind hingegen persistent und können daher Datenverlust erleiden, wenn es zu einem Problem kommt.
Isolation: Virtuelle Maschinen sind voneinander vollständig logisch isoliert. Container sind hingegen weniger isoliert, da sie einen gemeinsamen Betriebssystemkern verwenden.
Load Balancing: Virtuelle Maschinen ermöglichen eine Live-Migration und können von einem virtualisierten Computer auf einen anderen migriert werden, um die Computer- und Netzwerklasten auszugleichen. Container bewegen sich nicht, sondern sie werden am Zielort neu gestartet. Somit unterstützen Container unveränderliche Infrastruktur (Immutable Infrastructure).
Vernetzung: Sowohl Container als auch VMs kommunizieren instanzübergreifend, entweder auf demselben Computer oder zwischen Computern, die über ein IP-Netzwerk verbunden sind. Eine große Zahl an Containern kann die LAN-Bandbreite schneller belasten als wenige VMs.
Performance: Sowohl Container als auch virtuelle Maschinen bieten eine hervorragende Leistung bei Geschwindigkeiten, die sehr nahe an die von Bare-Metal-Bereitstellungen herankommen. VMs haben einen leichten Leistungsvorteil, da sie nicht wie Container bei Engpässen durch das gemeinsame Betriebssystem aufgehalten werden.
Speicher: VMs enthalten dauerhaften Speicher mit einer virtuellen Festplatte. Container arbeiten nativ aus dem Speicher und erfordern spezielle Speicherwerkzeuge, um Daten über die Lebensdauer des Containers hinaus zu speichern.
Portabilität und Kompatibilität: Virtuelle Maschinen verwenden oft gemeinsame Open-Source-Virtualisierungstechnologien oder solche, die zumindest auf Open-Source-Komponenten basieren. Sie sind meist kompatibel mit Systemen, die ähnliche Virtualisierungsplattformen verwenden. Container sind in hohem Maße portabel, und die in Container-Images integrierte Verpackung kann das Ausführen von Containern in nahezu jedem System unterstützen, auf dem die Containerplattform läuft. Containerplattformen sind jedoch nicht vollständig kompatibel.
Ressourcen: Container verbrauchen weniger Rechenressourcen und hosten normalerweise kleinere Anwendungen als virtuelle Maschinen, so dass ein Unternehmen oft weit mehr Container auf einem einzelnen Computer unterbringen kann.
Skalierbarkeit: Container sind kleiner und erfordern weniger Ressourcen als VMs. Nutzer können sie viel schneller skalieren – erstellen oder zerstören – als VMs. Container kommen oft zum Einsatz, wo nur kurzfristig Recheninstanzen erforderlich sind.
Sicherheit: VMs verwenden separate Betriebssysteme und Anwendungen, so dass eine Sicherheitslücke in einer VM keine Auswirkungen auf andere VMs in der Umgebung hat. Container haben ein gemeinsames Betriebssystem und sind von Fehlern im Betriebssystem betroffen. Daher sind sie nicht so sicher wie VMs. Sie können jedoch innerhalb einer VM in einem hybriden Bereitstellungsansatz betrieben werden, wodurch Anwender potenzielle Sicherheitslücken eindämmen.
Updates und Upgrades: VMs fungieren als unabhängige, voll funktionsfähige Computer. Deshalb funktionieren die gewohnten Vorgehensweise für das Patchen und Aktualisieren von Inhalten wie Betriebssystemen, Treibern und Anwendungen.
Container hingegen verwenden ein festes Paket von Bibliotheken und Binärdateien, die für die Ausführen auf Containerplattformen wie Docker erstellt wurden. Container lassen sich nicht ohne weiteres live aktualisieren oder versionieren. Stattdessen nehmen IT-Fachleute alle Änderungen am Container-Image vor und starten anschließend den Container von diesem aktualisierten Image neu.
Container versus virtuelle Maschinen: Sicherheitsprobleme
Es ist kein Geheimnis, dass die Sicherheit von Workloads und Daten für fast jedes Unternehmen ein kritisches Thema ist. Das ordnungsgemäße Ausführen eines Workloads ist häufig eine Frage der Business Continuity und der Einhaltung von Unternehmensrichtlinien. Die allgegenwärtige Bedrohung durch Hacker, Malware und andere Cyberangreifer erhöht die Wichtigkeit einer gehärteten Umgebungen.
VMs gelten allgemein als die sicherste und belastbarste Plattform für Workloads. Hypervisor-Technologien haben sich bewährt, und die logische Isolation zwischen virtuellen Maschinen bietet mehr Sicherheit. Alle in und um die VM ausgeführten Elemente – Betriebssystem, Anwendung, Treiber, Autorisierung und Authentifizierung sowie Netzwerke – können jedoch selbst Sicherheitslücken aufweisen, die Admins laufend im Auge behalten sollten. Die Isolierung verschafft virtuellen Maschinen trotzdem bei der Sicherheit einen entscheidenden Vorteil.
Container sind agil und schnell, doch sie laufen auf einem gemeinsamen Betriebssystem. Dieses wird dadurch zu einer entscheidenden Schwachstelle. Sicherheitsprobleme können hier möglicherweise alle Container verwundbar machen.
Der zugrundeliegende Betriebssystemkern wird dann zum Single Point of Failure (SpoF). Deshalb ist es wichtig, für Container auf ein gehärtetes, bewährtes Betriebssystem zu setzen. Administratoren sollten Updates und Patches erst nach umfangreichen Tests auf das Betriebssystem aufspielen. Sicherheitstaktiken wie Intrusion Detection sind üblich, um den Server zu schützen, auf dem die Container laufen. Zur Sicherheit trägt auch bei, wenn Container in VMs ausgeführt werden. Auf diese Weise lässt sich die Isolation der VM mit der Agilität von Containern verbinden.
Container, VMs oder beides: So entscheiden Sie sich
Die Auswahl der Instanzen hängt weitgehend von den architektonischen Zielen ab. Herkömmliche monolithische Anwendungen, die auch bei Unternehmensanwendungen weit verbreitet sind, eignen sich im Allgemeinen gut für VMs und gängiges High Performance Computing (HPC).
Diese Anwendungen laufen meistens im Dauerbetrieb und stellen hohe Anforderungen an die Sicherheit. Beides spricht eher für die Nutzung virtueller Maschinen.
Im Vergleich dazu können Anwendungskomponenten und -dienste in Containern recht gut funktionieren, wenn ein schneller Start, hohe Skalierbarkeit und kurze Betriebszeiten gefragt sind. Moderne Anwendungsdesignkonzepte wie Microservices sind oft auf Container angewiesen. Dabei ist die Anwendung in verschiedene Funktionskomponenten aufgeteilt, die sich jeweils in einem schnellen, hoch skalierbaren Container befinden.
Letztendlich schließen sich aber virtuelle Maschinen und Container nicht gegenseitig aus. Sie koexistieren problemlos in derselben Rechenzentrumsumgebung – und sogar auf demselben Server. Auf diesem Wege lassen sich die Vorteile beider Technologien miteinander verbinden. IT-Experten sollten also die Art der virtuellen Instanz auf Workload-Ebene entscheiden.