Einführung
Ein Pod ist das kleinste Workload-Objekt, das Sie normalerweise in Kubernetes erstellen. Er kapselt einen oder mehrere Container, weist ihnen eine gemeinsame Netzwerkidentität zu und ermöglicht es Kubernetes, sie auf einem Knoten (Node) zu planen.
In diesem Lab erstellen Sie einen einzelnen Pod mit einem kleinen, vorinstallierten Container-Image, warten darauf, dass Kubernetes ihn als „Ready“ (bereit) markiert, und untersuchen das Objekt aus verschiedenen Blickwinkeln. Sie verwenden dazu kubectl get, kubectl describe und kubectl get -o yaml, damit spätere Labs zum Schreiben von Manifesten auf einem soliden Verständnis des tatsächlichen Objektzustands basieren, anstatt nur auswendig gelerntes YAML zu verwenden.
Einen Arbeitsbereich für den Pod vorbereiten
In diesem Schritt bereiten Sie einen dedizierten Namespace für Ihren ersten Pod vor und legen diesen Namespace als Standardziel für Ihre Befehle fest.
Beginnen Sie in /home/labex/project, dem gemeinsamen Arbeitsbereich, der während der gesamten CKAD-Vorbereitung verwendet wird.
mkdir -p /home/labex/project
cd /home/labex/project
Der Kubernetes-API-Server benötigt nach dem Start der VM möglicherweise einen kurzen Moment, um erreichbar zu sein. Führen Sie zuerst diesen Befehl aus. Falls gemeldet wird, dass der Server noch nicht bereit ist, warten Sie einige Sekunden und führen Sie ihn erneut aus, bis der Knoten den Status Ready aufweist.
kubectl get nodes --request-timeout=5s
Die erwartete Ausgabe enthält einen bereiten Control-Plane-Knoten:
NAME STATUS ROLES AGE VERSION
labex-v135 Ready control-plane ... v1.35...
Erstellen Sie einen Namespace namens ckad-prep-pod. Ein Namespace gibt diesem Lab einen eigenen Objektbereich, sodass der von Ihnen erstellte Pod nicht mit Objekten aus anderen Labs vermischt wird.
kubectl create namespace ckad-prep-pod
Der Befehl sollte die Erstellung des Namespaces bestätigen:
namespace/ckad-prep-pod created
Setzen Sie den aktuellen Kontext-Namespace auf ckad-prep-pod. Danach lesen Befehle, die einen Namespace erfordern (wie kubectl get pods), standardmäßig aus diesem Namespace.
kubectl config set-context --current --namespace=ckad-prep-pod
Die Ausgabe sollte bestätigen, dass der aktuelle Kontext geändert wurde:
Context "labex-v135" modified.
Überprüfen Sie, ob der aktuelle Namespace geändert wurde:
kubectl config view --minify --output 'jsonpath={..namespace}'; echo
Erwartete Ausgabe:
ckad-prep-pod
Den Pod erstellen
In diesem Schritt erstellen Sie einen einzelnen Pod mit kubectl run und warten darauf, dass er den Status „Ready“ erreicht.
kubectl run kann einen einfachen Pod direkt über die Befehlszeile erstellen. Die Option --image wählt das Container-Image aus, und --restart=Never sorgt dafür, dass dies ein eigenständiger Pod bleibt, anstatt einen Controller auf höherer Ebene zu erstellen.
Dieses Lab verwendet registry.k8s.io/pause:3.10.1, ein winziges Image, das bereits in der vorbereiteten Kubernetes-Umgebung vorhanden ist. Es läuft ohne zusätzliche Anwendungskonfiguration, was es Ihnen ermöglicht, sich auf den Pod-Lebenszyklus zu konzentrieren, anstatt auf Image-Downloads oder Anwendungsverhalten.
kubectl run sample-pod --image=registry.k8s.io/pause:3.10.1 --restart=Never
Der Befehl sollte melden, dass Kubernetes das Pod-Objekt akzeptiert hat:
pod/sample-pod created
Erstellung ist nicht gleichbedeutend mit Bereitschaft. Kubernetes muss den Pod noch planen, den Container starten und den Pod als „Ready“ markieren. Verwenden Sie kubectl wait, um auf die Bedingung Ready des Pods zu warten.
kubectl wait --for=condition=Ready pod/sample-pod --timeout=60s
Erwartete Ausgabe:
pod/sample-pod condition met
Listen Sie nun die Pods im aktuellen Namespace auf:
kubectl get pods
Sie sollten sample-pod mit 1/1 bereiten Containern und dem Status Running sehen:
NAME READY STATUS RESTARTS AGE
sample-pod 1/1 Running 0 ...
Pod-Platzierung und Ereignisse untersuchen
In diesem Schritt untersuchen Sie, wo der Pod ausgeführt wird, und lesen den Ereignisverlauf (Event Trail), den Kubernetes während des Starts aufgezeichnet hat.
Die normale Ansicht von kubectl get pods ist kompakt. Fügen Sie -o wide hinzu, um Planungsdetails wie den Knotennamen und die IP-Adresse des Pods zu sehen.
kubectl get pod sample-pod -o wide
Die erwartete Ausgabe enthält den Knoten und eine interne Pod-IP:
NAME READY STATUS RESTARTS AGE IP NODE
sample-pod 1/1 Running 0 ... ... labex-v135
kubectl describe bietet eine für Menschen lesbare Ansicht des Objekts. Sie enthält Metadaten, Container-Details, Bedingungen und aktuelle Ereignisse. Für Anfänger ist der Abschnitt Events besonders nützlich, da er zeigt, was Kubernetes nach der Erstellung des Pods getan hat.
kubectl describe pod sample-pod
Achten Sie in der Ausgabe auf Zeilen wie diese:
Name: sample-pod
Namespace: ckad-prep-pod
Status: Running
Containers:
sample-pod:
Image: registry.k8s.io/pause:3.10.1
Conditions:
Type Status
Ready True
Events:
Type Reason Age From Message
Normal Scheduled ... default-scheduler Successfully assigned ...
Normal Pulled ... kubelet Container image "registry.k8s.io/pause:3.10.1" already present ...
Normal Created ... kubelet Created container ...
Normal Started ... kubelet Started container ...
Das genaue Alter der Ereignisse und die Meldungen können variieren, aber das Grundprinzip bleibt stabil: Kubernetes plant den Pod, bereitet das Image vor, erstellt den Container und startet ihn.
Die Objektfelder des Pods lesen
In diesem Schritt untersuchen Sie ausgewählte Pod-Felder im YAML-Format und verknüpfen sie mit den Objektkonzepten, die Sie im vorherigen Lab gesehen haben.
kubectl get kann ein Objekt mit -o yaml als YAML ausgeben. Dies ist die tatsächliche Objektdarstellung, die vom API-Server zurückgegeben wird, einschließlich der Felder, die Kubernetes nach der Erstellung hinzugefügt hat. Der folgende Befehl verwendet sed -n '1,80p', um nur die ersten 80 Zeilen anzuzeigen, damit die Ausgabe übersichtlich bleibt.
kubectl get pod sample-pod -o yaml | sed -n '1,80p'
Suchen Sie in der Ausgabe nach den Feldern auf oberster Ebene und dem Container-Image:
apiVersion: v1
kind: Pod
metadata:
name: sample-pod
namespace: ckad-prep-pod
spec:
containers:
- image: registry.k8s.io/pause:3.10.1
name: sample-pod
...
status:
...
Sie müssen nicht alle generierten Felder auswendig lernen. Konzentrieren Sie sich vorerst auf die Grundstruktur: apiVersion, kind, metadata, spec und status. Im nächsten Lab werden Sie die wichtigen Teile selbst schreiben.
Verwenden Sie eine gezielte JSONPath-Abfrage, um nur das Image-Feld auszugeben. JSONPath-Ausdrücke sind nützlich, wenn Sie einen präzisen Wert aus einem großen Objekt benötigen.
kubectl get pod sample-pod -o jsonpath='{.spec.containers[0].image}'; echo
Erwartete Ausgabe:
registry.k8s.io/pause:3.10.1
Zusammenfassung
Sie haben einen eigenständigen Pod erstellt, darauf gewartet, dass Kubernetes ihn als „Ready“ markiert, Planungs- und Ereignisdetails untersucht und wichtige Objektfelder aus der YAML- und JSONPath-Ausgabe gelesen. Damit haben Sie einen konkreten Pod, an den Sie im nächsten Lab anknüpfen können, in dem Sie ein Pod-Manifest schreiben, anstatt das Objekt direkt mit kubectl run zu erstellen.


