Heim >Web-Frontend >js-Tutorial >CKA-Ganztags-Statische Pods, manuelle Planung, Beschriftungen und Selektoren in Kubernetes

CKA-Ganztags-Statische Pods, manuelle Planung, Beschriftungen und Selektoren in Kubernetes

Linda Hamilton
Linda HamiltonOriginal
2024-11-04 13:33:02924Durchsuche

CKA Full Course Day Static Pods, Manual Scheduling, Labels, and Selectors in Kubernetes

Aufgabe: Planen Sie einen Pod manuell ohne den Scheduler

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.

Voraussetzungen

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.

Schritt 1: Überprüfen Sie die Clusterknoten

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.

Schritt 2: Definieren Sie das Pod-Manifest (node.yml)

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:

  • Wir setzen nodeName auf kind-cka-cluster-control-plane, was bedeutet, dass der Scheduler die Zuweisung eines Knotens überspringt und stattdessen das Kubelet auf diesem bestimmten Knoten die Platzierung übernimmt.

Dieser Ansatz ist eine direkte Methode zur Knotenauswahl, die andere Methoden wie nodeSelector oder Affinitätsregeln außer Kraft setzt.

Laut Kubernetes-Dokumentation:

"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

Weitere Einzelheiten finden Sie in der Kubernetes-Dokumentation zur Knotenzuweisung.

Schritt 3: Wenden Sie das Pod-Manifest an

Sobald unser Manifest fertig ist, wenden Sie es auf den Cluster an:


kubectl apply -f node.yml
Dieser Befehl erstellt den Nginx-Pod und weist ihn direkt dem Knoten kind-cka-cluster-control-plane zu.

Schritt 4: Überprüfen Sie die Pod-Platzierung

Überprüfen Sie abschließend, ob der Pod auf dem angegebenen Knoten ausgeführt wird:


kubectl get pods -o wide
Die Ausgabe sollte bestätigen, dass der Nginx-Pod tatsächlich auf der kind-cka-cluster-control-plane läuft:


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.


Aufgabe: Melden Sie sich beim Knoten der Steuerungsebene an, gehen Sie zum Verzeichnis der statischen Standard-Pod-Manifeste und versuchen Sie, die Komponenten der Steuerungsebene neu zu starten.

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.


Bestätigen des Neustarts von kube-controller-manager

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.


Aufräumen

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.


Erstellen mehrerer Pods mit bestimmten Beschriftungen

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

Tags und Erwähnungen

  • @piyushsachdeva
  • Tag 13: Video-Tutorial

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn