Starnberg, 11. Juli 2024 - Blogpost: Durch die Kombination beider Technologien die Vorteile beider Lösungsansätze nutzen, um robuste und agile IT-Infrastruktur bereitzustellen…
Zum Hintergrund des Blogposts: Der Einsatz von Containerlösungen im Vergleich zu herkömmlicher Virtualisierung bietet für verschiedene Applikationsszenarien Vorteile. Mit Cloud-nativen Architekturen wird es möglich, skalierbare Anwendungen für öffentliche, private- oder hybriden Umgebungen zu erstellen und auszuführen. Es entstehen lose gekoppelte Systeme, die sowohl flexibel und stabil als auch zentral verwaltbar sind. In Kombination mit einer robusten Automatisierung lassen sich zudem mit minimalem Aufwand im laufenden Betrieb Änderungen vorzunehmen. Die klassische Virtualisierung ist aktuell für viele Legacy-Anwendungen gesetzt, insbesondere, wenn branchenspezifische Sicherheitsanforderungen mit Szenarien die eine vollständige Betriebssystemisolation erforderlich machen, beachtet werden müssen.
Die aus Speicherverwaltungs-Sicht in diesem Umfeld (vielfach auf Open-Source-Technologie) basierenden software-definierten Lösungen integrieren Datei-, Block- und Objektspeicherdienste direkt im Applikations-Cluster und führen sie mit anderen, den Speicher allokierenden Services, zusammen. So können Cloud-native Cluster autark und portabel über Public Clouds und On-Premise-Bereitstellungen hinweg betrieben werden.
A) Faktoren und Einsatzszenarien, bei denen Containerlösungen im Betrieb sinnvoll sind
1. Anwendungsmodernisierung mit Microservices-Architekturen: Container sind für die Entwicklung und Bereitstellung von Microservices-Architekturen, bei denen Anwendungen in kleine, unabhängige Dienste aufgeteilt werden, ideal. Sie können unabhängig voneinander skaliert und aktualisiert werden.
2. DevOps: Container unterstützen DevOps-Praktiken wie Continuous Integration/Continuous Deployment (CI/CD), da sie eine konsistente Umgebung vom Entwicklung bis zur Produktion ermöglichen.
3. Plattformunabhängigkeit: Container ermöglichen es, Anwendungen und ihre Abhängigkeiten in einem Paket zu bündeln, das auf jeder Plattform läuft, die Container unterstützt (z.B. Docker, Kubernetes). Dies erleichtert die Migration zwischen verschiedenen Umgebungen und Cloud-Anbietern.
4. Einfache Bereitstellung: Container können schnell und konsistent in verschiedenen Umgebungen (Entwicklung, Test, Produktion) bereitgestellt werden.
5. Ressourceneffizienz und Dichte
Geringerer Overhead: Container teilen sich den Kernel des Host-Betriebssystems, was zu weniger Overhead und effizienter Ressourcennutzung führt im Vergleich zu VMs, die jeweils ein eigenes Betriebssystem benötigen.
Höhere Dichte: Mehrere Container können auf derselben Hardware ausgeführt werden, was zu einer besseren Auslastung der Ressourcen führt.
6. Schnelligkeit und Skalierbarkeit
Schnellere Startzeiten: Container starten und stoppen wesentlich schneller als VMs, was eine schnellere Skalierung und Bereitstellung ermöglicht.
Automatische Skalierung: Tools wie Kubernetes bieten automatische Skalierungsfunktionen, die Container basierend auf der aktuellen Last hoch- oder runterskalieren.
7. Isolation und Sicherheit
Isolationslevel: Container bieten eine Isolation auf Anwendungsebene, was für viele Szenarien ausreichend ist. Für Anwendungen, die eine vollständige Betriebssystemisolation benötigen, sind VMs jedoch weiterhin von Vorteil.
Sicherheitsmodelle: Container-Sicherheitsmodelle entwickeln sich schnell weiter und bieten zunehmend robuste Sicherheitsmechanismen, obwohl sie traditionell als weniger sicher als VMs galten.
8. Management und Orchestrierung
Orchestrierungsplattformen: Mit Kubernetes und anderen Container-Verwaltungsplattformen können Container-Cluster gemanagt, skaliert und überwacht werden; dies gilt auch für die Verwaltung großer Containerflotten.
Automatisierung: Container-Orchestrierung ermöglicht eine hohe Automatisierung von Deployments, Rollbacks und Upgrades, was die Verwaltung vereinfacht.
B) Szenarien, in denen Virtualisierungstechnologien punkten können
1. Legacy-Anwendungen: Applikationen, die nicht einfach in Container migriert werden können und weiterhin ein vollständiges Betriebssystem benötigen.
2. Anwendungen mit spezifischen Sicherheitsanforderungen, die eine vollständige Betriebssystemisolation und eine entsprechend hohe Sicherheit erfordern.
3. Komplexe monolithische Anwendungen, die nicht einfach in kleinere Dienste aufgeteilt werden können und direkt von der Stabilität einer VM-Umgebung profitieren.
4. Betriebssystem-Abhängigkeiten: Szenarien, in denen Anwendungen spezifische Betriebssysteme und deren Features benötigen.
Fazit: Containerlösungen bieten Vorteile in Bezug auf Skalierbarkeit, Effizienz, Flexibilität und Automatisierung und sind besonders für moderne, cloud-native Anwendungen und Microservices-Architekturen konzipiert. Die klassische Virtualisierung bleibt weiterhin relevant für Legacy-Anwendungen, branchenspezifische Sicherheitsanforderungen sowie Szenarien, die eine vollständige Betriebssystemisolation erfordern können. Die Wahl zwischen Containern und VMs hängt somit von den spezifischen Anforderungen und Zielen Ihrer IT-Infrastruktur und Anwendungen ab.
C) Container sowohl parallel zu VMs als auch innerhalb von VMs betreiben- Überlegungen und Szenarien, in denen dies möglich und sinnvoll sein kann:
1. Container parallel zu VMs betreiben
Hybrid Workloads: unterschiedliche Workloads, bei denen einige in Containern und andere bevorzugt in VMs ablaufen sollen.
Migration und Modernisierung: Nach und nach sollen Anwendungen von VMs zu Containern migiriert werden; beide Technologien sollen für eine Übergangszeit dehalb parallel betrieben werden.
Optimierung der Ressourcennutzung: Bestimmte Anwendungen sind in Containern effizienter zu betreiben, während andere VMs erfordern, um die vorhandene Infrastruktur möglichst gut zu nutzen.
2. Container innerhalb von VMs betreiben
Sicherheitsanforderungen: Verbindet die Sicherheits- und Isolationsvorteile von VMs, bietet aber gleichzeitig die Flexibilität und Effizienz von Containern.
Hybrid-Cloud-Strategien: Container innerhalb von VMs ermöglichen es, Workloads einfacher zwischen On-Premises- und Cloud-Umgebungen zu verschieben.
Kompatibilität und Standardisierung: Anwendungen, die in Containern laufen, können innerhalb von VMs standardisiert und auf verschiedenen Infrastrukturen bereitgestellt werden.
Vorteile:
Isolierung: Container innerhalb von VMs bieten zusätzliche Sicherheit und Isolierung, da jede VM eine zusätzliche Sicherheitsebene darstellt.
Kompatibilität: Container können innerhalb von VMs auf verschiedenen Plattformen betrieben werden, wodurch eine einheitliche Entwicklungs- und Betriebsumgebung gewährleistet wird.
Resilienz und Hochverfügbarkeit: VMs bieten zusätzliche Funktionen wie Snapshots, Live-Migration und automatisches Failover, die die Resilienz von containerisierten Anwendungen erhöhen können.
3. Übersicht zu gängigen eingesetzten Technologien und Tools (kein Anspruch auf Vollständigkeit)
VMware vSphere Integrated Containers (VIC): Ermöglicht die Bereitstellung von Containern neben VMs auf einer VMware-Infrastruktur.
KubeVirt: Projekt, das die Ausführung von VMs in Kubernetes-Clustern ermöglicht, wodurch Container und VMs innerhalb derselben Orchestrierungsplattform betrieben werden kann.
Suse Rancher: Unterstützt die Verwaltung von Kubernetes-Clustern und kann sowohl Container als auch VMs orchestrieren.
OpenShift: Plattform für die Verwaltung von containerisierten Anwendungen; unterstützt auch die Integration von VMs.
4. Implementierungsbeispiele
On-Premises-Rechenzentrum: Betrieb von VMware vSphere mit VMs und Verwendung von VMware vSphere Integrated Containers (VIC) oder KubeVirt, um Container neben VMs zu betreiben. Dadurch kann eine einheitliche Infrastruktur benutzt werden.
Hybrid-Cloud-Umgebung: Einige Anwendungen laufen in einer On-Premises-VMware-Umgebung und andere Anwendungen in Containern auf einer Public Cloud wie Azure, AWS etc. Durch den Einsatz von Containern innerhalb von VMs lassen sich Anwendungen leicht zwischen On-Premises und der Cloud verschieben.
DevOps-Pipeline: Ihre Entwicklungsumgebung verwendet Container für die Konsistenz und Portabilität der Anwendungen. Diese Container werden in VMs betrieben, um die Entwicklungs- und Produktionsumgebung zu standardisieren und zusätzliche Sicherheit zu bieten.
Fazit: Der parallele Betrieb von Containern und VMs sowie das Ausführen von Containern innerhalb von VMs kann mehr Flexibilität, Sicherheit und Effizienz bedeuten und ist eine verbreitete Praxis in modernen IT-Infrastrukturen, da sich damit sich eine robuste und agilere IT-Infrastruktur schaffen lässt.
D) Welche Speicherumgebung kann für Container genutzt werden?
Grundsätzlich kann mit derselben Speicherarchitektur gearbeitet werden, die auch für VMs verwendet wird. Es gibt jedoch einige spezifische Anforderungen mit Best Practices, um eine möglichst optimale Leistung und Verwaltung zu gewährleisten:
1. Gemeinsame Nutzung der Speicherumgebung
Kosteneffizienz: Vorhandene Speicherinfrastruktur nutzen, ohne zusätzliche Investitionen in neue Lösungen tätigen zu müssen.
Einheitliches Management: Durch die Nutzung einer gemeinsamen Speicherarchitektur lassen sich Verwaltungs- und Management-Werkzeuge konsolidieren.
Konsistente Backup- und Wiederherstellungsstrategien: Dieselben Mechanismen für Backup, Replikation und Wiederherstellung.
Anforderungen und Best Practices: Storage Classes und Persistent Volumes (PVs) in Kubernetes als Container-Orchestrator, um die Speicheranforderungen von Containern zu verwalten.
Containerumgebungen erfordern dynamische und flexible Speicherlösungen, die automatisches Provisioning und De-Provisioning unterstützen.
Die Speicherinfrastruktur sollte in der Lage sein, die Skalierbarkeits- und Leistungsanforderungen aller wesentlichen Container-Workloads zu erfüllen.
2. Spezifische Container-Speicherlösungen
Native Kubernetes-Storage über CSI (Container Storage Interface)
Kubernetes-native Speicherlösungen wie OpenEBS, Rook und Longhorn aber auch Plattformen wie Portworx oder IOMesh bieten speziell für K8s entwickelte, cloud-native Speicherlösungen, die sich in Containerumgebungen integrieren lassen.
CSI als Standard ermöglicht die Integration verschiedener Speicheranbieter mit Kubernetes, da viele traditionelle Speicheranbieter CSI-Treiber entwickelt haben.
Bildquelle: Rook, Open-Source Cloud-Native Storage for Kubernetes
Anmerkung zur Abbildung: Rook orchestriert die Ceph-Speicherlösung mit einem speziellen Kubernetes-Operator zur Automatisierung der Verwaltung. Rook stellt sicher, dass Ceph auf Kubernetes effizient läuft und vereinfacht die Bereitstellung und Verwaltung (Quelle: rook.io).
Nutzung gängiger Speicherlösungen (Sofware)
Falls VMware vSAN als (SDS) Speicherlösung verwendet wird, kann dieser Speicher auch für Kubernetes-Cluster unter vSphere laufen wie z.B. mit VMware Tanzu Kubernetes Grid.
Netzwerkdateisysteme (NFS) und iSCSI (block) sind als Speicherprotokolle für Container geeignet und Kubernetes unterstützt diese Protokolle nativ.
Ceph: Verteiltes open-source software-definiertes Speichersystem, das Block-, Datei- als auch Objektspeicher unterstützt und sich für containerisierte Umgebungen eignet.
3. Praxisbeispiele
VMware vSphere mit Kubernetes: VMware bietet eine Integration von Kubernetes in vSphere (vSphere with Tanzu). VMware vSAN kann für persistente Volumes in Kubernetes genutzt werden und sowohl Container als auch VMs auf derselben Speicherarchitektur unterstützen.
VMware Cloud Foundation (VCF): Eine integrierte Lösung, die vSphere, vSAN und NSX kombiniert und die Verwaltung von Containern und VMs in einer gemeinsamen Umgebung vereinfachen kann.
Hybrid-Umgebung aus On-Premise und Cloud-Speicher: Kombination aus On-Premises-Speicherlösungen wie z.B. NetApp ONTAP / Pure Storage u.a. mit Cloud-Speicherlösungen wie AWS EBS oder Azure Disk Storage, die über CSI-Treiber in Kubernetes integriert sind. Die Kombination ermöglicht eine flexiblere Speicherverwaltung für Container-Workloads.
Fazit: Container benötigen per se keine eigene, separate Speicherarchitektur und können bestehende Speicherinfrastrukturen nutzen, die für VMs verwendet werden. Es ist jedoch wichtig sicherzustellen, dass die Speicherlösung flexibel, dynamisch skalierbar und performant ist (IOPS, X-Rate, Latenzen), um den spezifischen Anforderungen von Container-Workloads gerecht zu werden. Durch die Verwendung von CSI und der Integration mit bestehenden Systemen läßt sich eine einheitliche Umgebung für beide Technologien schaffen.
Querverweis:
Unser Blogpost > Entwicklungen im Bereich der unternehmensweiten Speicherverwaltung, Blogpost Teil 2
Unser Beitrag > IT-Container-Strategien: Neuer Red Hat State of Kubernetes Security Report 2024 verfügbar
Unser Beitrag > Synergien zwischen künstlicher Intelligenz und Datenmanagement
Unser Beitrag > Kubermatic KubeLB Lösung zur Bereitstellung von Anwendungen in Cloud-nativen Umgebungen