Taints und Tolerationen

KubernetesKubernetesBeginner
Jetzt üben

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

Einführung

Taints und Tolerationen werden in Kubernetes verwendet, um anzugeben, welche Knoten (Nodes) für die Planung bestimmter Pods geeignet sind. Taints werden auf Knoten angewendet, um Pods abzuwehren, während Tolerationen auf Pods angewendet werden, um sie zu bestimmten Knoten zu ziehen. In diesem Lab (LabEx) werden wir lernen, wie man Taints und Tolerationen verwendet, um Pods auf bestimmten Knoten zu planen.


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(("Kubernetes")) -.-> kubernetes/AdvancedCommandsGroup(["Advanced Commands"]) kubernetes/BasicsGroup -.-> kubernetes/initialization("Initialization") kubernetes/BasicCommandsGroup -.-> kubernetes/get("Get") kubernetes/BasicCommandsGroup -.-> kubernetes/cordon("Cordon") kubernetes/BasicCommandsGroup -.-> kubernetes/taint("Taint") kubernetes/AdvancedCommandsGroup -.-> kubernetes/apply("Apply") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/describe("Describe") kubernetes/ConfigurationandVersioningGroup -.-> kubernetes/label("Label") subgraph Lab Skills kubernetes/initialization -.-> lab-34029{{"Taints und Tolerationen"}} kubernetes/get -.-> lab-34029{{"Taints und Tolerationen"}} kubernetes/cordon -.-> lab-34029{{"Taints und Tolerationen"}} kubernetes/taint -.-> lab-34029{{"Taints und Tolerationen"}} kubernetes/apply -.-> lab-34029{{"Taints und Tolerationen"}} kubernetes/describe -.-> lab-34029{{"Taints und Tolerationen"}} kubernetes/label -.-> lab-34029{{"Taints und Tolerationen"}} 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. Überprüfen Sie, ob 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.

Erstellen eines getainten Knotens (Tainted Node)

In diesem Schritt werden wir einen Knoten mit einem Taint erstellen, der bestimmte Pods abwehrt.

  1. Kennzeichnen Sie einen Knoten mit einer benutzerdefinierten Bezeichnung (Label):
kubectl label nodes minikube disk-type=ssd
  1. Tainten Sie den Knoten mit dem folgenden Befehl:
kubectl taint nodes minikube disk-type=ssd:NoSchedule

Der Effekt NoSchedule verhindert, dass Pods ohne Tolerationen auf diesem Knoten geplant werden.

Erstellen eines Pods ohne Tolerationen

In diesem Schritt werden wir einen Pod ohne Tolerationen erstellen und überprüfen, dass er nicht auf dem getainten Knoten (Tainted Node) geplant werden kann.

  1. Erstellen Sie eine Datei mit dem Namen pod-without-toleration.yaml mit folgendem Inhalt:
apiVersion: v1
kind: Pod
metadata:
  name: pod-without-toleration
spec:
  containers:
    - name: nginx
      image: nginx:latest
  1. Wenden Sie die Änderungen an:
kubectl apply -f pod-without-toleration.yaml
  1. Überprüfen Sie, dass der Pod nicht auf dem getainten Knoten geplant wird:
kubectl describe pod pod-without-toleration | grep -i taint

Die Ausgabe sollte zeigen, dass der Pod nicht auf dem Knoten mit dem Taint geplant wird.

Erstellen eines Pods mit Tolerationen

In diesem Schritt werden wir einen Pod mit Tolerationen erstellen, der es ihm ermöglicht, auf dem getainten Knoten (Tainted Node) geplant zu werden.

  1. Erstellen Sie eine Datei mit dem Namen pod-with-toleration.yaml mit folgendem Inhalt:
apiVersion: v1
kind: Pod
metadata:
  name: pod-with-toleration
spec:
  containers:
    - name: nginx
      image: nginx:latest
  tolerations:
    - key: "disk-type"
      operator: "Equal"
      value: "ssd"
      effect: "NoSchedule"
  1. Wenden Sie die Änderungen an:
kubectl apply -f pod-with-toleration.yaml
  1. Überprüfen Sie, dass der Pod auf dem getainten Knoten geplant wird:
kubectl get pod pod-with-toleration -o wide

Tolerieren mehrerer Taints

In diesem Schritt werden wir einen Pod mit mehreren Tolerationen erstellen, der es ihm ermöglicht, auf Knoten mit mehreren Taints geplant zu werden.

  1. Erstellen Sie eine Datei mit dem Namen pod-with-multiple-tolerations.yaml mit folgendem Inhalt:
apiVersion: v1
kind: Pod
metadata:
  name: pod-with-multiple-tolerations
spec:
  containers:
    - name: nginx
      image: nginx:latest
  tolerations:
    - key: "disk-type"
      operator: "Equal"
      value: "ssd"
      effect: "NoSchedule"
    - key: "gpu"
      operator: "Equal"
      value: "true"
      effect: "NoSchedule"
  1. Wenden Sie die Änderungen an:
kubectl apply -f pod-with-multiple-tolerations.yaml
  1. Überprüfen Sie, dass der Pod auf einem Knoten mit beiden Taints geplant wird:
kubectl get pod pod-with-multiple-tolerations -o wide

Zusammenfassung

In diesem Lab haben wir gelernt, wie man Taints und Tolerationen verwendet, um Pods auf bestimmten Knoten zu planen. Wir haben begonnen, indem wir einen getainten Knoten (Tainted Node) erstellt und überprüft haben, dass Pods ohne Tolerationen nicht auf ihm geplant werden können. Anschließend haben wir einen Pod mit Tolerationen erstellt und überprüft, dass er auf dem getainten Knoten geplant werden kann. Schließlich haben wir einen Pod mit mehreren Tolerationen erstellt und überprüft, dass er auf Knoten mit mehreren Taints geplant werden kann.

Taints und Tolerationen sind eine leistungsstarke Funktion von Kubernetes, die verwendet werden kann, um sicherzustellen, dass bestimmte Workloads nur auf bestimmten Knoten geplant werden.