Controlar la programación con taints de nodo

Esta página proporciona una descripción general de los taints de nodo en Google Kubernetes Engine. Cuando programas las cargas de trabajo para ser implementadas 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 programador determina dónde colocar los pods asociados con la carga de trabajo. El programador es libre de colocar un pod en cualquier nodo que satisfaga los requisitos de recursos personalizados, de memoria y de 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 taint de nodo son pares clave-valor asociados con un efecto. Los efectos disponibles se muestran a continuación:

  • NoSchedule: Los pods que no toleran este taint no están programados en el nodo.
  • PreferNoSchedule: Kubernetes evita programar pods que no toleran este taint en el nodo.
  • NoExecute: El pod se desaloja del nodo si ya está ejecutado en este nodo, y no está programado en el nodo si aún no está ejecutado en este nodo.

Antes de comenzar

Sigue estos pasos a fin de prepararte para esta tarea:

  • Asegúrate de habilitar la API de Google Kubernetes Engine.
  • Habilitar la API de Google Kubernetes Engine
  • Asegúrate de instalar el SDK de Cloud.
  • Configura el ID del proyecto predeterminado:
    gcloud config set project [PROJECT_ID]
  • Si trabajas con clústeres zonales, configura tu zona de procesamiento predeterminada:
    gcloud config set compute/zone [COMPUTE_ZONE]
  • Si trabajas con clústeres regionales, configura tu región de procesamiento predeterminada:
    gcloud config set compute/region [COMPUTE_REGION]
  • Actualiza gcloud a la versión más reciente:
    gcloud components update

Cómo crear un clúster con taints de nodo

Cuando creas un clúster, puedes asignar taints de nodo al clúster. Esto asigna los taints a todos los nodos creados con el clúster.

gcloud

Para crear un clúster con taints de nodo, ejecuta el siguiente comando:

gcloud beta container clusters create [CLUSTER_NAME] --node-taints [KEY]=[VALUE]:[EFFECT]

Donde:

  • [CLUSTER_NAME] es el nombre del clúster que se creará.
  • [EFFECT] es PreferNoSchedule, NoSchedule o NoExecute.
  • [KEY] y [VALUE] forman un par clave-valor asociado con el [EFFECT].

Por ejemplo, este comando aplica un taint que tiene clave dedicated, valor experimental y efecto PreferNoSchedule:

gcloud beta container clusters create example-cluster --node-taints dedicated=experimental:PreferNoSchedule

Console

Para crear un clúster con taints de nodo, realiza los siguientes pasos:

  1. Visita el menú de Google Kubernetes Engine en la GCP Console.

    Visita el menú de Google Kubernetes Engine.

  2. Haz clic en Crear clúster.

  3. Configura tu clúster como desees. Luego, haz clic en Edición avanzada para el grupo de nodos que deseas modificar.

  4. En la sección Taints de nodo, haz clic en Agregar taint.

  5. Desde Efecto, selecciona el efecto deseado.

  6. Rellena la Clave y el Valor con el par clave-valor deseado.

  7. Agrega taints de nodo adicionales si lo deseas.

  8. Haz clic en Guardar para cerrar la superposición de Edición avanzada.

  9. Haz clic en Crear.

API

Cuando usas la API para crear un clúster, incluye el campo nodeTaints bajo nodeConfig. Por ejemplo:

POST https://container.googleapis.com/v1/projects/[PROJECT_ID]/zones/[ZONE]/clusters

{
  'cluster': {
    'name': 'example-cluster',
    'nodeConfig': {
      'nodeTaints': [
        {
          'key': 'special',
          'Value': 'gpu',
          'effect': 'PreferNoSchedule'
        }
      ]
      ...
    }
    ...
  }
}

Cómo crear un grupo de nodos con taints de nodo

Cuando aplicas un taint a un nodo, solo los pods que toleran el taint pueden ejecutarse en el nodo. En un clúster GKE, puedes aplicar un taint a un grupo de nodos, el cual aplica el taint a todos los nodos del grupo.

Para crear un grupo de nodos con taints de nodo, puedes usar la herramienta de línea de comandos de gcloud o la API de GKE.

gcloud

Para crear un grupo de nodos con taints de nodo, ejecuta el siguiente comando:

gcloud container node-pools create [POOL_NAME] --cluster [CLUSTER_NAME] \
--node-taints [KEY]=[VALUE]:[EFFECT]

Donde:

  • [POOL_NAME] es el nombre del grupo de nodos que se creará.
  • [CLUSTER_NAME] es el nombre del clúster en el que se crea el grupo de nodos.
  • [EFFECT] es PreferNoSchedule, NoSchedule o NoExecute.
  • [KEY] y [VALUE] forman un par clave-valor asociado con el [EFFECT].

Por ejemplo, este comando aplica un taint que tiene clave dedicated, valor experimental y efecto NoSchedule:

gcloud container node-pools create example-pool --cluster example-cluster \
--node-taints dedicated=experimental:NoSchedule

Este comando aplica una prueba que tiene clave special, valor gpu y efecto NoExecute:

gcloud container node-pools create example-pool-2 --cluster example-cluster \
--node-taints special=gpu:NoExecute

Console

Para crear un grupo de nodos con taints de nodo, realiza los siguientes pasos:

  1. Visita el menú de Google Kubernetes Engine en la GCP Console.

    Visita el menú de Google Kubernetes Engine.

  2. Haz clic en el botón Editar del clúster, el cual parece un lápiz.

  3. Desde los grupos de nodos, haz clic en Agregar grupo de nodos.

  4. En la sección Taints de nodo, haz clic en Agregar taint.

  5. Desde Efecto, selecciona el efecto deseado.

  6. Rellena la Clave y el Valor con el par clave-valor deseado.

  7. Agrega más taints de nodo si lo deseas.

  8. Haz clic en Guardar para salir de la superposición de modificación del grupo de nodos.

  9. Haz clic en Crear.

API

Cuando usas la API para crear un grupo de nodos, incluye el campo nodeTaints bajo nodeConfig. Por ejemplo:

POST https://container.googleapis.com/v1/projects/[PROJECT_ID]/zones/[ZONE]/clusters/[CLUSTER_ID]/nodePools

{
  'nodePool': {
    'name': 'example-pool',
    'nodeConfig': {
      'nodeTaints': [
        {
          'key': 'dedicated',
          'Value': 'experimental',
          'effect': 'NoSchedule'
        }
      ]
      ...
    }
    ...
  }
}

Cómo configurar pods para tolerar un taint

Puedes configurar los pods para tolerar un taint que incluya el campo de tolerations en la especificación de los pods. Aquí hay una parte de una especificación de pod.

Este pod puede programarse en un nodo que tenga el taint dedicated=experimental:NoSchedule:

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

Cómo agregar un taint a un nodo existente

Puedes agregar taints a un nodo existente usando el comando kubectl taint:

kubectl taint nodes [NODE_NAME] [KEY]=[VALUE]:[EFFECT]

Por ejemplo:

kubectl taint nodes node1 key=value:NoSchedule

También puedes agregar taints a los nodos con una etiqueta específica:

kubectl taint node -l myLabel=X dedicated=foo:PreferNoSchedule

Para obtener más información, consulta Taints y tolerancias en la documentación de Kubernetes.

Cómo inspeccionar los taints de un nodo

Para ver los taints de un nodo, puedes usar la herramienta de línea de comandos de kubectl.

Primero, para obtener una lista de todos los nodos de tu clúster, ejecuta el siguiente comando:

kubectl get nodes

Luego, para inspeccionar un nodo, ejecuta:

kubectl describe node [NODE_NAME]

En la descripción del nodo que se muestra, busca el campo Taints:

Taints: [KEY]=[VALUE]:[EFFECT]

Cómo quitar un taint de un nodo

Puedes usar kubectl taint para quitar taints. Puedes quitar taints por clave, clave-valor o clave-efecto.

Por ejemplo, el siguiente comando quita del nodo foo todos los taints con clave dedicated:

kubectl taint nodes foo dedicated-

Ventajas de usar taints de nodo

El uso de taints de nodo sobre la configuración de taints manualmente con kubectl tiene varias ventajas:

  • 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 o clúster.
  • Los taints se crean automáticamente durante el ajuste de escala automático del clúster.

¿Qué sigue?

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...