Was bedeutet es Cloud-native zu zein?
Die Definition von „Cloud-native“ ist mittlerweile allgegenwärtig und der Begriff wird in einer Vielzahl von Bereichen verwendet, in denen Unternehmen große digitale Transformationsprojekte durchführen, um eine größere geschäftliche Flexibilität, Skalierbarkeit und Effizienz zu erreichen.
Aber was bedeutet er wirklich? Kurz gesagt bedeutet „Cloud-native“ ein neues Niveau der Softwareabstraktion, gekoppelt mit einer Reihe von speziellen Technologien, Applikationen und Prozessen, die die Art und Weise, wie skalierbare Anwendungen entwickelt, bereitgestellt und verwaltet werden können, verändern.
Zu den Hauptmerkmalen von Cloud-nativen Anwendungen gehören:
- Code wird in Container verpackt
- Architektur als Sammlung von Microservices
- Agile und integrierte Zusammenarbeit von Entwicklung und IT Operations (DevOps)
- Bereitstellung von Anwendungen und Verwaltung über eine elastische Cloud-Infrastruktur
- Automatisierte und richtliniengesteuerte Zuweisung von Infrastrukturressourcen
Vorteile von „Cloud-native“ für Unternehmen
Unternehmen, die sich auf die Cloud-native Reise begeben, übernehmen Container und Kubernetes zusammen mit einer Vielzahl von Open Source- und kommerziellen Technologien und Applikationen aus einem ausgedehnten Cloud-native Ökosystem.
Mit Containern und Cloud-native Technologien können Unternehmen die Anwendungsentwicklung beschleunigen, Anwendungen unterbrechungsfrei aktualisieren (kontinuierliche Integration), sie automatisch skalieren und problemlos auf verschiedene Umgebungen portieren. Diese Möglichkeiten führen letztendlich zu mehr geschäftlicher Agilität und Wettbewerbsvorteilen.
Container lösen einige kritische Probleme für Unternehmen. Überall lauffähige, robuste Softwarepakete für Entwickler, Service-Upgrades, automatische Skalierung, Verfügbarkeit und Ressourceneffizienz in einem anbieterneutralen Paket. Kubernetes bietet eine Infrastrukturschicht, die die IT-Abteilung im Gegensatz zu der in Unternehmen üblichen manuellen Verwaltung auf programmatische, wiederholbare Weise betreiben kann.
Da Kubernetes sowohl lokal vor Ort als auch in der Public Cloud eingesetzt werden kann, bietet es ein einheitliches Betriebsmodell für alle Umgebungen. Das macht Kubernetes zu einer idealen Plattform für Unternehmen, die in beiden Umgebungen operieren.
Cloud-native Architektur
Eine Cloud-native Architektur nutzt Container und Kubernetes, um Applikationen in Form kleinerer, kompatibler Einheiten zu erstellen, die sich effizient skalieren, ohne Unterbrechung aktualisieren und nahtlos in andere Umgebungen migrieren lassen. Diese Technologie ist kosteneffizient, bietet mehr Sicherheit und eine flexible Automatisierung.
Der lokale Kubernetes-Stack
Wir werden die verschiedenen Schichten des Kubernetes-Stacks on-Prem erkunden, von der Infrastruktur, auf der Kubernetes läuft, bis hin zu den Diensten, die über Kubernetes laufen und die Entwickler zur Beschleunigung der Anwendungsbereitstellung nutzen können. Beachten Sie, dass einige Komponenten in mehreren Teilen des Stacks enthalten sein können. Eine Kubernetes-Distribution kann zum Beispiel eine Container-Registry wie Harbor oder Quay umfassen. Alternativ kann eine Container-Registry auch als gehosteter oder verwalteter Dienst für die Nutzung mit jeder beliebigen Distribution angeboten werden.
Computing-Plattform
Kubernetes ist sehr flexibel in Bezug darauf, wo es eingesetzt werden kann, und Innovationen erweitern die Möglichkeiten, wie und wo Kubernetes betrieben werden kann. In der Regel benötigt Kubernetes mindestens 3 Nodes mit voller Netzwerkkonnektivität zwischen ihnen und einem angeschlossenen Speicher. Heute wird Kubernetes meist auf einer virtuellen Infrastruktur wie VMware ausgeführt. Bare Metal und HCI sind zwei weitere gängige Optionen.
Zusätzliche Funktionen können die Provisionierung und den Betrieb eines Kubernetes-Clusters erheblich erleichtern. Eine über eine API (z. B. Cluster API, Terraform usw.) gesteuerte Infrastruktur erleichtert die Provisionierung und Anbindung neuer Nodes. Benutzerdefinierte Hypervisoren können Workload-Isolierung anbieten, um Sicherheitslücken in Containern zu schließen. Ein Load Balancer außerhalb des Kubernetes-Clusters ist nützlich, um Workloads verfügbar zu machen und sie dynamisch zu verlagern und zu skalieren. Einige Workloads können von spezieller Hardware wie GPUs oder TPUs profitieren. Und wenn viele Cluster an mehreren Standorten betrieben werden sollen (z.B. in Einzelhandelsgeschäften), wäre eine verteilte Verwaltungsfunktion für die zugrunde liegende Infrastruktur nützlich.
Kubernetes-Distributionen
Mit dem explosionsartigen Wachstum von Kubernetes seit seiner Veröffentlichung im Jahr 2015 gibt es über 100 Kubernetes-Distributionen und gehostete Plattformen von Tech-Giganten und Startups gleichermaßen. Diese Unternehmen nehmen den Kerncode von Kubernetes und kombinieren ihn mit anderen Projekten wie einem Netzwerk-Stack, Tools für die Clusterverwaltung, Protokollierung, Überwachung usw., um eine Distribution zu erstellen.
Container-Dienste
Eine nützliche Kubernetes-Umgebung erfordert neben Kubernetes selbst zusätzliche Infrastrukturdienste. Diese werden manchmal mit den Distributionen gebündelt oder als separate Dienste hinzugefügt und beinhalten einige Basics wie eine Container-Registry, Ingress, Load Balancer, Secret Stores oder Zertifikatsmanager, um nur einige zu nennen.
Da immer mehr Unternehmen Anwendungen auf Kubernetes aufbauen und bereitstellen, gibt es viele Kerndienste, auf die sie angewiesen sind und die typischerweise auch in Kubernetes laufen. Beispiele sind Datenbanken (z. B. Redis, Postgres), Pub Sub (Kafka), Indexing (ElasticSearch), CI/CD-Dienste (Gitlab, Jenkins) und Storage (Portworx, MayaData, Minio, Red Hat).
Viele Unternehmen haben Angebote entwickelt, die diese Anwendungen, die auf der Kubernetes-Distribution der Wahl des Kunden laufen, verwalten oder unterstützen können. Am bekanntesten ist wohl Microsofts Azure Arc Data Services, das Postgres und MS SQL als verwaltete Dienste in Kundenumgebungen anbietet, aber es gibt noch viele andere, darunter Confluent für Kafka, Crunchy Data für Postgres, Redis Enterprise für Redis, Percona, Elasticsearch, Minio, Mayadata usw.
Container
Container sind die atomare Einheit der Cloud-nativen Software. Ein Container besteht aus einem Stück Code, das mit all seinen Abhängigkeiten (Binärdateien, Bibliotheken usw.) verpackt ist und als isolierter Prozess ausgeführt wird. Dies führt zu einem neuen Niveau der Abstraktion. Ähnlich wie die virtuelle Maschine (VM) Rechenressourcen von der zugrunde liegenden Hardware abstrahiert, abstrahiert ein Container eine Anwendung vom zugrunde liegenden Betriebssystem (OS).
Container unterscheiden sich in mehreren wichtigen Aspekten von VMs. Sie haben einen deutlich geringeren Ressourcenbedarf, können schneller hochgefahren werden und lassen sich viel einfacher auf andere Cloud-Umgebungen portieren. Im Gegensatz zu VMs sind sie von Natur aus temporär.
Container ebnen den Weg für eine Microservices-Softwarearchitektur. Während herkömmliche Anwendungen monolithisch sind, werden auf Microservices basierende Anwendungen als Sammlungen kleinerer, zusammensetzbarer Einheiten (Services) erstellt, die unabhängig voneinander skaliert werden können und unterbrechungsfreie Upgrades ermöglichen. Ein Service umfasst einen oder mehrere Container, die eine gemeinsame Funktion erfüllen.
Containerisierte/auf Microservices aufbauende Anwendungen ermöglichen schlankere, beschleunigte Softwareentwicklungsverfahren, die eine engere Integration und Koordination zwischen Entwicklern und IT Operations erfordern, was als DevOps bezeichnet wird.
Abbildung 1: Ein Vergleich von VMs und Containern
Kubernetes
Da sich containerisierte Anwendungen für verteilte Umgebungen eignen und Rechen-, Speicher- und Netzwerkressourcen anders nutzen als herkömmliche Anwendungen, benötigen sie eine Infrastrukturschicht, die für die Orchestrierung von containerisierten Workloads zuständig ist.
Kubernetes hat sich als dominierender Container-Orchestrator durchgesetzt und wird oft als das „Betriebssystem der Cloud“ bezeichnet. Es ist eine portable, erweiterbare Open Source-Plattform für die Verwaltung von containerisierten Workloads und Services, die sowohl eine deklarative Konfiguration als auch eine Automatisierung ermöglicht.
Konkret bietet Kubernetes folgendes:
weist Containern Maschinen zu (Scheduling)
bootet die angegebenen Container über die Container-Runtime
befasst sich mit Upgrades, Rollbacks und der sich ständig ändernden Natur des Systems
reagiert auf Ausfälle (Containerabstürze usw.)
erstellt Cluster-Ressourcen wie Service Discovery, Inter-VM-Netzwerke, Cluster-Ingress/Egress usw.
Kubernetes ist auf Skalierung, Verfügbarkeit, Sicherheit und Portabilität ausgelegt. Es optimiert die Kosten der Infrastruktur, indem es die Workloads auf die verfügbaren Ressourcen verteilt. Jede Komponente eines Kubernetes-Clusters kann auch für Hochverfügbarkeit konfiguriert werden.
Die Funktionalität von Kubernetes entwickelt sich dank der kontinuierlichen Beiträge seiner aktiven globalen Community schnell weiter, und es gibt inzwischen eine Vielzahl von Kubernetes-Distributionen, die den Benutzern zur Verfügung stehen. Während Benutzer am meisten von CNCF-zertifizierten Distributionen profitieren (Konformität ermöglicht Interoperabilität), sind intelligente Automatisierungsfunktionen rund um das Kubernetes Lifecycle Management in Verbindung mit einer einfachen Integration von Speicher-, Netzwerk-, Sicherheits- und Überwachungsfunktionen entscheidend für produktionsfähige Cloud-native Umgebungen.
Herausforderungen bei der Umstellung auf „Cloud-native“
Cloud-native Technologien sind die neue Währung für geschäftliche Agilität und Innovation, aber ihre Konfiguration, Bereitstellung und Verwaltung stellt für jede Art von Unternehmen eine Herausforderung dar. Zunächst einmal ist Kubernetes und sein Ökosystem aus Cloud-nativen Technologien sehr umfangreich und entwickelt sich schnell weiter. Außerdem ist eine herkömmliche Infrastruktur nicht auf die Art und Weise ausgelegt, wie Kubernetes und Container IT-Ressourcen nutzen. Dies ist ein erhebliches Hindernis für Softwareentwickler, die häufig Ressourcen auf Abruf sowie einfach zu nutzende Services für ihre Cloud-nativen Anwendungen benötigen. Schließlich setzt jedes Unternehmen eine Kombination aus On Prem- und Public Cloud-basierten Kubernetes-Umgebungen ein. Um von der Multi-Cloud-Flexibilität zu profitieren, müssen Sie jedoch in der Lage sein, alle Bereitstellungen effektiv zu verwalten und zu überwachen.
Cloud-native Best Practices
Der Aufbau eines unternehmensweiten Kubernetes-Stacks im Rechenzentrum ist ein großes Unterfangen für IT-Operations-Teams. Es ist unerlässlich, Kubernetes und containerisierte Anwendungen auf einer Infrastruktur auszuführen, die belastbar ist und reaktionsschnell skaliert werden kann, um ein dynamisches, verteiltes System zu unterstützen.
Die hyperkonvergente Infrastruktur (HCI) von Nutanix ist die ideale Infrastrukturgrundlage für Cloud-native Workloads, die auf Kubernetes in großem Umfang ausgeführt werden. Nutanix bietet eine bessere Belastbarkeit sowohl für Kubernetes-Plattformkomponenten als auch für Anwendungsdaten und eine bessere Skalierbarkeit als eine Bare Metal-Infrastruktur. Nutanix vereinfacht außerdem die Verwaltung des Lebenszyklus der Infrastruktur und die persistente Speicherung von statusbehafteten Containern und beseitigt damit einige der schwierigsten Herausforderungen, denen sich Unternehmen bei der Bereitstellung und Verwaltung einer Cloud-nativen Infrastruktur gegenübersehen.