En Kubernetes, puede usar taints (manchas) para marcar nodos para evitar que los pods se programen en nodos inadecuados. La contaminación está en el nivel de nodo y se pueden especificar diferentes niveles y los niveles de tolerancia correspondientes para controlar la programación de los pods.
Los niveles de contaminación incluyen:
NoSchedule
: los pods no se programarán en nodos con esta corrupción.PreferNoSchedule
Nota: no se preferirá que los pods se programen en un nodo con esta corrupción, pero se pueden programar en este nodo si no hay otros nodos disponibles.NoExecute
: si ya existe un pod con esta corrupción en el nodo, el pod será desalojado.
Los niveles de tolerancia correspondientes incluyen:
NoSchedule
: Los pods no se programarán en nodos con esta contaminación a menos que el Pod tenga un nivel de tolerancia que coincida con la contaminación.PreferNoSchedule
: los pods se pueden programar en nodos con esta corrupción, pero se considerarán los pods con un nivel de tolerancia más alto.NoExecute
: los pods no se ven afectados si ya se están ejecutando en el nodo.
Puede usar el comando para agregar una corrupción a un nodo kubectl taint nodes node-name taint-key=taint-value:taint-effect
, donde taint-key
y taint-value
definir el nombre y el valor de la corrupción, y taint-effect
definir el nivel de la corrupción. Por ejemplo, se agrega una mancha con nombre , valor y nivel kubectl taint nodes node-1 gpu=true:NoSchedule
al nodo llamado .node-1
gpu
true
NoSchedule
Los niveles de tolerancia se pueden especificar mediante campos en el archivo YAML del Pod tolerations
. Por ejemplo, el siguiente archivo YAML muestra cómo usar los niveles de tolerancia en el archivo YAML de un Pod:
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
En el ejemplo anterior, tolerations
el campo define una regla de tolerancia, es decir, el Pod tiene una regla gpu=true
con un nivel de NoSchedule
y un nivel de tolerancia de segundos. 3600
Esto significa que si un pod debe ejecutarse en un nodo con esa corrupción, debe tener un nivel de tolerancia que coincida con la corrupción.
Use niveles de contaminación y tolerancia para marcar nodos y controlar la programación de los pods para garantizar el rendimiento y la disponibilidad de la aplicación.