Taints und Tolerances in Kubernetes erstellen

Taints und Tolerances arbeiten zusammen, um sicherzustellen, dass Pods nicht auf ungeeigneten Knoten geplant werden. Ein oder mehrere Taints können auf einen Knoten angewendet werden, d.h. der Knoten sollte keine Pods akzeptieren, die die Taints nicht tolerieren. Die Pods, die die Taints tolerieren, können nur auf den Knoten mit den Taints eingesetzt werden.

Wenn Sie beispielsweise einige Knoten für die ausschließliche Verwendung durch einen bestimmten Satz von Pods reservieren möchten, können Sie diesen Knoten ein „Taint“ hinzufügen und den Pods dann eine entsprechende Toleranz zuweisen. Die Pods mit den Toleranzen dürfen dann die verunreinigten Knoten sowie alle anderen Knoten im Cluster verwenden. Dadurch wird sichergestellt, dass die Pods, die keine Toleranz haben, niemals auf den Knoten mit Taints eingesetzt werden können.

Knoten-Taints sind Schlüssel-Wert-Paare, die mit einem Effekt assoziiert sind. Hier sind die verfügbaren Effekte:

  • NoSchedule: Pods, die diesen Taint nicht tolerieren, werden auf dem Knoten nicht terminiert, aber die vorhandenen Pods werden nicht aus dem Knoten entfernt.
  • BevorzugenNeinenZeitplan: Kubernetes vermeidet das Einplanen von Pods, die diesen Fehler nicht tolerieren, auf den Knoten.
  • NeinAusführen: Pod wird vom Knoten entfernt, wenn er bereits auf dem Knoten läuft, und wird nicht auf dem Knoten eingeplant, wenn er noch nicht auf dem Knoten läuft.

In diesem Artikel werden wir einen Schandfleck auf einem Arbeiterknoten erzeugen und den Hülsen Toleranz hinzufügen. Dies wird uns helfen zu verstehen, dass die Hülse, die keine Toleranz aufweist, nicht auf dem bearbeiteten Knoten mit dem Makel darauf eingesetzt wird.

Vorraussetzungen

  1. Kubernetes Cluster mit mindestens 1 Worker-Knoten.
    Wenn Sie lernen möchten, wie man einen Kubernetes-Cluster erstellt, klicken Sie hier. Dieses Handbuch hilft Ihnen, einen Kubernetes-Cluster mit 1 Master- und 2 Worker-Knoten auf AWS Ubuntu 18.04 EC2-Instanzen zu erstellen.

Was wir tun werden

  1. Farben und Toleranzen erstellen

Erstellen von Taints und Tolerationen

Überprüfen wir zunächst die im Cluster verfügbaren Knoten.

kubectl  get nodes #Get current pods in the cluster.

get-knoten

Verwenden Sie den Befehl „describe“, um Taints auf den node01 zu überprüfen.

kubectl describe node node01 #Describe node01 node to extract more details.

Beschreiben-Knoten1

Auf dem obigen Screenshot ist zu sehen, dass der Knoten kein Taint hat.

Fügen wir „app=fronend:NoSchedule“ Taint zum Node01

kubectl taint nodes node01 app=fronend:NoSchedule #Add taint to the node01 node.
kubectl describe node node01 #Extract details of the node01 node.

add-a-taint-on-node1

Auf dem obigen Screenshot ist zu sehen, dass der Node01 jetzt einen Taint hat.

Erstellen Sie eine Datei und fügen Sie die folgende Pod-Definition hinzu.

vim my-pod.yml #Create a pod definition.
apiVersion: v1
kind: Pod
metadata:
  name: frontend
spec:
  containers:
  - image: nginx
    name: frontend-nginx

pod-mit-keiner-Toleranz

Diese Hülsen-Definition enthält keine Duldung.

Um einen Pod zu erstellen, der keine Toleration hat, führen Sie den folgenden Befehl aus.

kubectl create -f my-pod.yml #Create a pod.
kubectl get pods #Get details of the pod.

Einen Pod erstellen

Verwenden Sie den Befehl „beschreiben“, um weitere Einzelheiten über den Pod zu erhalten.

kubectl get pods #Get details of the pod.
kubectl describe pod frontend #Extract more details of the Pod.

describe-the-pod

Auf dem obigen Screenshot ist zu sehen, dass der Pod nicht terminiert wurde. Der Grund dafür ist, dass der Node01 einen Fehler hat, aber der Pod nicht toleriert wird. \

So erstellen Sie eine weitere Datei mit der folgenden Pod-Definition. In diesem Pod ist eine Duldung enthalten.

vim my-mysql-pod.yml #Create a pod definition.
apiVersion: v1
kind: Pod
metadata:
  name: backend
spec:
  containers:
    - name: mysql
      image: mysql:latest
      env:
        - name: "MYSQL_USER"
          value: "mysql"
        - name: "MYSQL_PASSWORD"
          value: "mysql"
        - name: "MYSQL_DATABASE"
          value: "sample"
        - name: "MYSQL_ROOT_PASSWORD"
          value: "supersecret"
      ports:
        - containerPort: 3306
  tolerations:
  - key: app
    value: fronend
    effect: NoSchedule
    operator: Equal

Pod-mit-Toleranz

Erstellen Sie jetzt einen Pod mit „my-mysql-pod.yml“.

kubectl get pods #Get current pods in the cluster.
kubectl create -f my-mysql-pod.yml #Create a pod.
kubectl get pods #Get current pods in the cluster.

get-pods

Auf dem obigen Screenshot ist zu sehen, dass ein neues Pod-„Backend“ erstellt wurde und sich im Betriebszustand befindet.

Der Grund dafür ist, dass der Pod eine Toleranz aufweist, die es ihm ermöglicht, auf dem Node with a Taint eingesetzt zu werden.

Verwenden Sie den Befehl „describe“, um weitere Details des Pods zu sehen.

kubectl  describe  pod backend #Describe the pod to get more details of it.

describe-the-pod

Schlussfolgerung

In diesem Artikel haben wir zunächst einen Taint auf dem Knoten erstellt und dann versucht, einen Pod aufzustellen, der keine Toleration hat. Wir haben gesehen, dass der Pod nicht entfaltet wird. Später haben wir einen Pod erstellt, der mit einer Toleration versehen ist. Dank dieser Toleration kann der Pod auf dem Knoten node01 mit Taint eingesetzt werden.

Das könnte dich auch interessieren …