Virtuelle Maschinen (VMs) vs. Container: Was ist der Unterschied?

Virtuelle Maschinen (VMs) vs. Container: Was ist der Unterschied?

  • ITOps & DevOps
6 Minuten Lesezeit Aktualisiert Jul 27, 2020

Auf einen Blick: Virtuelle Maschinen (VMs) emulieren physische Hardware, während Container modulare Anwendungen in isolierten Umgebungen bereitstellen und so die Effizienz und Skalierbarkeit erhöhen. VMs erfordern komplette OS-Migrationen für Workload-Transfers, was zu Ressourcenverschwendung führt, während Container es mehreren Workloads ermöglichen, Ressourcen zu teilen, was die Entwicklungsgeschwindigkeit erhöht.

  • VMs sind ressourcenintensiv und weniger flexibel.
  • Container maximieren die Ressourcennutzung und unterstützen schnelle Entwicklungszyklen.

Die Virtualisierung revolutionierte das vernetzte Computing Anfang der 1970er Jahre und ebnete den Weg für beispiellose Paradigmenwechsel – wie die Cloud-Computing-Revolution des letzten Jahrzehnts.

In jüngerer Zeit entstand die Container-Revolution mit einem ähnlichen Ziel: Verbesserungen in Rechenzentrumstechnologien und Anwendungsentwicklung. Die Technologie ist nicht völlig neu. Linux-Containerlösungen wie LXC und Solaris Zones sind seit über einem Jahrzehnt in der Branche. Unternehmen wie Google nutzen ihre eigenen Container-Technologien seit mehreren Jahren. (Google startet Berichten zufolge wöchentlich 2 Milliarden Container!)

Erst als Docker 2013 mit seinen entwicklerfreundlichen Containerlösungen und dem Ökosystem von Docker auf den Markt kam, gewann die Technologie in der Unternehmens-IT wirklich an Bedeutung. Tatsächlich steuern wir möglicherweise auf eine Ära zu, in der traditionelle Virtualisierungsmethoden vollständig der Containerisierung weichen werden.

Bevor Sie containerbasierte Entwicklungslösungen für App-Entwicklung und Software-Release-Prozesse nutzen, stellen Sie sicher, dass Sie die Konzepte und Abläufe von virtuellen Maschinen und Containern vollständig verstehen. Am Ende dieses Artikels werden Sie:

  • Verstehen Sie die Konzepte und Unterschiede von VMs und Containern
  • Betrachten Sie die Nachteile beider
  • Entdecken Sie wichtige Trends
  • Erhalten Sie Tipps zum Einstieg in Behälter

Was ist eine virtuelle Maschine?

Eine virtuelle Maschine (VM) lässt sich am besten als ein Softwareprogramm beschreiben, das die Funktionalität einer physischen Hardware oder eines Computersystems emuliert. Sie läuft auf einer emulierenden Software, dem sogenannten Hypervisor, die die Funktionalität der zugrunde liegenden physischen Hardwareressourcen mit einer Softwareumgebung repliziert. Diese Ressourcen werden als Host-Maschine bezeichnet, während die VM, die auf dem Hypervisor läuft, oft als Gastrechner bezeichnet wird.

Die virtuelle Maschine enthält alle notwendigen Elemente, um die Apps auszuführen, darunter:

  • Informatik
  • Lagerung
  • Erinnerung
  • Netzwerke
  • Hardware-Funktionalität verfügbar als virtualisiertes System

Die VM kann auch die notwendigen Systembinaries und Bibliotheken enthalten, um die Apps auszuführen. Das eigentliche Betriebssystem (OS) wird jedoch über den Hypervisor verwaltet und ausgeführt.

[Helix-Video]

Wie virtuelle Maschinen funktionieren

Die virtualisierten Hardwareressourcen werden zusammengefasst und den auf der VM laufenden Anwendungen zur Verfügung gestellt. Anschließend wird eine Abstraktionsschicht erstellt, um die Apps von der zugrundeliegenden physischen Infrastruktur zu entkoppeln. Das bedeutet, dass die physische Hardware verändert, aufgerüstet oder skaliert werden kann, ohne die App-Leistung zu beeinträchtigen.

Eine VM arbeitet als isolierter PC, und die zugrunde liegende Hardware kann mehrere unabhängige, isolierte VMs für verschiedene Arbeitslasten betreiben. Die Operationen von VMs sind typischerweise ressourcenintensiv und erlauben keine einzelnen App-Funktionalitäten in isolierten, PC-ähnlichen virtualisierten Umgebungen, es sei denn, eine separate VM wird für verschiedene modulare Elemente der App verwendet. Wenn eine App-Arbeitslast zwischen verschiedenen virtuellen Maschinen oder physischen Rechenzentrumsstandorten migrieren muss, muss das gesamte Betriebssystem mitmigrieren.

Selten verbraucht eine Workload-Operation alle Ressourcen, die der zugehörigen VM zur Verfügung stehen. Daher werden die verbleibenden ungenutzten Ressourcen oft nicht in die Kapazitätsplanung und -verteilung über alle VMs und Workloads integriert. Dies führt zu einem großen Nachteil von VMs: ungenaue Planung und erhebliche Ressourcenverschwendung – obwohl Virtualisierung speziell entwickelt wurde, um die Nutzung und Verteilung von Hardware-Ressourcen innerhalb eines Rechenzentrums zu optimieren.

Moderne Apps und IT-Dienste werden in mehreren modularen Abschnitten entwickelt, um Folgendes zu ermöglichen:

  • Schnellere Entwicklung und Veröffentlichung
  • Hohe Skalierbarkeit
  • Die Flexibilität, die Anwendungsentwicklung an sich ändernde Geschäfts- und Marktbedürfnisse weiterzuentwickeln

Monolithische App-Entwicklungspraktiken verlieren an Beliebtheit, und Organisationen verfolgen Lösungen für Infrastrukturarchitekturen, um die Hardwarenutzung weiter zu optimieren. Genau deshalb wurde die Containerisierung erfunden und als praktikable Alternative populär geworden.

Was ist ein Behälter?

Containerisierung schafft eine Abstraktion auf Betriebssystemebene, die es ermöglicht, individuelle, modulare und eigenständige Funktionen der App unabhängig auszuführen. Dadurch können mehrere isolierte Workloads – die Container – dynamisch mit denselben physischen Ressourcen betrieben werden.

Eine weniger technische Definition von Containern könnte sein: eine Softwareeinheit, die leicht ist, aber dennoch den Code, seine Abhängigkeiten und die Konfiguration in einem einzigen Bild bündelt. Container können ausgeführt werden:

  • Oben auf Bare-Metal-Servern
  • Oben auf Hypervisoren
  • In der Cloud-Infrastruktur

Container teilen alle notwendigen Funktionen mit der VM, um als isolierte OS-Umgebung für eine modulare App-Funktionalität zu funktionieren, mit einem wesentlichen Unterschied. Mit Hilfe einer Containerisierungs-Engine wie der Docker Engine schaffen Container mehrere isolierte Betriebssystemumgebungen innerhalb desselben Host-System-Kernels, die mit anderen Containern geteilt werden können, die für verschiedene Funktionen der App vorgesehen sind. Für jeden Container werden nur Bins, Bibliotheken und andere Laufzeitkomponenten separat entwickelt oder ausgeführt, was sie ressourceneffizienter macht im Vergleich zu VMs.

Vorteile von Behältern

Container sind besonders nützlich bei der Entwicklung, Bereitstellung und Erprobung moderner verteilter Apps und Microservices, die in isolierten Ausführungsumgebungen auf denselben Hostmaschinen betrieben werden können.

Bei der Containerisierung müssen Entwickler keinen Anwendungscode in verschiedene VMs schreiben, die unterschiedliche App-Komponenten betreiben, um Rechen-, Speicher- und Netzwerkressourcen abzurufen. Eine vollständige Anwendungskomponente kann in ihrer isolierten Umgebung vollständig ausgeführt werden, ohne andere App-Komponenten oder Software zu beeinflussen. Konflikte innerhalb von Bibliotheken oder App-Komponenten treten während der Ausführung nicht auf, und der Anwendungscontainer kann effizient zwischen Cloud- oder Rechenzentrumsinstanzen wechseln.

Das Sicherheitsproblem

Natürlich ist nicht alles rosig: Vielleicht ist der größte Nachteil von Containern ihr Mangel an Sicherheit. Im Jahr 2018 hatten laut Tripwire 60 % der Organisationen einen Sicherheitsvorfall, der speziell für Container zuständig war. Es gibt die üblichen Sicherheitslücken – Bugs, schlechte Authentifizierung und Autorisierung sowie sogar eine Fehlkonfiguration. Das bedeutet, dass die potenzielle Angriffsfläche groß ist.

Aber es ist nicht so einfach, Sicherheit in den gesamten Stack, den Lebenszyklus und die gesamte Pipeline zu integrieren. Das erklärt, warum fast die Hälfte der Organisationen in dieser Umfrage zugegeben hat, Container mit bekannten Schwachstellen einzusetzen und/oder ohne Tests auf Schwachstellen zu testen.

Dennoch beziehen immer mehr Teams von Anfang an DevOps und SecOps ein, wie wir unten in den Trends sehen werden, während Container exponentiell wachsen.

Architektur: Container vs. virtuelle Maschinen

Virtuelle Maschinen vs. Container
Eine Visualisierung des architektonischen Unterschieds zwischen VMs und Containern

Wichtige Wertversprechen

Der architektonische Unterschied bietet folgende zentrale Wertversprechen für IT-Personal und Unternehmen:

  • Kontinuierliche Integration, Bereitstellung und Testing. In DevOps-basierten Organisationen können Container nutzen, um Prozesse in der CI/CD-Pipeline zu erleichtern. Container funktionieren als konsistente Infrastrukturumgebung, sodass Entwickler nicht für jeden SDLC-Sprint komplexe Konfigurationsaufgaben durchführen müssen, während die Workloads über die physischen Ressourcen migrieren.
  • Workload-Portabilität. IT-Workloads können zwischen verschiedenen Infrastrukturinstanzen und virtuellen Umgebungen wechseln, ohne größere Konfigurationsänderungen oder Überarbeitungen am Anwendungscode zu benötigen.
  • Softwarequalität und Compliance. Transparente Zusammenarbeit zwischen Entwicklern und Testpersonal bei der Bereitstellung von Betriebsteilen der Anwendung führt zu besserer Softwarequalität, schnelleren Entwicklungszyklen und verbesserter Compliance.
  • Kostenoptimierung. Container maximieren die Ressourcennutzung innerhalb ihrer eigenen, isolierten virtualisierten Umgebungen. Dies ermöglicht es Organisationen, die Kapazität und den Verbrauch der Infrastruktur genau zu planen.
  • Infrastruktur-agnostisch. Container machen die App-Komponenten infrastrukturagnostisch und ermöglichen es Organisationen, Arbeitslasten von Bare-Metal-Servern zu virtualisierten Umgebungen und Cloud-Infrastruktur zu verlagern, um auf sich ändernde Geschäftsanforderungen zu reagieren.

Containertrends

Diese Wertversprechen rechtfertigen das wachsende Interesse und die Ausgaben für Containerisierungstechnologien. Und das geschieht schnell! So schnell, dass Gartner schätzt, dass bis 2023 mehr als zwei Drittel der globalen Organisationen 2+ containerisierte Anwendungen betreiben werden. Im Vergleich zum letzten Jahr: 2019 lag diese Zahl unter 20 %.

Im aktuellen State of Container and Kubernetes Security Report von Anfang 2020 befragte Stackrox mehr als 500 Technikfachleute zu Container- und Adoptionstrends. Hier sind einige wichtige Erkenntnisse:

  • Containerisierte Apps nehmen stark zu. Unternehmen, die mehr als die Hälfte ihrer Apps containerisiert haben, sprangen in nur sechs Monaten von 23 % auf 29 %. Das entspricht einer Wachstumsrate von 29 %.
  • Container bringen DevOps und Sicherheit mit ins Spiel. Ein großes Problem bei Containern ist die Sicherheit, daher beziehen ausgereifte Container-Nutzer DevOps und Security schon viel früher in den Prozess ein – ein großer Erfolg für DevSecOps
  • AWS ist weiterhin König. Aber wer bei Cloud-Deployments #2 wird, ist ein fortlaufender Kampf: Azure bleibt auf einem prekären zweiten Platz, da GCP seinen dritten Platz um sieben Prozentpunkte verbessert hat.
  • Azure-Nutzer haben die geringste Containerreife. Nur 20 % der Azure-Nutzer haben die Hälfte oder mehr ihrer Anwendungen containerisiert – im Vergleich zu 33 % aller Nicht-Azure-Nutzer.

Wie man Container in Ihrer Organisation implementiert

Unternehmen müssen sich nicht scheuen, Container zu Ihren Werkzeugen hinzuzufügen. Möchten Sie davon profitieren? Hier sind einige Möglichkeiten, mit Containern zu arbeiten:

  • Schau dir deine aktuelle Umgebung an. Analysiere deine Apps, überprüfe, welche Umgebungen für sie am besten geeignet sind. Wirst du deine Apps refaktorieren oder komplett neu bauen? Wenn Refactoring dich interessiert, beginne mit einer eigenständigen App, die keine Interaktion mit anderen Apps erfordert, um zu laufen.
  • Experimentiere mit Kubernetes. Es ist gut möglich, dass deine Entwickler bereits K8s verwenden. Erfahren Sie mehr in unserem mehrteiligen Kubernetes-Leitfaden.
  • Nehmen Sie die Förderer an. Jemand (oder viele) in Ihrem Unternehmen hat wahrscheinlich eine oder zwei Gedanken zu einer Containerisierungsstrategie. Sprechen Sie mit ihnen, lernen Sie von ihnen und überlegen Sie, sie zum Gesicht dieser Bemühungen zu machen.
  • Bestimmen Sie ein Projekt. Identifizieren Sie ein kleines Projekt, mit dem Sie beginnen möchten, benennen Sie das Team und skizzieren Sie, was Sie erreichen möchten. Bewerten Sie die späteren Veränderungen.
  • Fördere Bildung. Neue Technologien brauchen Zeit, um gut zu lernen. Überlege, in Kubernetes-Zertifizierungen zu investieren oder zumindest deinen Entwicklern etwas engagierte Lernzeit zu geben.

Für DevOps-getriebene Organisationen, die sich auf schnellere und kontinuierliche Release-Zyklen verteilter, microservices-basierter App-Funktionen konzentrieren, wird die Containerisierung weiterhin Investitionen anziehen, insbesondere in Bereichen, in denen die Virtualisierung nicht geliefert hat.

Zusätzliche Ressourcen

Für mehr zu diesem Thema entdecken Sie diese Ressourcen:

Original-Referenzbild:

Graph der VM vs. Container

Diese Beiträge sind meine eigenen und spiegeln nicht unbedingt die Position, Strategien oder Meinung von BMC wider.

Mehr aus ITOps & DevOps

Abonnieren Sie The Brief

Mit der Registrierung für dieses Angebot bestätigen Sie, dass Sie die Datenschutzrichtlinie von BMC gelesen und zugestimmt haben.

Danke

Sie haben The Brief abonniert
Das Briefing umfasst die Mainframe- und Enterprise-Orchestrierung – BMC AMI und Control-M – sowie die Analystenforschung, Kundeneinsätze und Events in beiden Bereichen.