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
kubectlim 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.ErroroderCrashLoopBackOff: Es ist ein Fehler aufgetreten, zum Beispiel ist die Anwendung abgestürzt.
READY: Der Wert
1/1bedeutet, 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:
- einen YAML-Bauplan für einen Nginx-Pod geschrieben;
- den Pod mit
kubectl applyim Cluster bereitgestellt; - mit
kubectl getüberprüft, dass der Pod den Status Running hat; - die Start-Historie mit
kubectl describeausfü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!


