In Kubernetes können Sie Taints (Taints) zum Markieren von Knoten verwenden, um zu verhindern, dass Pods auf ungeeigneten Knoten geplant werden. Der Taint befindet sich auf Knotenebene. Zur Steuerung der Pod-Planung können verschiedene Ebenen und entsprechende Toleranzebenen angegeben werden.
Zu den Verschmutzungsgraden gehören:
NoSchedule
: Pods werden nicht auf Knoten mit diesem Taint geplant.PreferNoSchedule
: Pods werden nicht bevorzugt auf einem Knoten mit diesem Taint geplant, können aber auf diesem Knoten geplant werden, wenn keine anderen Knoten verfügbar sind.NoExecute
: Wenn auf dem Knoten bereits ein Pod mit diesem Taint vorhanden ist, wird der Pod entfernt.
Zu den entsprechenden Toleranzgrenzen gehören:
NoSchedule
: Pods werden nicht auf Knoten mit diesem Taint eingeplant, es sei denn, der Pod verfügt über eine Toleranzstufe, die dem Taint entspricht.PreferNoSchedule
: Pods können auf Knoten mit diesem Taint eingeplant werden, aber Pods mit einer höheren Toleranzstufe werden berücksichtigt.NoExecute
: Pods sind nicht betroffen, wenn sie bereits auf dem Knoten ausgeführt werden.
Sie können den Befehl verwenden, um einen Taint zu einem Knoten hinzuzufügen kubectl taint nodes node-name taint-key=taint-value:taint-effect
, wobei taint-key
Sie taint-value
den Namen und den Wert des Taints sowie taint-effect
die Ebene des Taints definieren. Beispielsweise wird dem Knoten mit dem Namen ein Taint mit Namen , Wert und Ebene kubectl taint nodes node-1 gpu=true:NoSchedule
hinzugefügt .node-1
gpu
true
NoSchedule
Toleranzstufen können mithilfe von Feldern in der YAML-Datei des Pods angegeben werden tolerations
. Die folgende YAML-Datei zeigt beispielsweise, wie Toleranzstufen in der YAML-Datei eines Pods verwendet werden:
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: nginx:latest
tolerations:
- key: gpu
value: "true"
effect: NoSchedule
tolerationSeconds: 3600
Im obigen Beispiel tolerations
definiert das Feld eine Toleranzregel, d. h. der Pod verfügt über eine Regel gpu=true
mit einer Ebene von NoSchedule
und einer Toleranzebene von Sekunden. 3600
Das heißt, wenn ein Pod auf einem Knoten mit diesem Taint ausgeführt werden muss, muss er über eine Toleranzstufe verfügen, die dem Taint entspricht.
Verwenden Sie Taint- und Toleranzstufen, um Knoten zu markieren und die Planung von Pods zu steuern, um die Anwendungsleistung und -verfügbarkeit sicherzustellen.