Controle la programación con taints y tolerancias

En esta página, se proporciona una descripción general de taints y tolerancias en GKE on VMware. Cuando programas las cargas de trabajo para que se implementen en tu clúster, los taints de nodo te ayudan a controlar en qué nodos se les permite ejecutar.

Descripción general

Cuando envías una carga de trabajo para que se ejecute en un clúster, el scheduler determina dónde colocar los Pods asociados con la carga de trabajo. El programador tiene la libertad de colocar un Pod en cualquier nodo que satisfaga los requisitos de recursos personalizados, memoria y CPU del Pod.

Si tu clúster ejecuta una variedad de cargas de trabajo, es posible que desees ejercer cierto control sobre qué cargas de trabajo se pueden ejecutar en un grupo particular de nodos.

Un taint de nodo te permite marcar un nodo a fin de que el programador evite o impida su uso para ciertos pods. Una característica complementaria, las tolerancias, te permite designar pods que se pueden usar en nodos “tainted”.

Los taints y las tolerancias trabajan en conjunto para garantizar que los Pods no estén programados en nodos inapropiados.

Los taints son pares clave-valor asociados con un efecto. En la siguiente tabla, se enumeran los efectos disponibles:

Efecto Descripción
NoSchedule Los pods que no toleran este taint no están programados en el nodo. Los Pods existentes no se expulsan del nodo.
PreferNoSchedule Kubernetes evita la programación de pods que no toleran este taint en el nodo.
NoExecute El Pod se desaloja del nodo si ya está en ejecución en este y no está programado en el nodo si aún no está en ejecución en él.

Ventajas de configurar taints de nodo en GKE en VMware

Si bien puedes establecer taints de nodo con el comando kubectl taint, usar gkectl o la consola de Google Cloud para establecer un taint de nodo tiene las siguientes ventajas sobre kubectl:

  • Los taints se conservan cuando un nodo se reinicia o se reemplaza.
  • Los taints se crean automáticamente cuando se agrega un nodo a un grupo de nodos.
  • Cuando se usa gkectl para agregar taints, estos se crean automáticamente durante el ajuste de escala automático del clúster. (por el momento, no está disponible el ajuste de escala automático para los grupos de nodos creados en la consola de Google Cloud).

Configurar taints de nodo

Puedes configurar taints de nodo en un grupo de nodos cuando creas un clúster de usuario o después de crearlo. En esta sección, se muestra cómo agregar taints a los clústeres que ya se crearon, pero el proceso es similar cuando se crean clústeres nuevos.

Puedes agregar un grupo de nodos nuevo y establecer un taint o puedes actualizar un grupo de nodos existente y establecer un taint. Antes de agregar otro grupo de nodos, verifica que haya suficientes direcciones IP disponibles en el clúster.

Si creaste el clúster en la consola de Google Cloud, puedes usar la consola de Google Cloud para agregar o actualizar un grupo de nodos.

Configurar taints en un nuevo grupo de nodos

Console

  1. En la consola, ve a la página de descripción general de los clústeres de Google Kubernetes Engine.

    Ir a los clústeres de GKE

  2. Selecciona el proyecto de Google Cloud en el que se encuentra el clúster de usuario.

  3. En la lista de clústeres, haz clic en el nombre del clúster y, luego, en Ver detalles en el panel Detalles.

  4. Haz clic en Agregar grupo de nodos.

  5. Configura el grupo de nodos:

    1. Ingresa el nombre del grupo de nodos.
    2. Es la cantidad de vCPUs para cada nodo del grupo (mínimo 4 por trabajador del clúster de usuario).
    3. Ingresa el tamaño de memoria en mebibytes (MiB) para cada nodo en el grupo (mínimo 8,192 MiB por nodo trabajador del clúster de usuario y debe ser un múltiplo de 4).
    4. En el campo Réplicas, ingresa la cantidad de nodos en el grupo (mínimo 3).
    5. Selecciona el tipo de imagen de SO: Ubuntu Containerd o COS.

    6. Ingresa laTamaño de disco de arranque en gibibytes (GiB) (el valor predeterminado es de 40 GiB).

  6. En la sección Metadatos del grupo de nodos (opcional), haz clic en + Agregar taint. Ingresa la Clave, el Valor y el Efecto para el taint. Repite la acción según sea necesario.

  7. Opcionalmente, haz clic en + Agregar etiquetas de Kubernetes. Ingresa la Clave y el Valor de la etiqueta. Repite la acción según sea necesario.

  8. Haz clic en Crear.

  9. La consola de Google Cloud muestra el Estado del clúster: cambios en progreso. Haz clic en Mostrar detalles para ver la condición de estado del recurso y los mensajes de estado.

Línea de comandos

  1. En el archivo de configuración del clúster de usuario, completa la sección nodePools.

    Debes especificar los siguientes campos:

    • nodePools.[i].name
    • nodePools[i].cpus
    • nodePools.[i].memoryMB
    • nodePools.[i].replicas

    Los siguientes campos son opcionales: Si no incluyes nodePools[i].bootDiskSizeGB o nodePools[i].osImageType, se usan los valores predeterminados.

  2. Completa la sección nodePools[i].taints. Por ejemplo:

    nodePools:
    - name: "my-node-pool"
      taints:
      - key: "staging"
        value: "true"
        effect: "NoSchedule"
    
  3. De manera opcional, completa las siguientes secciones:

    • nodePools[i].labels
    • nodePools[i].bootDiskSizeGB
    • nodePools[i].osImageType
    • nodePools[i].vsphere.datastore
    • nodePools[i].vsphere.tags
  4. Ejecuta el siguiente comando:

    gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
    

    Reemplaza lo siguiente:

    • [ADMIN_CLUSTER_KUBECONFIG] es la ruta de acceso del archivo kubeconfig del clúster de administrador.

    • [USER_CLUSTER_CONFIG] por la ruta de acceso del archivo de configuración del clúster de usuario.

Configurar taints en un grupo de nodos existente

Console

  1. En la consola, ve a la página de descripción general de los clústeres de Google Kubernetes Engine.

    Ir a los clústeres de GKE

  2. Selecciona el proyecto de Google Cloud en el que se encuentra el clúster de usuario.

  3. En la lista de clústeres, haz clic en el nombre del clúster y, luego, en Ver detalles en el panel Detalles.

  4. Haz clic en la pestaña Nodos.

  5. Haz clic en el nombre del grupo de nodos que deseas modificar.

  6. Haz clic en Editar junto a la sección Metadatos del grupo de nodos (opcional) y, luego, en + Agregar taint. Ingresa la Clave, el Valor y el Efecto para el taint. Repite la acción según sea necesario.

  7. Haz clic en Listo.

  8. Haz clic en para volver a la página anterior.

  9. En la consola de Google Cloud, se muestra el Estado del clúster: cambios en progreso. Haz clic en Mostrar detalles para ver la condición de estado del recurso y los mensajes de estado.

Línea de comandos

  1. En el archivo de configuración del clúster de usuario, ve a la sección nodePools del grupo de nodos que quieres actualizar.

  2. Completa el nodePools[i].taints. Por ejemplo:

    nodePools:
    - name: "my-node-pool"
      taints:
      - key: "staging"
        value: "true"
        effect: "NoSchedule"
    
  3. Ejecuta el siguiente comando:

    gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
    

    Reemplaza lo siguiente:

    • [ADMIN_CLUSTER_KUBECONFIG] es la ruta de acceso del archivo kubeconfig del clúster de administrador.

    • [USER_CLUSTER_CONFIG] por la ruta de acceso del archivo de configuración del clúster de usuario.

Configura Pods para tolerar un taint

Puedes configurar los Pods para tolerar un taint si incluyes el campo tolerations en la especificación de los Pods. En el siguiente ejemplo, el Pod se puede programar en un nodo que tenga el taint dedicated=experimental:NoSchedule:

tolerations:
- key: dedicated
  operator: Equal
  value: experimental
  effect: NoSchedule

Para obtener ejemplos adicionales, consulta Taints y tolerancias.