Kubernetes Cordon- und Uncordon-Befehle

KubernetesKubernetesBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In einem Kubernetes-Cluster können Knoten (Nodes) verschiedene Zustände annehmen, wie beispielsweise "bereit" (ready) oder "nicht bereit" (not ready). Die Befehle cordon und uncordon werden verwendet, um die Planung von Pods auf einem bestimmten Knoten zu steuern. Der Befehl cordon markiert einen Knoten als "nicht planbar" (unschedulable), wodurch verhindert wird, dass neue Pods auf diesem Knoten geplant werden. Der Befehl uncordon markiert einen Knoten erneut als "planbar" (schedulable), sodass neue Pods auf diesem Knoten geplant werden können. In diesem Lab (LabEx) werden wir untersuchen, wie diese Befehle verwendet werden können, um die Planung von Pods auf Knoten in einem Kubernetes-Cluster zu steuern.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kubernetes(("Kubernetes")) -.-> kubernetes/TroubleshootingandDebuggingCommandsGroup(["Troubleshooting and Debugging Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/ConfigurationandVersioningGroup(["Configuration and Versioning"]) kubernetes(("Kubernetes")) -.-> kubernetes/BasicsGroup(["Basics"]) kubernetes(("Kubernetes")) -.-> kubernetes/BasicCommandsGroup(["Basic Commands"]) kubernetes/BasicsGroup -.-> kubernetes/initialization("Initialization") kubernetes/BasicCommandsGroup -.-> kubernetes/get("Get") kubernetes/BasicCommandsGroup -.-> kubernetes/cordon("Cordon") kubernetes/BasicCommandsGroup -.-> kubernetes/uncordon("Uncordon") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/describe("Describe") kubernetes/ConfigurationandVersioningGroup -.-> kubernetes/label("Label") subgraph Lab Skills kubernetes/initialization -.-> lab-9664{{"Kubernetes Cordon- und Uncordon-Befehle"}} kubernetes/get -.-> lab-9664{{"Kubernetes Cordon- und Uncordon-Befehle"}} kubernetes/cordon -.-> lab-9664{{"Kubernetes Cordon- und Uncordon-Befehle"}} kubernetes/uncordon -.-> lab-9664{{"Kubernetes Cordon- und Uncordon-Befehle"}} kubernetes/describe -.-> lab-9664{{"Kubernetes Cordon- und Uncordon-Befehle"}} kubernetes/label -.-> lab-9664{{"Kubernetes Cordon- und Uncordon-Befehle"}} end

Starten des Minikube-Clusters

Bevor Sie Ressourcen erstellen, benötigen Sie einen laufenden Kubernetes-Cluster. Minikube ist eine leichte Kubernetes-Umgebung, die auf Ihrem lokalen Rechner läuft.

  1. Navigieren Sie zu Ihrem Arbeitsverzeichnis:

    Öffnen Sie das Terminal und navigieren Sie zum Standard-Projektordner:

    cd /home/labex/project
  2. Starten Sie Minikube:

    Starten Sie Minikube, um einen Kubernetes-Cluster zu initialisieren:

    minikube start
    • Dieser Befehl richtet einen Ein-Knoten-Kubernetes-Cluster auf Ihrem lokalen Rechner ein.
    • Minikube kann je nach Leistung Ihres Systems einige Minuten dauern, um zu starten.
  3. Vergewissern Sie sich, dass Minikube läuft:

    Überprüfen Sie den Status des Minikube-Clusters:

    minikube status
    • Suchen Sie nach Komponenten wie kubelet und apiserver, die als Running aufgeführt sind.
    • Wenn der Cluster nicht läuft, führen Sie minikube start erneut aus.

Wenn Sie Probleme beim Starten von Minikube haben, können Sie minikube delete verwenden, um die Umgebung bei Bedarf zurückzusetzen.

Markieren eines Knotens als nicht planbar (Cordoning)

In diesem Schritt werden wir den Befehl cordon verwenden, um einen Knoten als "nicht planbar" (unschedulable) zu markieren und zu verhindern, dass neue Pods auf diesem Knoten geplant werden. Hier sind die Schritte:

  1. Listen Sie die Knoten im Cluster mit dem folgenden Befehl auf:
kubectl get nodes
  1. Markieren Sie den Knoten als nicht planbar mit dem folgenden Befehl:
kubectl cordon minikube
  1. Vergewissern Sie sich, dass der Knoten markiert wurde, indem Sie das Feld SchedulingDisabled im Status des Knotens mit dem folgenden Befehl überprüfen:
kubectl get node | grep SchedulingDisabled

Aufheben der Markierung eines Knotens als nicht planbar (Uncordoning)

In diesem Schritt werden wir den Befehl uncordon verwenden, um einen Knoten erneut als "planbar" (schedulable) zu markieren und es zu ermöglichen, dass neue Pods auf diesem Knoten geplant werden. Hier sind die Schritte:

  1. Heben Sie die Markierung des Knotens als nicht planbar auf, indem Sie den folgenden Befehl ausführen:
kubectl uncordon minikube
  1. Vergewissern Sie sich, dass die Markierung des Knotens als nicht planbar aufgehoben wurde, indem Sie das Feld SchedulingDisabled im Status des Knotens mit dem folgenden Befehl überprüfen:
kubectl get node | grep SchedulingDisabled

Markieren und Aufheben der Markierung von Knoten mit Pods

In diesem Schritt werden wir ein Szenario simulieren, in dem ein Knoten markiert (cordon) und die Markierung aufgehoben (uncordon) werden muss, während auf ihm Pods laufen. Hier sind die Schritte:

  1. Führen Sie den folgenden Befehl aus, um in das Verzeichnis /home/labex/project/ zu gelangen:
cd /home/labex/project/
  1. Erstellen Sie eine Bereitstellung (Deployment) namens "deploy.yaml" mit mehreren Kopien mithilfe der folgenden YAML-Datei im Verzeichnis /home/labex/project/:
## deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 1
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:1.16
          ports:
            - containerPort: 80
  1. Markieren Sie den Knoten als nicht planbar mit dem folgenden Befehl:
kubectl cordon minikube
  1. Wenden Sie die YAML-Datei mit dem folgenden Befehl an:
kubectl apply -f deploy.yaml
  1. Listen Sie die auf den Knoten laufenden Pods mit dem folgenden Befehl auf:
kubectl get pods -o wide

Überprüfen Sie, ob der Pod korrekt geplant und gestartet wurde.

  1. Heben Sie die Markierung des Knotens als nicht planbar auf mit dem folgenden Befehl:
kubectl uncordon minikube
  1. Überprüfen Sie den Status der auf dem Knoten laufenden Pods, um sicherzustellen, dass sie auf dem Knoten, dessen Markierung als nicht planbar aufgehoben wurde, neu geplant werden. Verwenden Sie dazu den folgenden Befehl:
kubectl get pods -o wide

Verwenden von Labels zum Markieren und Aufheben der Markierung von Knoten

In diesem Schritt werden wir Labels verwenden, um Knoten basierend auf bestimmten Kriterien als nicht planbar (cordon) zu markieren und diese Markierung aufzuheben (uncordon). Hier sind die Schritte:

  1. Kennzeichnen Sie die Knoten im Cluster mit dem folgenden Befehl:
kubectl label nodes minikube org=labex
  1. Markieren Sie die Knoten, die das angegebene Label haben, als nicht planbar mit dem folgenden Befehl:
kubectl cordon -l org=labex
  1. Vergewissern Sie sich, dass die Knoten markiert wurden, indem Sie das Feld SchedulingDisabled im Status der Knoten mit dem folgenden Befehl überprüfen:
kubectl get node -l org=labex | grep SchedulingDisabled
  1. Heben Sie die Markierung der Knoten, die das angegebene Label haben, als nicht planbar auf mit dem folgenden Befehl:
kubectl uncordon -l org=labex
  1. Vergewissern Sie sich, dass die Markierung der Knoten als nicht planbar aufgehoben wurde, indem Sie das Feld SchedulingDisabled im Status der Knoten mit dem folgenden Befehl überprüfen:
kubectl get node -l org=labex | grep SchedulingDisabled

Zusammenfassung

In diesem Lab haben wir untersucht, wie man die Befehle cordon und uncordon in Kubernetes verwendet, um die Planung von Pods auf Knoten zu steuern. Wir haben gelernt, wie man Knoten als nicht planbar markiert und diese Markierung aufhebt, auch wenn auf den Knoten Pods laufen, und wie man Labels verwendet, um Knoten basierend auf bestimmten Kriterien gezielt als nicht planbar zu markieren und diese Markierung aufzuheben. Diese Befehle sind nützlich für die Verwaltung der Verfügbarkeit und Resilienz von Pods in einem Kubernetes-Cluster.