Estos contenidos se han traducido de forma automática para su comodidad, pero Huawei Cloud no garantiza la exactitud de estos. Para consultar los contenidos originales, acceda a la versión en inglés.
Actualización más reciente 2024-09-10 GMT+08:00

Gestión de manchas de nodos

Las etiquetas permiten que un nodo repela los pods específicos para evitar que estos pods se programen en el nodo.

Alteraciones

Una mancha es un par de clave y valor asociado con un efecto. Los siguientes efectos están disponibles:

  • NoSchedule: Ningún pod podrá programar en el nodo a menos que tenga una tolerancia coincidente. Los pods existentes no serán desalojados del nodo.
  • PreferNoSchedule: Kubernetes evita que los pods que no pueden tolerar esta contaminación se programen en el nodo.
  • NoExecute: Si el pod se ha estado ejecutando en un nodo, el pod será desalojado del nodo. Si el pod no se ha ejecutado en un nodo, el pod no se programará en el nodo.

Para agregar una manch a un nodo, ejecute el comando kubectl taint node nodename de la siguiente manera:

$ kubectl get node
NAME             STATUS   ROLES    AGE    VERSION
192.168.10.170   Ready    <none>   73d    v1.19.8-r1-CCE21.4.1.B003
192.168.10.240   Ready    <none>   4h8m   v1.19.8-r1-CCE21.6.1.2.B001
$ kubectl taint node 192.168.10.240 key1=value1:NoSchedule
node/192.168.10.240 tainted

Para ver la configuración de mancha, ejecute los comandos describe y get de la siguiente manera:

$ kubectl describe node 192.168.10.240
Name:               192.168.10.240
...
Taints:             key1=value1:NoSchedule
...
$ kubectl get node 192.168.10.240 -oyaml
apiVersion: v1
...
spec:
  providerID: 06a5ea3a-0482-11ec-8e1a-0255ac101dc2
  taints:
  - effect: NoSchedule
    key: key1
    value: value1
...

Para quitar una mancha, ejecute el siguiente comando con un guion (-) agregado después de NoSchedule:

$ kubectl taint node 192.168.10.240 key1=value1:NoSchedule-
node/192.168.10.240 untainted
$ kubectl describe node 192.168.10.240
Name:               192.168.10.240
...
Taints:             <none>
...

En la consola de CCE, también puede gestionar manchas de un nodo en lotes.

  1. Inicie sesión en la consola de CCE.
  2. Haga clic en el nombre del clúster, acceda a la página de detalles del clúster y elija Nodes en el panel de navegación. En la página mostrada, seleccione un nodo y haga clic en Manage Labels and Taints.
  3. En el cuadro de diálogo que se muestra, haga clic en Add batch operations en Batch Operation, elija Add/Update y seleccione Taint.

    Ingrese la clave y el valor de la mancha que se agregará, seleccione el efecto de la mancha y haga clic en OK.

    Figura 1 Adición de una mancha

  4. Después de agregar la mancha, compruebe la mancha agregada en los datos del nodo.

Configuración de programación de nodos

Para configurar el ajuste de programación, inicie sesión en la consola de CCE, haga clic en el clúster, elija Nodes en el panel de navegación y haga clic en More > Disable Scheduling en la columna Operation de un nodo de la lista de nodos.

En el cuadro de diálogo que se muestra, haga clic en OK para establecer que el nodo no se puede programar.

Esta operación agregará una mancha al nodo. Puede usar kubectl para ver el contenido de la mancha.

$ kubectl describe node 192.168.10.240
...
Taints:             node.kubernetes.io/unschedulable:NoSchedule
...

En la consola de CCE, realice las mismas operaciones de nuevo para quitar la mancha y establecer el nodo para que sea programable.

Tolerancias

Las tolerancias se aplican a los pods y permiten (pero no requieren) que los pods se planifiquen en nodos con las manchas coincidentes.

Las indicaciones y las tolerancias trabajan juntas para garantizar que los pods no estén programados en nodos inapropiados. Se aplican una o más manchas a un nodo. Esto marca que el nodo no debe aceptar ningún pod que no tolere las manchas.

Aquí hay un ejemplo de un pod que usa tolerancias:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    env: test
spec:
  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
  tolerations:
  - key: "key1"
    operator: "Equal"
    value: "value1"
    effect: "NoSchedule"  

En el ejemplo anterior, la etiqueta de tolerancia del pod es clave1=valor1 y el efecto de olor es de NoSchedule. Por lo tanto, el pod puede planificarse en el nodo correspondiente.

También puede configurar tolerancias similares a la siguiente información, que indica que el pod se puede programar en un nodo cuando el nodo tiene la mancha key1:

tolerations:
- key: "key1"
  operator: "Exists"
  effect: "NoSchedule"