Pods verstehen

KubernetesBeginner
Jetzt üben

Einführung

In diesem Lab untersuchen Sie die kleinste bereitstellbare Einheit in Kubernetes: den Pod.

Ein Pod ist das Objekt, das Kubernetes einem Node zuweist. Normalerweise führen Sie einen Container in Kubernetes nicht direkt aus. Stattdessen werden Container in Pods platziert.

Ein Pod kann einen oder mehrere Container enthalten, die sich Netzwerk- und Speicherkontext teilen. In den meisten Einsteigerbeispielen wird nur ein einzelner Container verwendet. Das Konzept der gemeinsamen Umgebung ist jedoch entscheidend.

Sie lernen:

  • einen Pod mithilfe einer YAML-Konfigurationsdatei zu definieren (dem Bauplan);
  • den Pod mit kubectl im Cluster zu erstellen;
  • den Status des Pods zu prüfen, um sicherzustellen, dass er ausgeführt wird;
  • die detaillierte Konfiguration und Historie des Pods zu untersuchen.

Am Ende dieses Labs läuft ein echter Webserver in einem Pod in Ihrem Cluster.

Den Pod definieren

In diesem Schritt definieren Sie Ihren ersten Pod. Kubernetes verwendet YAML. Eine YAML-Datei ist wie ein Bauplan oder Rezept: Sie beschreibt genau, wie Ihre Anwendung aussehen soll.

Ein Pod ist das kleinste Objekt, das Kubernetes einem Node zuweist. Er ist jedoch nicht dasselbe wie ein Container. Ein Container enthält den laufenden Anwendungsprozess und sein Dateisystem-Image. Ein Pod ist die Kubernetes-Hülle um einen oder mehrere Container. Diese Hülle stellt eine gemeinsame Netzwerkidentität, einen gemeinsamen Lebenszyklus und optional gemeinsamen Speicher bereit.

Eine Pod-Definition benötigt vier wesentliche Bestandteile:

  • apiVersion: die Version der Kubernetes-Sprache, die Sie verwenden;
  • kind: die Art des Objekts, das Sie erstellen (in diesem Fall ein Pod);
  • metadata: Informationen zur Identifikation des Objekts, etwa sein Name und seine Labels;
  • spec: die „Spezifikation“, also der wichtigste Teil des Rezepts. Sie beschreibt die auszuführenden Container.

Sie erstellen eine Datei namens nginx-pod.yaml. Diese Datei definiert einen Pod namens nginx-pod, der einen einzelnen Container mit dem Image nginx ausführt. nginx ist ein weit verbreiteter Webserver.

Erstellen Sie die Datei mit dem Texteditor nano:

nano nginx-pod.yaml

Kopieren Sie den folgenden Inhalt in die Datei und fügen Sie ihn ein. Lesen Sie ihn sorgfältig durch, um die vier besprochenen Abschnitte zu erkennen:

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  labels:
    app: nginx
spec:
  containers:
    - name: nginx
      image: nginx:latest
      ports:
        - containerPort: 80

Um die Datei im standardmäßigen nano zu speichern und den Editor zu verlassen, drücken Sie Ctrl+X. Geben Sie anschließend zur Bestätigung des Speicherns Y ein und drücken Sie Enter, um den Dateinamen zu übernehmen.

Sie haben nun Ihren ersten Kubernetes-Bauplan geschrieben. Er teilt Kubernetes mit: „Ich möchte einen Pod namens nginx-pod. Bitte führen Sie darin einen Container mit dem nginx-Image aus.“

Den Pod erstellen

Nachdem Sie Ihren Bauplan (nginx-pod.yaml) erstellt haben, übergeben Sie ihn jetzt an Kubernetes.

Dazu verwenden Sie den Befehl kubectl apply. Dieser Befehl teilt Kubernetes mit: „Dies ist der gewünschte Zustand. Bitte stellen Sie ihn her.“

Der Ausdruck gewünschter Zustand bezeichnet eine der zentralen Ideen von Kubernetes. Sie geben dem System nicht jeden einzelnen technischen Arbeitsschritt vor. Stattdessen beschreiben Sie das gewünschte Endergebnis. Die Kubernetes-Controller arbeiten dann so lange, bis der tatsächliche Zustand dieser Beschreibung entspricht.

Führen Sie den folgenden Befehl aus, um Ihren Pod zu erstellen:

kubectl apply -f nginx-pod.yaml

Sie sollten eine Bestätigungsmeldung sehen:

pod/nginx-pod created

Mit diesem Befehl haben Sie den Bauplan an den Kubernetes-API-Server (die Control Plane) gesendet. Der Scheduler hat anschließend einen geeigneten Node für Ihren Pod gefunden. Danach begann der Kubelet auf diesem Node, das Nginx-Image herunterzuladen und den Container zu starten.

Den Status prüfen

In diesem Schritt prüfen Sie den Fortschritt Ihres neuen Pods. Das Erstellen eines Pods geschieht nicht sofort. Das Container-Image muss zunächst heruntergeladen und die Anwendung gestartet werden.

Beachten Sie dabei: kubectl apply wird normalerweise schnell beendet, weil der Befehl nur die Anfrage übermittelt. Die eigentliche Arbeit erfolgt asynchron im Cluster. Deshalb ist die Statusprüfung ein normaler zweiter Schritt und kein Hinweis darauf, dass etwas nicht stimmt.

Um den Status Ihrer Pods anzuzeigen, verwenden Sie den Befehl get:

kubectl get pods

Daraufhin sehen Sie eine Tabelle mit Ihren Pods. Achten Sie auf die Spalte STATUS:

NAME        READY   STATUS    RESTARTS   AGE
nginx-pod   1/1     Running   0          15s
  • STATUS: Dies ist das wichtigste Feld.

    • ContainerCreating: Das System lädt noch das Image herunter oder startet den Container.
    • Running: Erfolg! Der Pod ist gestartet und funktionsfähig.
    • Pending: Der Cluster versucht noch zu bestimmen, auf welchem Node der Pod ausgeführt werden soll.
    • Error oder CrashLoopBackOff: Es ist ein Fehler aufgetreten, zum Beispiel ist die Anwendung abgestürzt.
  • READY: Der Wert 1/1 bedeutet, dass 1 von 1 im Pod definierten Container bereit ist, Datenverkehr zu verarbeiten.

Wenn Sie ContainerCreating sehen, warten Sie einige Sekunden und führen Sie kubectl get pods erneut aus. Sobald der Status Running lautet, ist Ihr Nginx-Webserver aktiv.

Details untersuchen

In diesem Schritt lernen Sie, wie Sie „unter die Haube“ schauen. Der Befehl get liefert eine Zusammenfassung. Manchmal müssen Sie jedoch genau wissen, was geschieht – besonders dann, wenn ein Problem auftritt.

Der Befehl describe erstellt einen detaillierten Bericht über Ihre Kubernetes-Ressource.

Für Einsteiger ist es hilfreich, kubectl get und kubectl describe als zwei verschiedene Beobachtungsebenen zu betrachten. get beantwortet die Frage „Wie lautet der aktuelle Status in Kurzform?“. describe beantwortet dagegen die Frage „Was ist passiert, damit dieser Zustand entstanden ist?“. Diese Ereignishistorie führt oft am schnellsten zur Ursache eines Problems.

Führen Sie den folgenden Befehl aus, um nginx-pod zu untersuchen:

kubectl describe pod nginx-pod

Dieser Befehl gibt eine große Menge an Informationen aus. Scrollen Sie bis zum Ende und suchen Sie nach dem Abschnitt Events. Er beschreibt den Start Ihres Pods in chronologischer Reihenfolge:

Events:
  Type    Reason     Age   From               Message
  ----    ------     ----  ----               -------
  Normal  Scheduled  ...   default-scheduler  Successfully assigned default/nginx-pod...
  Normal  Pulling    ...   kubelet            Pulling image "nginx:latest"
  Normal  Pulled     ...   kubelet            Successfully pulled image "nginx:latest"...
  Normal  Created    ...   kubelet            Created container nginx
  Normal  Started    ...   kubelet            Started container nginx

Dieses Ereignisprotokoll ist Ihre erste Anlaufstelle bei der Fehlersuche. Wenn ein Pod in Pending oder Error feststeckt, zeigt der Abschnitt Events normalerweise den Grund an, zum Beispiel „Insuficient CPU“ oder ImagePullBackOff.

Sie haben nun Ihren ersten Kubernetes-Pod erstellt, überprüft und untersucht!

Zusammenfassung

In diesem Lab haben Sie das Konzept des Pods als grundlegenden Baustein von Kubernetes kennengelernt.

Sie haben erfolgreich:

  1. einen YAML-Bauplan für einen Nginx-Pod geschrieben;
  2. den Pod mit kubectl apply im Cluster bereitgestellt;
  3. mit kubectl get überprüft, dass der Pod den Status Running hat;
  4. die Start-Historie mit kubectl describe ausführlich untersucht.

Das Verständnis von Pods ist entscheidend, weil sich alle weiteren Kubernetes-Konzepte – etwa Deployments, Services und StatefulSets – letztlich um die Verwaltung dieser Pods drehen. Sie sind nun bereit für anspruchsvollere Themen!