Definieren von Kubernetes

Abgeschlossen

Um die Eignung von Kubernetes zum Orchestrieren der containerisierten Workloads von Contoso zu ermitteln, ist müssen Sie die Kubernetes-Architektur, -Terminologie und -Definitionen kennen sowie die Verwaltung Speicher und Netzwerk mit Kubernetes verstehen.

Übersicht über Kubernetes

Kubernetes bietet die Möglichkeit, containerisierte Anwendungen, die auf mehreren Servern bereitgestellt werden, zu betreiben und zu verwalten. Kubernetes umfasst eine Open Source-Anwendungsprogrammierschnittstelle (API) zum Steuern der Ausführung von Containern und plant die Ausführung von Containern auf geclusterten VMs abhängig von den verfügbaren Computeressourcen und den Ressourcenanforderungen der einzelnen Container. Kubernetes konzentriert sich auf Anwendungsworkloads und nicht auf die zugrunde liegenden Infrastrukturkomponenten.

Kubernetes bietet u. a. folgende Vorteile für containerbasierte Anwendungen:

  • Übertragbarkeit: Der deklarative Bereitstellungsansatz von Kubernetes wird über einfache YAML-Manifestdateien implementiert. Für Anwendungsupdates muss die Architektur der Infrastruktur nicht geändert werden.

  • Skalierbarkeit. Sie können Container planen und bereitstellen, bedarfsabhängig skalieren und deren Lebenszyklen verwalten.

  • Erweiterungen. Mit der Kubernetes Open Source-API können Sie Anwendungen mit der bevorzugten Programmiersprache, dem gewünschten Betriebssystem, den gewünschten Bibliotheken und dem gewünschten Messagingbus erstellen. Sie können auch vorhandene Tools für CI/CD (Continuous Integration und Continuous Delivery) integrieren.

Kubernetes-Architektur

Ein Kubernetes-Cluster umfasst zwei Hauptkomponenten:

  • Knoten oder Workerknoten, die die Anwendungsworkloads (Aufgaben) in einem Cluster ausführen. Ein Cluster enthält in der Regel mehrere Knoten, die von der Steuerungsebene verwaltet werden. Zu den Unterkomponenten eines Knotens gehören kubelet, kube-proxy und die Containerruntime.

  • Die Steuerungsebene (Masterknoten), die zentrale Kubernetes-Dienste zum Orchestrieren der Anwendungsworkloads bereitstellt, indem die Aufgaben in einem Cluster geplant und gesteuert werden. Die Steuerungsebene umfasst u. a. die Komponenten kube-api-server, Controller und kube-scheduler.

Hinweis

Derzeit wird nur das Betriebssystem Linux als Hostbetriebssystem für den Masterknoten von Kubernetes unterstützt.

A diagram to exemplify the components of a Kubernetes cluster with representations for master and worker node with the sub-components API server, kubelet, container runtime and container instances.

Jeder Kubernetes-Cluster enthält mindestens eine Steuerungsebene und mindestens eine Workerknoteninstanz. Workerknoteninstanzen können auf dem Linux-Betriebssystem oder auf Windows Server 2019 basieren. Eine typische Kubernetes-Workload besteht aus mehreren Containern, die über mehrere Workerknoten in einem Cluster verteilt sind.

Terminologie und Definitionen

In der folgenden Tabelle sind einige wichtige Kubernetes-Begriffe definiert.

Begriff Definition
Pod Die grundlegende Vorgangseinheit für Kubernetes. Container werden in Pods gruppiert, und die Pods werden auf den jeweils gewünschten Zustand skaliert. Ein Pod stellt eine Spezifikation für die Ausführung der darin enthaltenen Container bereit. Darüber hinaus wird eine Spezifikation für die Speicher- und Netzwerkressourcen bereitgestellt, die von den betreffenden Containern verwendet werden.
Dienst Hierbei handel es sich um eine abstrahierte oder logische Gruppe von Pods und eine Richtlinie für den Zugriff auf diese Pods. Die Richtlinie definiert, wie der Zugriff auf Pods möglich ist, und definiert die Pods, für die die Richtlinie gilt. Eine derartige Kombination einer logischen Gruppe von Pods und einer Richtlinie wird manchmal als Microservice bezeichnet.
Controller Verfolgt Zustandsänderungen einer Kubernetes-Ressource nach und trägt dazu bei, die Ressource in den gewünschten Zustand versetzen. Zu den verschiedenen Workloadcontrollern zählen u. a. ReplicaSet, Deployments, Job und CronJob.
kubectl Ein Verwaltungstool, das eine Befehlszeilenschnittstelle zum Herstellen einer Verbindung mit der Steuerungsebene eines Kubernetes-Clusters bereitstellt.
kubeadm Eine Reihe von Tools zum schnellen Erstellen eines Kubernetes-Clusters, das minimale Features und Add-Ons umfasst.
kubelet Ein Agent, der auf jedem Knoten in einem Cluster ausgeführt wird, um Orchestrierungsanforderungen von der Steuerungsebene zu verarbeiten und die Ausführung der angeforderten Container zu planen.
kube-proxy Verwaltet die virtuellen Netzwerke auf den einzelnen Knoten durch Routing des Netzwerkdatenverkehrs und Verwaltung der IP-Adressierung für Dienste und Pods.
Containerruntime Eine Knotenkomponente, die containerisierten Anwendungen die Ausführung von und Interaktion mit zusätzlichen Ressourcen, z. B. dem virtuellen Netzwerk und Speicher, ermöglicht.
kube-api-server Eine Komponente auf der Steuerungsebene, die die zugrunde liegenden Kubernetes-APIs zur Verfügung stellt, um die Interaktion mit Verwaltungstools wie kubectl oder dem Kubernetes-Dashboard zu ermöglichen.
kube-scheduler Bestimmt, welche Knoten die Workload ausführen können, und startet diese, wenn eine Anwendung gestartet oder erstellt wird.

Container, Pods und Knoten

Ein Container wird in einem Pod ausgeführt, der wiederum in einem Knoten ausgeführt wird.

Container

Container sollten nur dann zusammen in einem einzelnen Pod geplant werden, wenn sie eng miteinander verbunden sind und Ressourcen, z. B. einen Datenträger, gemeinsam verwenden müssen.

Pods

Ein Pod:

  • Kann einen oder mehrere Container enthalten.
  • Stellt eine einzelne Instanz einer Anwendung dar.
  • Enthält eine Spezifikation für die Ausführung der Container im Pod, z. B. Details zu Netzwerk und Speicher, die von den Containern im Pod gemeinsam verwendet werden.

Mit Pod-Vorlagen können Sie Informationen für Pods definieren, z. B. welches Containerimage und welche Ports verwendet werden sollen.

Nodes

Ein Knoten:

  • Kann mehrere Pods enthalten.
  • Kann abhängig vom Cluster ein virtueller Computer oder ein physischer Computer sein.

Jeder Knoten wird von der Steuerungsebene oder dem Masterknoten verwaltet. Ein Masterknoten verwaltet die Planung der Pods auf den Knoten im Cluster.

A diagram depicting containers, volumes running inside a pod, and in turn the pods running inside of a node.

Tipp

Sie können einem bestimmten Knoten über die Knotenaffinität einen Kubernetes Pod zuweisen. Dazu können Sie eine Kombination des Befehls kubectl und der Manifestdatei .yaml verwenden.

Hinweis

Bei einem Dienst handelt es sich um mehrere Pods, die über eigene IP-Adressen verfügen.

Speicher und Netzwerk

Kubernetes verwaltet auch die Netzwerk- und Speicherkomponenten für containerbasierte Anwendungen.

Storage

Als Speicher werden in Kubernetes Volumes verwendet. Bei einem Volume handelt es sich im Grunde um ein Verzeichnis, auf das die Container in einem Pod zum Speichern von Dateien zugreifen können. Sie können Kubernetes-Speichervolumes weitgehend zwei Kategorien zuordnen:

  • Persistente Volumes. Persistente Volumes stellen Speichervolumes als Kubernetes-Ressource bereit. Volume und Daten sind nach dem Neustart eines Containers verfügbar.
  • Kurzlebige Volumes. Kurzlebige Volumes stellen temporären Speicher für schreibgeschützte Eingabedaten bereit. Beim Neustart eines Containers sind kurzlebige Volumes und Daten nicht mehr verfügbar.

Hinweis

Kubernetes unterstützt verschiedenartige Volumes, z. B. azureDisk zum Einbinden eines Microsoft Azure Datenträgers in einen Pod, azureFile zum Einbinden eines Azure File-Volumes in einen Pod und iSCSI.

Netzwerk

Kubernetes bietet in den folgenden Bereichen Unterstützung für Netzwerke:

  • Containernetzwerke. Betrifft die Netzwerkkommunikation zwischen den Containern in einem Pod.
  • Clusternetzwerke. Ermöglicht eine Netzwerkkommunikation zwischen den Pods innerhalb eines Clusters.
  • Dienste (extern). Ermöglicht den Netzwerkzugriff auf die Anwendungen, die in einem Pod ausgeführt werden, von außerhalb des Clusters.
  • Dienste (intern). Gibt an, welche Netzwerkdienste von den Ressourcen in einem Cluster verwendet werden dürfen.

Um eine Netzwerkkommunikation in den zuvor beschriebenen Szenarien zu ermöglichen, müssen Sie wissen, wie einige Kernkomponenten in Kubernetes konfiguriert werden, einschließlich:

  • Container:
    • Container verwenden eine gemeinsame Pod-Netzwerkkonfiguration, einschließlich der IP-Adresse.
    • Container verfügen über gemeinsam verwendete Ressourcen in einem Pod und können mit anderen Containern im selben Pod kommunizieren.
    • Alle Container in einem Pod verhalten sich so, als befänden sie sich in Bezug auf das Netzwerk auf demselben Host.
  • Pods:
    • Jeder Pod verfügt über eine eigene eindeutige IP-Adresse.
  • Services:
    • Jeder Dienst verfügt über eine eigene virtuelle IP-Adresse.
  • Cluster:
    • Jeder Clusterknoten verfügt wie in einem normalen Clusterhost über eine eigene IP-Adresse.

Bei Kommunikation zwischen dem Cluster und einem Dienst wird die IP-Adresse des Dienstes mithilfe von kube-dns und kube-proxy an die IP-Adresse des Pods geroutet.

Um eine direkte Kommunikation zwischen Pods (Pod-zu-Pod) zu unterstützen und die Anwendung von Richtlinien für diese Kommunikation zu ermöglichen, müssen Sie ein CNI-Plug-in (Container Network Interface) zum Kubernetes-Cluster hinzufügen. CNI ist eine branchenspezifische Spezifikation für Netzwerk-Plug-ins. In Kubernetes sind viele Plug-ins verfügbar, die diese Spezifikation erfüllen.

Hinweis

CNI-Plug-ins sorgen für eine Abstraktion des physischen Netzwerks der Pods. Die virtuelle Natur dieses abstrakten Netzwerks erleichtert das Konfigurieren, Bearbeiten und Automatisieren von Pod-Netzwerken. Das physische Netzwerk wird als Underlaynetzwerk bezeichnet, das virtuelle, abstrahierte Netzwerk als Overlaynetzwerk.