Was ist Kubernetes? Ihre nächste Anwendungsplattform

Kubernetes ist eine beliebte Open-Source-Plattform für die Container-Orchestrierung , dh für die Verwaltung von Anwendungen, die aus mehreren, weitgehend eigenständigen Laufzeiten bestehen, die als Container bezeichnet werden. Container sind seit dem Start des Docker-Containerisierungsprojekts im Jahr 2013 immer beliebter geworden, aber große, verteilte Containeranwendungen können zunehmend schwieriger zu koordinieren sein. Durch die drastisch einfachere Verwaltung von Anwendungen in Containern ist Kubernetes zu einem wichtigen Bestandteil der Containerrevolution geworden.

Was ist Container-Orchestrierung?

Container unterstützen die VM-ähnliche Trennung von Bedenken, jedoch mit weitaus weniger Overhead und weitaus größerer Flexibilität. Infolgedessen haben Container die Art und Weise, wie Menschen über die Entwicklung, Bereitstellung und Wartung von Software nachdenken, verändert. In einer containerisierten Architektur werden die verschiedenen Dienste, aus denen eine Anwendung besteht, in separate Container gepackt und in einem Cluster physischer oder virtueller Maschinen bereitgestellt. Dies führt jedoch zur Notwendigkeit einer Container-Orchestrierung - einem Tool, das die Bereitstellung, Verwaltung, Skalierung, Vernetzung und Verfügbarkeit von containergestützten Anwendungen automatisiert.

Was ist Kubernetes?

Kubernetes ist ein Open-Source-Projekt, das zu einem der beliebtesten Tools für die Container-Orchestrierung geworden ist. Sie können damit Multi-Container-Anwendungen in großem Maßstab bereitstellen und verwalten. Während Kubernetes in der Praxis am häufigsten mit Docker, der beliebtesten Containerisierungsplattform, verwendet wird, kann es auch mit jedem Containersystem verwendet werden, das den OCI-Standards (Open Container Initiative) für Container-Image-Formate und -Laufzeiten entspricht. Und da Kubernetes Open Source ist und nur relativ wenige Einschränkungen hinsichtlich seiner Verwendung bestehen, kann es von jedem frei verwendet werden, der Container ausführen möchte, meistens überall dort, wo er sie ausführen möchte - lokal, in der öffentlichen Cloud oder in beiden .

Google und Kubernetes

Kubernetes begann sein Leben als Projekt bei Google. Es ist ein Nachfolger von Google Borg, einem früheren Container-Management-Tool, das Google intern verwendet hat. Google Open-Source-Kubernetes im Jahr 2014, auch weil die von Kubernetes unterstützten verteilten Microservices-Architekturen das Ausführen von Anwendungen in der Cloud vereinfachen. Google sieht in der Einführung von Containern, Microservices und Kubernetes potenzielle Kunden für seine Cloud-Dienste (obwohl Kubernetes sicherlich auch mit Azure und AWS funktioniert). Kubernetes wird derzeit von der Cloud Native Computing Foundation verwaltet, die selbst unter dem Dach der Linux Foundation steht.

Kubernetes vs. Docker und Kubernetes vs. Docker Swarm

Kubernetes ersetzt Docker nicht, sondern erweitert es. Kubernetes ersetzt jedoch einige der übergeordneten Technologien, die rund um Docker entwickelt wurden.

Eine solche Technologie ist Docker Swarm, ein mit Docker gebündelter Orchestrator. Es ist weiterhin möglich, Docker Swarm anstelle von Kubernetes zu verwenden, aber Docker Inc. hat beschlossen, Kubernetes künftig in die Editionen Docker Community und Docker Enterprise aufzunehmen.

Nicht, dass Kubernetes ein Ersatz für Docker Swarm ist. Kubernetes ist wesentlich komplexer als Swarm und erfordert mehr Arbeit für die Bereitstellung. Aber auch hier soll sich die Arbeit langfristig auszahlen - eine überschaubare, ausfallsichere Anwendungsinfrastruktur. Für Entwicklungsarbeiten und kleinere Containercluster bietet Docker Swarm eine einfachere Wahl. 

Kubernetes gegen Mesos

Ein weiteres Projekt, von dem Sie als Konkurrent von Kubernetes vielleicht gehört haben, ist Mesos. Mesos ist ein Apache-Projekt, das ursprünglich von Entwicklern bei Twitter entwickelt wurde. Es wurde tatsächlich als Antwort auf das Google Borg-Projekt gesehen.

Mesos bietet zwar Container-Orchestrierungsdienste an, aber seine Ambitionen gehen weit darüber hinaus: Es soll eine Art Cloud-Betriebssystem sein, das sowohl containerisierte als auch nicht containerisierte Komponenten koordinieren kann. Zu diesem Zweck können in Mesos viele verschiedene Plattformen ausgeführt werden - einschließlich Kubernetes selbst.

Kubernetes-Architektur: Wie Kubernetes funktioniert

Die Architektur von Kubernetes verwendet verschiedene Konzepte und Abstraktionen. Einige davon sind Variationen bestehender, bekannter Begriffe, andere sind spezifisch für Kubernetes.

Kubernetes-Cluster

Die Kubernetes-Abstraktion auf höchster Ebene, der Cluster , bezieht sich auf die Gruppe von Computern, auf denen Kubernetes (selbst eine Clusteranwendung ) ausgeführt wird, und die von ihm verwalteten Container. Ein Kubernetes-Cluster muss einen Master haben , das System, das alle anderen Kubernetes-Computer im Cluster befiehlt und steuert. Ein hochverfügbarer Kubernetes-Cluster repliziert die Einrichtungen des Masters auf mehreren Computern. Es wird jedoch immer nur ein Master gleichzeitig den Job Scheduler und den Controller-Manager ausführen.

Kubernetes Knoten und Pods

Jeder Cluster enthält Kubernetes- Knoten . Knoten können physische Maschinen oder VMs sein. Auch hier geht es um Abstraktion: Unabhängig davon, auf welcher App die App ausgeführt wird, übernimmt Kubernetes die Bereitstellung auf diesem Substrat. Mit Kubernetes kann sogar sichergestellt werden, dass bestimmte Container nur auf VMs oder nur auf Bare-Metal ausgeführt werden.

Auf Knoten werden Pods ausgeführt , die grundlegendsten Kubernetes-Objekte, die erstellt oder verwaltet werden können. Jeder Pod repräsentiert eine einzelne Instanz einer Anwendung oder eines laufenden Prozesses in Kubernetes und besteht aus einem oder mehreren Containern. Kubernetes startet, stoppt und repliziert alle Container in einem Pod als Gruppe. Pods lenken die Aufmerksamkeit des Benutzers auf die Anwendung und nicht auf die Container selbst. Details darüber, wie Kubernetes vom Status der Pods an konfiguriert werden muss, werden in Etcd , einem verteilten Schlüsselwertspeicher, gespeichert.

Pods werden nach Bedarf auf Knoten erstellt und zerstört, um dem vom Benutzer in der Pod-Definition angegebenen gewünschten Status zu entsprechen. Kubernetes bietet eine Abstraktion, die als Controller bezeichnet wird und sich mit der Logistik befasst, wie Pods hoch-, ausgerollt und heruntergefahren werden. Controller gibt es je nach Art der verwalteten Anwendung in verschiedenen Varianten. Beispielsweise wird der kürzlich eingeführte "StatefulSet" -Controller verwendet, um Anwendungen zu verarbeiten, die einen dauerhaften Status benötigen. Eine andere Art von Controller, die Bereitstellung , wird verwendet, um eine App zu vergrößern oder zu verkleinern, eine App auf eine neue Version zu aktualisieren oder eine App auf eine bekanntermaßen funktionsfähige Version zurückzusetzen, wenn ein Problem auftritt.

Kubernetes-Dienste

Da Pods nach Bedarf leben und sterben, benötigen wir eine andere Abstraktion für den Umgang mit dem Anwendungslebenszyklus. Eine Anwendung soll eine persistente Entität sein, selbst wenn die Pods, in denen die Container ausgeführt werden, aus denen die Anwendung besteht, selbst nicht persistent sind. Zu diesem Zweck bietet Kubernetes eine Abstraktion an, die als Service bezeichnet wird.

Ein Dienst in Kubernetes beschreibt, wie auf eine bestimmte Gruppe von Pods (oder anderen Kubernetes-Objekten) über das Netzwerk zugegriffen werden kann. Wie in der Kubernetes-Dokumentation angegeben, können sich die Pods, die das Back-End einer Anwendung bilden, ändern, aber das Front-End sollte dies nicht wissen oder nachverfolgen müssen. Dienstleistungen machen dies möglich.

Ein paar weitere Teile von Kubernetes runden das Bild ab. Der Scheduler verteilt Workloads auf Knoten, sodass sie über Ressourcen verteilt sind und Bereitstellungen den Anforderungen der Anwendungsdefinitionen entsprechen. Der Controller-Manager stellt sicher, dass der Status des Systems - Anwendungen, Workloads usw. - mit dem gewünschten Status übereinstimmt, der in den Konfigurationseinstellungen von Etcd definiert ist.

Es ist wichtig zu beachten, dass keiner der von Containern verwendeten Low-Level-Mechanismen wie Docker selbst durch Kubernetes ersetzt wird. Kubernetes bietet vielmehr eine größere Anzahl von Abstraktionen für die Verwendung dieser Mechanismen, um die Skalierbarkeit von Apps zu gewährleisten.

Kubernetes Ingress

Kubernetes-Dienste werden als innerhalb eines Clusters ausgeführt angesehen. Sie möchten jedoch von außen auf diese Dienste zugreifen können. Kubernetes verfügt über mehrere Komponenten, die dies mit unterschiedlichem Grad an Einfachheit und Robustheit ermöglichen, einschließlich NodePort und LoadBalancer. Die Komponente mit der größten Flexibilität ist jedoch Ingress. Ingress ist eine API, die den externen Zugriff auf die Dienste eines Clusters verwaltet, normalerweise über HTTP.

Für die ordnungsgemäße Einrichtung von Ingress ist ein wenig Konfiguration erforderlich. Matthew Palmer, der ein Buch über die Entwicklung von Kubernetes geschrieben hat, führt Sie auf seiner Website durch den Prozess.

Kubernetes Dashboard

Eine Kubernetes-Komponente, mit der Sie den Überblick über all diese anderen Komponenten behalten, ist Dashboard, eine webbasierte Benutzeroberfläche, mit der Sie Apps bereitstellen und Fehler beheben sowie Clusterressourcen verwalten können. Das Dashboard ist nicht standardmäßig installiert, aber das Hinzufügen ist kein allzu großer Aufwand.

In Verbindung stehendes Video: Was ist Kubernetes?

In diesem 90-Sekunden-Video erfahren Sie mehr über Kubernetes, das Open-Source-System zur Automatisierung von Containeranwendungen, von einem der Erfinder der Technologie, Joe Beda, Gründer und CTO bei Heptio.

Kubernetes Vorteile

Da Kubernetes neue Abstraktionen und Konzepte einführt und die Lernkurve für Kubernetes hoch ist, ist es nur normal zu fragen, wie sich die Verwendung von Kubernetes langfristig auszahlt. Im Folgenden finden Sie eine Übersicht über einige der spezifischen Möglichkeiten, wie Apps in Kubernetes ausgeführt werden können.

Kubernetes verwaltet den App-Zustand, die Replikation, den Lastausgleich und die Zuweisung von Hardwareressourcen für Sie

Eine der grundlegendsten Aufgaben, die Kubernetes Ihnen abnimmt, ist die Arbeit, eine Anwendung am Laufen zu halten und auf Benutzeranforderungen zu reagieren. Apps, die „ungesund“ werden oder nicht der von Ihnen beschriebenen Gesundheitsdefinition entsprechen, können automatisch geheilt werden.

Ein weiterer Vorteil von Kubernetes ist die Maximierung der Nutzung von Hardwareressourcen, einschließlich Speicher, Speicher-E / A und Netzwerkbandbreite. Für Anwendungen können weiche und harte Grenzen für die Ressourcennutzung festgelegt werden. Viele Apps, die nur minimale Ressourcen verbrauchen, können auf derselben Hardware zusammengepackt werden. Apps, die sich ausdehnen müssen, können auf Systemen platziert werden, auf denen sie Platz zum Wachsen haben. Das Rollout von Updates in einem Cluster oder das Rollback bei Unterbrechungen von Updates kann automatisiert werden.

Kubernetes vereinfacht die Bereitstellung vorkonfigurierter Anwendungen mit Helm-Diagrammen

Paketmanager wie Debian Linux's APT und Python's Pip ersparen Benutzern die Mühe, eine Anwendung manuell zu installieren und zu konfigurieren. Dies ist besonders praktisch, wenn eine Anwendung mehrere externe Abhängigkeiten aufweist.

Helm ist im Wesentlichen ein Paketmanager für Kubernetes. Viele gängige Softwareanwendungen müssen in Kubernetes als Gruppe voneinander abhängiger Container ausgeführt werden. Helm bietet einen Definitionsmechanismus, ein „Diagramm“, das beschreibt, wie eine Anwendung oder ein Dienst als Gruppe von Containern in Kubernetes ausgeführt werden kann.

Sie können Ihre eigenen Helm-Diagramme von Grund auf neu erstellen. Dies ist möglicherweise erforderlich, wenn Sie eine benutzerdefinierte App erstellen, die intern bereitgestellt werden soll. Wenn Sie jedoch eine beliebte Anwendung mit einem gemeinsamen Bereitstellungsmuster verwenden, besteht eine gute Chance, dass bereits jemand ein Helmdiagramm dafür erstellt und im offiziellen Helmdiagramm-Repository veröffentlicht hat. Ein weiterer Ort, an dem Sie nach offiziellen Helm-Charts suchen können, ist das Verzeichnis Kubeapps.com.

Kubernetes vereinfacht die Verwaltung von Speicher, Geheimnissen und anderen anwendungsbezogenen Ressourcen

Container sollen unveränderlich sein; Was auch immer Sie in sie stecken, soll sich nicht ändern. Anwendungen benötigen jedoch einen Status, dh sie benötigen eine zuverlässige Methode für den Umgang mit externen Speichervolumes. Dies wird umso komplizierter, als Container während der gesamten Lebensdauer einer App leben, sterben und wiedergeboren werden.

Kubernetes bietet Abstraktionen, mit denen Container und Apps den Speicher auf dieselbe entkoppelte Weise wie andere Ressourcen verarbeiten können. Auf viele gängige Arten von Speicher, von Amazon EBS-Volumes bis hin zu einfachen alten NFS-Freigaben, kann über Kubernetes-Speichertreiber, sogenannte Volumes, zugegriffen werden. Normalerweise sind Volumes an einen bestimmten Pod gebunden, aber ein Volume-Subtyp namens "Persistent Volume" kann für Daten verwendet werden, die unabhängig von einem Pod weiterleben müssen.

Container müssen häufig mit „Geheimnissen“ arbeiten - Anmeldeinformationen wie API-Schlüsseln oder Dienstkennwörtern, die nicht fest in einen Container codiert oder offen auf einem Datenträger gespeichert werden sollen. Während hierfür Lösungen von Drittanbietern wie Docker-Geheimnisse und HashiCorp Vault verfügbar sind, verfügt Kubernetes über einen eigenen Mechanismus für den nativen Umgang mit Geheimnissen, der jedoch sorgfältig konfiguriert werden muss. Beispielsweise muss Etcd so konfiguriert sein, dass beim Senden von Geheimnissen zwischen Knoten SSL / TLS verwendet wird, anstatt im Klartext. 

Kubernetes-Anwendungen können in Hybrid- und Multi-Cloud-Umgebungen ausgeführt werden

Einer der langjährigen Träume von Cloud Computing ist es, jede App in jeder Cloud oder in einer Mischung aus öffentlichen oder privaten Clouds ausführen zu können. Dies dient nicht nur dazu, eine Lieferantenbindung zu vermeiden, sondern auch die für einzelne Clouds spezifischen Funktionen zu nutzen.

Kubernetes bietet eine Reihe von Grundelementen, die zusammen als Verbund bezeichnet werden, um mehrere Cluster über mehrere Regionen und Wolken hinweg miteinander synchron zu halten. Beispielsweise kann eine bestimmte App-Bereitstellung zwischen mehreren Clustern konsistent gehalten werden, und verschiedene Cluster können die Serviceerkennung gemeinsam nutzen, sodass von jedem Cluster aus auf eine Back-End-Ressource zugegriffen werden kann. Mit Federation können auch hochverfügbare oder fehlertolerante Kubernetes-Bereitstellungen erstellt werden, unabhängig davon, ob Sie mehrere Cloud-Umgebungen umfassen oder nicht.

Die Föderation ist für Kubernetes noch relativ neu. Es werden noch nicht alle API-Ressourcen in Verbundinstanzen unterstützt, und Upgrades verfügen noch nicht über eine automatische Testinfrastruktur. Diese Mängel sollen jedoch in zukünftigen Versionen von Kubernetes behoben werden.

Wo man Kubernetes bekommt