Was ist Kubernetes?

Orchestrierungsplattform, die Container auf einem Cluster aus vielen Maschinen (Nodes) platziert, ihre Anzahl hält, sie aktualisiert und Endpunkte für sie bereitstellt. Die Nutzer deklarieren mit Ressourcen wie Deployments und Services einen Soll-Zustand, und Controller beobachten den Ist-Zustand und nähern ihn der Deklaration an (Abgleich, Reconciliation). Die kleinste Einheit ist der Pod; verlorene Pods werden automatisch neu erzeugt, und Rolling Updates sowie lastabhängiges Autoscaling werden unterstützt. Auch als K8s abgekürzt.

Japanische Bezeichnung: Kubernetes

„Kubernetes“ kommt in 10 Übungsfragen aus 1 Themen vor, z. B. Grundlagen von Cloud und Containern.

Fachgebiet: Grundlagen von Cloud und Containern

Wichtige Ressourcen

Ein Pod ist die kleinste Einheit, die Container zusammenfasst, ein ReplicaSet hält die Zahl der Pods, und ein Deployment nutzt ReplicaSets, um neue Versionen auszurollen und zurückzurollen. Ein Service gibt mehreren Pods einen stabilen Namen und eine stabile Adresse, und ein Ingress verteilt HTTP-Anfragen von außerhalb des Clusters nach Pfad oder Hostname auf Services. ConfigMaps und Secrets übergeben Konfiguration und vertrauliche Werte getrennt von den Images, und Namespaces teilen einen Cluster nach Teams oder Umgebungen auf.

Deklaration und Abgleich

Die Nutzer deklarieren einen Zustand wie „drei Pods dieser Version ausführen“ in YAML o. Ä. und registrieren ihn bei Kubernetes. Controller prüfen wiederholt den Ist-Zustand, erzeugen verschwundene Pods neu und entfernen überzählige. Da das Ergebnis statt der Schritte deklariert wird, stellt sich bei beliebig häufiger Anwendung derselben Definition derselbe Zustand ein, und das System erholt sich automatisch von Node-Ausfällen.

Ressourcenangaben und Probes

Für jeden Container werden die CPU- und Speichermenge, die reserviert werden soll (Requests), und die Obergrenzen (Limits) angegeben, und der Scheduler wählt den Node für jeden Pod anhand der Requests. Eine Readiness-Probe prüft, ob ein Container Anfragen annehmen kann, und steuert die Verteilung; eine Liveness-Probe sorgt dafür, dass ein Container, der nicht mehr antwortet, neu gestartet wird. Ein HorizontalPodAutoscaler ändert die Zahl der Pods anhand von Kennzahlen wie der Auslastung im Verhältnis zu den Requests.

Jetzt üben: Fragen zu Kubernetes

Wie heißt in Kubernetes die kleinste Einheit, die bereitgestellt und verwaltet wird und einen oder mehrere Container zusammenfasst, die sich dieselbe IP-Adresse und dieselben Volumes teilen?

  1. ANode
  2. BService
  3. CPod
Antwort und Erläuterung anzeigen

Antwort: C. Pod

Ein Pod ist die kleinste Einheit, die Kubernetes platziert und ausführt. Die Container darin teilen sich einen Netzwerk-Namespace, können also über localhost miteinander kommunizieren und dieselben Volumes nutzen. Meist enthält ein Pod einen Anwendungscontainer, und Hilfscontainer, etwa zum Weiterleiten von Logs, kommen manchmal in denselben Pod hinzu. Pods sind Wegwerfobjekte und erhalten beim Neuerzeugen eine neue IP-Adresse; sie werden daher normalerweise indirekt über ein Deployment o. Ä. verwaltet. Ein Node ist eine Maschine, auf der Pods laufen, und ein Service ist ein stabiler Endpunkt für mehrere Pods.

In Kubernetes betreibt ein Deployment mit replicas: 3 drei Pods. Was geschieht, wenn einer dieser Pods mit kubectl delete pod gelöscht wird?

  1. AAuch die Einstellung des Deployments wird auf replicas: 2 geändert, und zwei Pods laufen weiter
  2. BEin Controller erkennt, dass die tatsächliche Anzahl unter die angegebenen 3 gefallen ist, und erzeugt einen neuen Pod
  3. CAuch die beiden anderen Pods des Deployments werden gelöscht, und das gesamte Deployment wird angehalten
Antwort und Erläuterung anzeigen

Antwort: B. Ein Controller erkennt, dass die tatsächliche Anzahl unter die angegebenen 3 gefallen ist, und erzeugt einen neuen Pod

In Kubernetes deklarieren die Nutzer einen Soll-Zustand wie „drei Pods ausführen“, und Controller beobachten wiederholt den Ist-Zustand und greifen bei Abweichungen so ein, dass er sich der Deklaration annähert (Abgleich, Reconciliation). Durch das Löschen eines Pods sinkt die tatsächliche Anzahl auf 2, daher erzeugt der Controller des ReplicaSets einen neuen Pod und stellt 3 wieder her. Geht ein Pod durch den Ausfall eines Nodes verloren, wird er nach demselben Mechanismus auf einem anderen Node neu erzeugt. Um die Zahl der Pods wirklich zu verringern, ändert man replicas des Deployments, statt Pods zu löschen.

Häufige Fragen

Was ist der Unterschied zwischen Docker und Kubernetes?

Docker ist vor allem ein Werkzeug, um auf einer Maschine Images zu bauen und Container auszuführen. Kubernetes ist eine Plattform, die über viele Maschinen hinweg verwaltet, auf welchem Node was läuft, wie viele Exemplare laufen und wie sie aktualisiert werden. Kubernetes führt Container aus Images im Standardformat aus, die mit Docker oder anderen Werkzeugen gebaut wurden.

Sollte auch ein kleines System Kubernetes verwenden?

Nicht unbedingt. Kubernetes ist stark bei hoher Verfügbarkeit, automatischer Wiederherstellung und der Verwaltung vieler Dienste, aber der Betrieb eines Clusters erfordert Wissen und Aufwand. Für ein kleines System können Container auf einer einzelnen Maschine oder ein verwalteter Container-Dienst in der Cloud besser passen.

„Kubernetes“ in den Erläuterungen

Fragen mit „Kubernetes“ (10)

  1. Wie heißt in Kubernetes die kleinste Einheit, die bereitgestellt und verwaltet wird und einen oder mehrere Container zusammenfasst, die sich dieselbe IP-Adresse und dieselben Volumes teilen?
  2. In Kubernetes betreibt ein Deployment mit replicas: 3 drei Pods. Was geschieht, wenn einer dieser Pods mit kubectl delete pod gelöscht wird?
  3. In einem Kubernetes-Deployment wird das Container-Image in der Pod-Vorlage auf eine neue Version geändert. Was geschieht mit der Standard-Update-Strategie (RollingUpdate)?
  4. In Kubernetes erhält ein Pod bei jedem Neuerzeugen eine andere IP-Adresse. Welche Ressource ermöglicht es anderen Anwendungen, sich über einen gleichbleibenden Namen und eine gleichbleibende Adresse mit mehreren per Label ausgewählten Pods zu verbinden, wobei die Last auf diese verteilt wird?
  5. In einem Kubernetes-Cluster sollen HTTPS-Anfragen, die für einen Hostnamen eintreffen, an den Service api gehen, wenn der Pfad mit /api beginnt, und sonst an den Service web. Welche Ressource eignet sich, um diese Verteilungsregel festzulegen?
  6. Das Passwort einer Datenbank wird in einem Kubernetes-Secret gespeichert. Welche Beschreibung eines Secrets ist richtig?
  7. In einer Webanwendung unter Kubernetes wurde die Prüfung der Liveness-Probe so erweitert, dass sie auch prüft, ob sich die Anwendung mit der Datenbank verbinden kann, von der sie abhängt. Welches Problem kann diese Einstellung am ehesten verursachen?
  8. Ein HorizontalPodAutoscaler in Kubernetes hat als Ziel eine CPU-Auslastung der Pods von 70 % und einen Bereich von 1 bis 10 Pods. Derzeit beträgt die mittlere CPU-Auslastung von 5 Pods 30 %. Wie viele Pods werden benötigt, wenn die benötigte Zahl als ⌈aktuelle Zahl × aktuelle Auslastung ÷ Zielauslastung⌉ berechnet wird (⌈ ⌉ bedeutet Aufrunden)?
  9. Welche Beschreibung der für einen Container gesetzten Ressourcen-Requests und -Limits in Kubernetes ist richtig?
  10. Wie oben gezeigt, wird das Verbindungsziel der Datenbank nicht in das Image geschrieben, sondern beim Start des Containers als Umgebungsvariable übergeben. Was ist der wichtigste Vorteil dieses Entwurfs?

Verwandte Begriffe

Pod Container Umgebungsvariable Container-Image DNS (Domain Name System) HTTP (Hypertext Transfer Protocol) TLS (Transport Layer Security) Reverse Proxy Deadlock Autoscaling

Zur Glossarübersicht