Kubernetes - Taints & Tolerations
Alasta 23 Juillet 2024 kubernetes kubernetes taint toleration
Description : Kubernetes, les taints et les tolérations
Kubernetes - Taints & Tolerations
Cela permet de définir des restrictions sur les pods pouvant être planifiés sur des nodes.
Utilisé pour des nodes avec des caractéristiques spécifiques.
La taint sur un node “indique” au pod que s’il ne tolère pas la taint, il n’est pas schédulé sur ce node.
Exemple, on taint un node avec “odeur=transpiration”, le pod doit tolérer (toleration) l’odeur de transpiration.
Taint
Ce sont les nodes que l’on taint. Taint d’un node:
kubectl taint nodes <node-name> <key>=<value>:<taint-effect>
Exemple:
kubectl taint nodes node1 app=blue:NoSchedule
Les différents taint-effect:
- NoSchedule: le pod ne sera pas programmé sur le node marqué par une taint si ce pod n’a pas la toleration associée. Les pods existant sur le node seront éjectés (sauf toleration adéquat).
- PreferNoSchedule: le système essaiera d’éviter de placer le pod sur le node marqué par une taint qui ne correspond pas à la toleration, mais ne le garanti pas.
- NoExecute: si le pod est déjà en cours d’exécution sur le node marqué par une taint et qu’il n’a pas la bonne toleration, il est alors expulsé. Doc officielle - taint & toleration.
Une best practice est de ne pas déployer de pod sur un node control plan.
kubectl describe node kube-control-plan | grep -i taint
Taints: node-role.kubernetes.io/control-plane:NoSchedule
Enlever une taint (le - à la fin de la taint):
k taint node controlplane node-role.kubernetes.io/control-plane:NoSchedule-
Tolerance
La tolerance ne s’applique que sur les pods.
Positionner une tolération sur un pod:
apiVersion: v1
kind: Pod
metadata:
name: mypod
labels:
env: test
spec:
containers:
- name: nginx
image: nginx
tolerations:
- key: "app"
operator: "Equal"
value: "blue"
effect: "NoSchedule"
L’option tolerationSeconds dans la toleration avec un effet à NoExecute permet de laisser le pod sur le node pendant X secondes avant d’être évincé.
Labels/Annotations/Taints connus et utilisés par Kubernetes.