In dieser Aufgabe untersuchen wir, wie man den Kubernetes-Planer umgeht, indem man einen Pod direkt einem bestimmten Knoten in einem Cluster zuweist. Dies kann ein nützlicher Ansatz für bestimmte Szenarien sein, in denen Sie einen Pod benötigen, der auf einem bestimmten Knoten ausgeführt werden soll, ohne den üblichen Planungsprozess durchlaufen zu müssen.
Wir gehen davon aus, dass Sie über einen Kubernetes-Cluster verfügen, der mit einer KIND-Konfiguration (Kubernetes in Docker) erstellt wurde, die der in früheren Beiträgen beschriebenen ähnelt. Hier haben wir einen Cluster namens kind-cka-cluster:
erstellt
kind create cluster --name kind-cka-cluster --config config.yml
Da wir die Clustererstellung mit KIND bereits in früheren Beiträgen behandelt haben, werden wir nicht noch einmal auf diese Details eingehen.
Um die in diesem neuen Cluster verfügbaren Knoten anzuzeigen, führen Sie Folgendes aus:
kubectl get nodes
Sie sollten eine Ausgabe ähnlich dieser sehen:
NAME STATUS ROLES AGE VERSION kind-cka-cluster-control-plane Ready control-plane 7m v1.31.0
Für diese Aufgabe planen wir unseren Pod auf der kind-cka-cluster-control-plane.
Jetzt erstellen wir ein Pod-Manifest im YAML-Format. Mithilfe des Felds „nodeName“ in unserer Pod-Konfiguration können wir den genauen Knoten für den Pod angeben und dabei den Kubernetes-Planer vollständig umgehen.
node.yml:
apiVersion: v1 kind: Pod metadata: name: nginx spec: containers: - name: nginx image: nginx nodeName: kind-cka-cluster-control-plane
In diesem Manifest:
Dieser Ansatz ist eine direkte Methode zur Knotenauswahl, die andere Methoden wie nodeSelector oder Affinitätsregeln außer Kraft setzt.
Laut Kubernetes-Dokumentation:
Weitere Einzelheiten finden Sie in der Kubernetes-Dokumentation zur Knotenzuweisung."nodeName ist eine direktere Form der Knotenauswahl als Affinity oder nodeSelector. nodeName ist ein Feld in der Pod-Spezifikation. Wenn das Feld nodeName nicht leer ist, ignoriert der Scheduler den Pod und das Kubelet versucht auf dem benannten Knoten zu platzieren Der Pod auf diesem Knoten wird durch die Verwendung von nodeSelector oder Affinitäts- und Anti-Affinitätsregeln außer Kraft gesetzt
Schritt 3: Wenden Sie das Pod-Manifest an
kubectl apply -f node.yml
Schritt 4: Überprüfen Sie die Pod-Platzierung
kubectl get pods -o wide
kind create cluster --name kind-cka-cluster --config config.yml
Dadurch wird bestätigt, dass wir durch das Festlegen des Felds „nodeName“ den Kubernetes-Planer erfolgreich umgangen und unseren Pod direkt auf dem Knoten der Steuerungsebene geplant haben.
Um auf den Control-Plane-Knoten unseres neu erstellten Clusters zuzugreifen, verwenden Sie den folgenden Befehl:
kubectl get nodes
Navigieren Sie zu dem Verzeichnis, das die statischen Pod-Manifeste enthält:
NAME STATUS ROLES AGE VERSION kind-cka-cluster-control-plane Ready control-plane 7m v1.31.0
Überprüfen Sie die aktuellen Manifeste:
apiVersion: v1 kind: Pod metadata: name: nginx spec: containers: - name: nginx image: nginx nodeName: kind-cka-cluster-control-plane
Um den Kube-Controller-Manager neu zu starten, verschieben Sie seine Manifestdatei vorübergehend:
kubectl apply -f node.yml
Nachdem Sie den Neustart bestätigt haben, bringen Sie die Manifestdatei an ihren ursprünglichen Speicherort zurück:
kubectl get pods -o wide
Mit diesen Schritten haben wir erfolgreich demonstriert, wie man auf die Steuerungsebene zugreift und die statischen Pod-Manifeste manipuliert, um den Lebenszyklus von Komponenten der Steuerungsebene zu verwalten.
Nachdem wir die Manifestdatei kube-controller-manager.yaml vorübergehend nach /tmp verschoben haben, können wir überprüfen, ob der kube-controller-manager neu gestartet wurde. Wie in früheren Beiträgen erwähnt, verwende ich k9s, was den Neustart deutlich anzeigt, aber für Leser ohne k9s, versuchen Sie den folgenden Befehl
Ereignisse prüfen:
Um weitere Informationen zu sammeln, verwenden Sie:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx 1/1 Running 0 28s 10.244.0.5 kind-cka-cluster-control-plane <none> <none>
Suchen Sie nach Ereignissen am Ende der Ausgabe. Bei einem erfolgreichen Neustart werden Ereignisse wie die folgenden angezeigt:
docker exec -it kind-cka-cluster-control-plane bash
Das Vorhandensein der Ereignisse „Killing“, „Created“ und „Started“ weist darauf hin, dass der Kube-Controller-Manager gestoppt und dann erfolgreich neu gestartet wurde.
Sobald Sie Ihre Aufgaben abgeschlossen und das Verhalten Ihrer Pods bestätigt haben, ist es wichtig, alle Ressourcen zu bereinigen, die nicht mehr benötigt werden. Dies trägt dazu bei, eine aufgeräumte Umgebung aufrechtzuerhalten und Ressourcen in Ihrem Cluster freizugeben.
Pods auflisten:
Zunächst können Sie die aktuellen Pods überprüfen, die in Ihrem Cluster ausgeführt werden:
cd /etc/kubernetes/manifests
Möglicherweise sehen Sie eine Ausgabe wie diese:
ls
Pod beschreiben:
Um weitere Informationen zu einem bestimmten Pod zu erhalten, verwenden Sie den Beschreibungsbefehl:
mv kube-controller-manager.yaml /tmp
Hier erhalten Sie Details zum Pod, wie z. B. seinen Namen, Namespace, Knoten und andere Konfigurationen:
mv /tmp/kube-controller-manager.yaml /etc/kubernetes/manifests/
Pod löschen:
Wenn Sie feststellen, dass der Pod nicht mehr benötigt wird, können Sie ihn mit dem folgenden Befehl sicher löschen:
kubectl describe pod kube-controller-manager-kind-cka-cluster-control-plane -n kube-system
Löschung überprüfen:
Nachdem Sie den Löschbefehl ausgeführt haben, können Sie überprüfen, ob der Pod entfernt wurde, indem Sie die Pods erneut auflisten:
Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Killing 4m12s (x2 over 8m32s) kubelet Stopping container kube-controller-manager Normal Pulled 3m6s (x2 over 7m36s) kubelet Container image "registry.k8s.io/kube-controller-manager:v1.31.0" already present on machine Normal Created 3m6s (x2 over 7m36s) kubelet Created container kube-controller-manager Normal Started 3m6s (x2 over 7m36s) kubelet Started container kube-controller-manager
Stellen Sie sicher, dass der Nginx-Pod nicht mehr in der Liste erscheint.
Durch die Durchführung dieser Bereinigungsschritte tragen Sie dazu bei, dass Ihr Kubernetes-Cluster organisiert und effizient bleibt.
In diesem Abschnitt erstellen wir drei Pods basierend auf dem Nginx-Image, jeweils mit einem eindeutigen Namen und spezifischen Labels, die unterschiedliche Umgebungen angeben: env:test, env:dev und env:prod.
Schritt 1: Erstellen Sie das Skript
Zuerst erstellen wir ein Skript, das die Befehle zum Generieren der Pods enthält. Verwenden Sie den folgenden Befehl, um die Skriptdatei zu erstellen:
kind create cluster --name kind-cka-cluster --config config.yml
Fügen Sie als Nächstes den folgenden Code in die Datei ein:
kubectl get nodes
Schritt 2: Machen Sie das Skript ausführbar
Nachdem Sie die Datei gespeichert haben, machen Sie das Skript mit dem folgenden Befehl ausführbar:
NAME STATUS ROLES AGE VERSION kind-cka-cluster-control-plane Ready control-plane 7m v1.31.0
Schritt 3: Führen Sie das Skript aus
Führen Sie das Skript aus, um die Pods zu erstellen:
apiVersion: v1 kind: Pod metadata: name: nginx spec: containers: - name: nginx image: nginx nodeName: kind-cka-cluster-control-plane
Sie sollten eine Ausgabe sehen, die die Erstellung der Pods anzeigt:
kubectl apply -f node.yml
Schritt 4: Überprüfen Sie die erstellten Pods
Das Skript zeigt dann den Status der erstellten Pods an:
kubectl get pods -o wide
An dieser Stelle können Sie die Pods anhand ihrer Bezeichnungen filtern. Um beispielsweise den Pod mit der Bezeichnung env=dev zu finden, verwenden Sie den folgenden Befehl:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx 1/1 Running 0 28s 10.244.0.5 kind-cka-cluster-control-plane <none> <none>
Sie sollten eine Ausgabe sehen, die bestätigt, dass der Pod ausgeführt wird:
docker exec -it kind-cka-cluster-control-plane bash
Das obige ist der detaillierte Inhalt vonCKA-Ganztags-Statische Pods, manuelle Planung, Beschriftungen und Selektoren in Kubernetes. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!