Einen Pod erstellen und untersuchen

KubernetesBeginner
Jetzt üben

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.