Die Containerisierung ist trotz ihrer vielen Vorteile ein anspruchsvolles Softwareentwicklungsmodell. Es kann leicht kompliziert werden, insbesondere wenn die Container in großem Umfang eingesetzt werden. Kubernetes ist ein System zur Automatisierung der Bereitstellung, Skalierung und Verwaltung von containerisierten Anwendungen. Es trägt dazu bei, die Probleme des Containermanagements zu verringern, aber seine Hilfe ist nur so wirksam wie der Zustand seiner Komponenten. Ein Kubernetes-Cluster ist eine solche Komponente, die für das reibungslose Funktionieren des Kubernetes-Systems entscheidend ist. In diesem Artikel wird erklärt, was ein Kubernetes-Cluster ist und wie er funktioniert, und es werden seine Anwendungsfälle und technischen Vorteile untersucht.
Kubernetes-Cluster verstehen
Ein Kubernetes-Cluster besteht aus einer Reihe von Rechnern, den so genannten Knoten, auf denen containerisierte Anwendungen ausgeführt werden, die von Kubernetes bereitgestellt und orchestriert werden. Ein Cluster besteht aus mindestens einem Master-Knoten und mehreren Worker-Knoten, die zusammenarbeiten, um containerisierte Anwendungen auszuführen und zu skalieren. Normalerweise gibt es mehrere Master-Knoten, um eine hohe Verfügbarkeit und Fehlertoleranz zu gewährleisten.
Wenn Sie Ihre Anwendung in einem Kubernetes-Cluster bereitstellen, geben Sie eine Reihe von Anweisungen vor, wie die Anwendung ausgeführt werden soll, wie viele Instanzen ausgeführt werden sollen, auf welchen Knoten sie ausgeführt werden sollen, welche Ressourcen sie verwenden sollen und wie sie auf verschiedene Probleme reagieren sollen. Diese Anweisungen werden dem Kubernetes-System über eine deklarative API gegeben, d. h. Sie „erklären“, was passieren soll, und Kubernetes sorgt dafür, dass dies geschieht. Der Master-Knoten im Cluster verwendet diese Anweisungen, um Container auf den entsprechenden Worker-Knoten zu planen und auszuführen. Außerdem wird der Status des Clusters ständig überwacht, um sicherzustellen, dass er den von Ihnen angegebenen Anweisungen entspricht. Wenn ein Knoten oder eine Anwendung ausfällt, kümmert sich Kubernetes automatisch um die Neuplanung und Neuverteilung auf der Grundlage des von Ihnen angegebenen Status und bietet somit Selbstheilungsfunktionen. Diese Merkmale sowie die Fehlertoleranz sorgen für eine hervorragende Zuverlässigkeit und Betriebszeit, was wiederum zu einer positiven Erfahrung für den Endbenutzer führt.
Um zu verstehen, wie ein Kubernetes-Cluster aufgebaut ist und wie er bereitgestellte Container entwickelt und orchestriert, sollten wir uns die Kubernetes-Architektur im Allgemeinen ansehen.
Die Architektur des Kubernetes-Clusters
Die Architektur eines Kubernetes-Clusters besteht aus einem Netzwerk von miteinander verbundenen Komponenten. die miteinander verknüpfte Funktionen erfüllen und dazu beitragen, dass der Cluster wie erwartet funktioniert. Für jede Komponente gibt es vorgegebene Ressourcen, Grenzen und Werte. Wenn Workloads nicht unter Berücksichtigung dieser Grenzen und Werte zugewiesen werden, summieren sich die Werte und behindern das reibungslose Funktionieren des Kubernetes-Ökosystems. Einige Komponenten übernehmen primäre Aufgaben und bewältigen erhebliche Workloads, während andere als Zusatzkomponenten zur Verbesserung der Funktionalität und Effizienz dienen.
Die folgende Abbildung fasst die Beziehung zwischen den Kernkomponenten der Kubernetes-Cluster-Architektur zusammen.
Schauen wir uns nun die Komponenten und Unterkomponenten der oben dargestellten Kubernetes-Cluster-Architektur genauer an.
Master-Knoten/Steuerebene
Der Master-Knoten, auch Steuerebene genannt, ist das zentrale System, das die Gesamtverantwortung für den Kubernetes-Cluster trägt. Er verwaltet und pflegt die Kommunikation zwischen den Worker-Knoten im Kubernetes-System. Der Master-Knoten plant die Workloads und verwaltet den Lebenszyklus von Pods und anderen Ressourcen.
Jeder Pod (oder Workload) wird einem Worker-Knoten zugewiesen, der über die optimalen Ressourcen und die optimale Umgebung verfügt, um das reibungslose Funktionieren des Pods zu gewährleisten. Der kube-scheduler, eine der Komponenten des Master-Knotens, übernimmt diese Planungsaufgabe, die einen Overhead verhindert und das reibungslose Funktionieren des Kubernetes-Ökosystems gewährleistet. In der nachstehenden Tabelle sind die vier kritischen Komponenten des Master-Knotens aufgeführt.
Worker-Knoten
Worker-Knoten sind die grundlegenden Bausteine des Kubernetes-Clusters. Sie führen Anwendungs-Workloads aus und führen Container aus. Worker-Knoten kommunizieren mit dem Kubernetes-Master-Knoten, um die erforderlichen Dienstdefinitionen und Zeitpläne zu erhalten, Pods zu erstellen und den Status der laufenden Container zu melden. Auf jedem Worker-Knoten läuft eine Kubernetes-Laufzeitumgebung für containerisierte Workloads, wie Docker oder CRI-O. Die Komponenten eines Worker-Knotens sind in der nachstehenden Tabelle aufgeführt.
Daraus können wir schließen, dass eine starke Abhängigkeit zwischen dem Master- und dem Worker-Knoten besteht. Die folgende Abbildung verdeutlicht diesen Zusammenhang.
Pod
Ein Pod ist die kleinste bereitstellbare Einheit in einem Kubernetes-Cluster. Ein oder mehrere Container können in einem Pod eingesetzt werden, so dass sie sich dieselben Netzwerk- und Speicherressourcen teilen. Ein Pod wird verwaltet und für die Ausführung auf einem Worker-Knoten geplant.
Service
Ein Service ist ein Kubernetes-Objekt, das eine Standardmethode für den Zugriff auf einen oder mehrere Pods bietet. Er versorgt die Pods mit stabilen IP-Adressen und DNS-Namen. Services stellen Pods anderen Teilen des Kubernetes-Clusters oder externen Netzwerken zur Verfügung und abstrahieren dabei Details der einzelnen Pods, wie z.B. ihre IP-Adressen. Das Service-Objekt kann auch verschiedene andere Funktionen bieten, wie z.B. die Sitzungsaffinität, die es Clients ermöglicht, Verbindungen mit demselben Pod über mehrere Anfragen hinweg aufrechtzuerhalten.
Deployment
Ein Deployment ist ein Objekt, das zur Verwaltung der Erstellung und Skalierung von Pods verwendet wird. Es stellt sicher, dass die richtige Anzahl von Replikatsätzen läuft.
Namespace
Namespaces sind ein virtueller Cluster, der Ressourcen innerhalb eines Kubernetes-Clusters partitioniert. Jeder Namespace ist von anderen isoliert und kann zur Organisation und Sicherung von Kubernetes-Objekten verwendet werden.
Volume
Volumes werden in einen Container in einem Pod eingebunden. Ein Volume speichert Daten getrennt von dem Container, in dem es läuft. Es bietet Containern die Möglichkeit, auf Daten zuzugreifen, sie gemeinsam zu nutzen, zu übertragen und über die Lebensdauer des Containers hinaus zu erhalten. Da Container flüchtig sind, hilft das Volume, die Daten zu erhalten, wenn sie nicht mehr laufen.
ConfigMap
Eine ConfigMap ist ein Kubernetes-Objekt zum Speichern von Konfigurationsdaten als Key-Value-Paare, auf die Anwendungen zur Laufzeit zugreifen können. Es dient dazu, Konfigurationsdaten vom Anwendungscode zu entkoppeln. ConfigMap kann mit YAML-Dateien, Befehlszeilen-Tools oder der Kubernetes-API erstellt werden.
Add-ons
Add-ons sind optionale Komponenten, die auf Worker-Knoten installiert werden und dem Kubernetes-Cluster zusätzliche Funktionen bieten. Sie dienen verschiedenen Zwecken, beispielsweise der Überwachung der Containerleistung und der Verwaltung von Anwendungsprotokollen. Beispiele für Add-ons sind das Kubernetes-Dashboard, Metrics Server und DNS.
Ingress
Ein Ingress verwaltet den Traffic des Clusters und leitet externe Anfragen an den entsprechenden Container weiter. Es kann den Traffic auf der Grundlage von Hostnamen, Pfaden, URL-Schemata und anderen Bedingungen weiterleiten. Er fungiert als Layer-7-Load-Balancer und wird verwendet, um HTTP- und HTTPS-Routen von außerhalb des Clusters für Services innerhalb des Clusters freizugeben. Mit anderen Worten ermöglicht ein Ingress externen Benutzern den Zugriff auf Services, die innerhalb des Kubernetes-Clusters ausgeführt werden, und bietet einen einzigen Zugangspunkt zu den Services.
DNS
In einem Kubernetes-Cluster ist ein DNS ein Dienst, der für die Auflösung des Namenspace von Kubernetes-Objekten verantwortlich ist. Es handelt sich um ein Add-on, das ein Namenssystem für die im Cluster laufenden Container, Pods und Services bereitstellt. Darüber hinaus ermöglicht ein DNS-Service den Entwicklern die Verwendung von Standard-DNS-Abfragen zur Ermittlung von und Verbindung zu Services, die innerhalb des Clusters laufen. Wenn ein Pod oder ein Service erstellt wird, wird ein entsprechender DNS-Eintrag erzeugt.
Container-Netzwerk-Schnittstelle (CNI)
Die CNI ist ein Kubernetes-Netzwerkstandard, der für die Bereitstellung einer einheitlichen Netzwerkschicht für den Cluster verantwortlich ist. Sie definiert, wie Container-Laufzeiten eine Verbindung zu verschiedenen Netzwerkanbietern herstellen können. CNI definiert einen standardisierten Weg für Kubernetes-Netzwerk-Plugins, um Aufgaben wie IPAM (IP-Adressverwaltung), Netzwerk-Namespaces und die Konfiguration von Container-Netzwerkschnittstellen zu erledigen. Sie ermöglicht es Kubernetes-Administratoren, die für ihren spezifischen Anwendungsfall am besten geeignete Netzwerklösung zu wählen.
Wie ein Kubernetes-Cluster funktioniert
Ein Kubernetes-Cluster automatisiert die Bereitstellung, Skalierung und Verwaltung von containerisierten Anwendungen. Dies wird im nachstehenden Flussdiagramm näher erläutert.
Managed vs. Unmanaged Kubernetes
Kubernetes kann als verwalteter Dienst angeboten werden. Managed Kubernetes ist ein vollständig verwalteter Kubernetes-Dienst, der Benutzern einen Kubernetes-Cluster zur Verfügung stellt, ohne dass sie die zugrunde liegende Infrastruktur verwalten müssen. Dies ist aufgrund der Komplexität von Kubernetes-Clustern von Vorteil.
Managed-Kubernetes-Dienste werden von Cloud-Service-Anbietern, einschließlich Gcore, angeboten, die die Verantwortung für die Einrichtung, Konfiguration und den Betrieb der Kubernetes-Cluster übernehmen. So können Teams problemlos große Mengen von Containern bereitstellen und skalierbare, fehlertolerante und hochverfügbare Plattformen für die Bereitstellung und Ausführung von containerisierten Anwendungen bereitstellen.
Bei verwaltetem Kubernetes verwaltet der Anbieter den Master-Knoten und andere komplexe Aspekte der Infrastruktur wie die Steuerebene, seinen API-Server sowie den etcd, Scheduler und Controller-Manager. Der Worker-Knoten und die Computerinfrastruktur werden bereitgestellt, an Ihre Bedürfnisse angepasst und (vom Anbieter) entsprechend Ihren Konfigurationseinstellungen automatisch skaliert. Bei Bedarf können Sie über SSH auf den Worker-Knoten zugreifen.
Managed Kubernetes kann erhebliche Kontrolle über die Worker-Knoten bieten und verspricht hohe SLA mit den verwalteten Master-Knoten, je nach Anbieter und Bedürfnissen Ihres Unternehmens. Unabhängig vom Umfang der Verwaltung gewährleistet verwaltetes Kubernetes, dass Ihre Container mit optimaler Effizienz arbeiten.
Unmanaged Kubernetes
„Unverwaltet“ Kubernetes bedeutet, dass Sie Kubernetes selbst installieren, verwalten und warten müssen. Von der Installation der Knoten, der Softwarepakete und der gesamten erforderlichen Infrastruktur bis hin zur Verwaltung und Synchronisierung der Master- und Worker-Knoten, um festzulegen, auf welchem Knoten die Anwendung ausgeführt wird, müssen alle komplexen Verfahren und Entscheidungen von Ihnen getroffen werden.
Vorteile von Managed Kubernetes
Zu den Vorteilen von verwaltetem Kubernetes gehören Kosteneffizienz, automatische Skalierbarkeit, Sicherheit und Zugriffskontrolle sowie einfache Bereitstellung und Konfiguration.
Kosteneffizienz
Verwaltetes Kubernetes reduziert den betrieblichen Aufwand, da Sie nicht in die Hardware-Infrastruktur und das für die Verwaltung der Master-Knoten erforderliche Fachwissen investieren müssen.
Automatisierte Skalierbarkeit
Anbieter von Managed-Kubernetes-Diensten bieten in der Regel eine automatische Skalierung der Knoten an, um Lastspitzen auszugleichen, so auch Gcore.
Vereinfachte und schnellere Bereitstellung
Da die Verwaltung des Master-Knotens vom Dienstanbieter übernommen wird, werden alle Patches, die Sie auf dem Worker-Knoten bereitstellen, nahtlos übernommen, was die Softwarefreigabe erleichtert und beschleunigt.
Sicherheit und Zugriffskontrolle
Anbieter von Managed Kubernetes bieten in ihren Plattformen durchgängige Sicherheit auf Cluster- und Pod-Ebene sowie automatisierte Sicherheitsfunktionen wie regelmäßige aktuelle Sicherheits-Patches und Bugfixes. Durch den Einsatz einer verwalteten Kubernetes-Lösung können Sie den Cluster-Zugriff fein abstimmen, um den Root-Zugriff nur autorisierten Einheiten zu gewähren.
Dynamische und schnelle Konfiguration
Managed Kubernetes ermöglicht es Entwicklern, Anwendungskonfigurationen im Handumdrehen zu verwalten. Dies ermöglicht eine schnelle Aktualisierung der Anwendungskonfiguration, ohne dass die gesamte Anwendung neu bereitgestellt werden muss.
Vorteile des Root-Zugriffs auf Managed Kubernetes
Der Root-Zugang gewährt administrativen Zugriff auf die Worker-Knoten. Dies erfordert die Erlaubnis und Authentifizierung des Anbieters und wird in der Regel über das SSH-Protokoll durch Angabe der entsprechenden Zugangsdaten aktiviert. Der Root-Zugriff ist häufig ein Merkmal von verwaltetem Kubernetes und etwas, worauf man bei der Auswahl eines Anbieters von verwaltetem Kubernetes achten sollte.
Mit dem Root-Zugriff können Sie den Worker-Knoten zu Fehlerbehebungszwecken zeitlich begrenzten Zugriff gewähren. Sie können die Kubernetes-Cluster auch optimieren, um bestimmte Leistungs- und Sicherheitsanforderungen zu erfüllen. Es ist jedoch zu beachten, dass dieser Zugriff bei unangemessener Handhabung Sicherheitsrisiken mit sich bringen kann. Seien Sie vorsichtig, indem Sie den Root-Zugang nur für vertrauenswürdige Mitarbeiter und Anbieter freigeben, die ihn benötigen.
Anwendungsfälle von Kubernetes-Clustern
Sehen wir uns einige Anwendungsfälle für Kubernetes-Cluster an.
Bereitstellung von Microservice-basierten Anwendungen
Ein Kubernetes-Cluster ist für die Bereitstellung und Verwaltung von Microservices-basierten Anwendungen konzipiert. Kubernetes orchestriert Microservices zu kohärenten Anwendungen, vereinfacht deren Verwaltung und Skalierung und gewährleistet gleichzeitig hohe Verfügbarkeit.
Ausführen von Machine-Learning-Workloads
Der Kubernetes-Cluster ermöglicht auch die Bereitstellung und Verwaltung von Machine-Learning-Modellen, Trainingsprozessen und Modellstatus. Dadurch wird sichergestellt, dass Entwickler ihre Trainings-Workloads auf verteilten Computerressourcen skalieren und die Nachbearbeitung ihrer Modelle effizient verwalten können.
Verwaltung von Internet-der-Dinge-(IoT)-Anwendungen
IoT-Anwendungen haben in der Regel verschiedene Endpunkte mit unterschiedlichen Konnektivitätsoptionen. Der Kubernetes-Cluster ermöglicht Entwicklern die Bereitstellung von IoT-Anwendungen und stellt sicher, dass Geräte und Sensoren die Anwendungslogik und serverlose Funktionen ausführen, wodurch die Datenübertragung zur zentralen Cloud minimiert wird.
Kontinuierliche Integration und kontinuierliche Bereitstellung (CI/CD)
Mit dem Kubernetes-Cluster können Entwickler ihre Software-Bereitstellungspipeline automatisieren und so schnellere Release-Zyklen, eine bessere Nutzung der Infrastruktur und eine bessere Qualitätskontrolle ermöglichen.
Fazit
Der Kubernetes-Cluster ist ein unverzichtbares Werkzeug für die moderne Anwendungsentwicklung. Er bietet eine optimierte und effiziente Möglichkeit zur Automatisierung der Bereitstellung, Skalierung und Verwaltung von containerisierten Anwendungen. Es ermöglicht technischen Entscheidern, komplexe containerisierte Anwendungen in großem Umfang über mehrere Infrastrukturen hinweg zu verwalten.
Gcore bietet Managed Kubernetes für Unternehmen und technische Entscheider an, die die Vorteile von Kubernetes ohne die damit verbundenen Komplexitäten und Kosteneskalationen seiner nicht verwalteten Pendants nutzen möchten.