Controlar la programación con intolerancias y tolerancias

En esta página se ofrece una descripción general de los taints y tolerations en Google Distributed Cloud. Cuando planificas el despliegue de cargas de trabajo en tu clúster, las intolerancias de nodos te permiten controlar aquellos nodos en los que se pueden ejecutar.

Informació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 a la carga de trabajo. El programador puede colocar un pod en cualquier nodo que cumpla los requisitos de CPU, memoria y recursos personalizados del pod.

Si el clúster ejecuta numerosas cargas de trabajo, es posible que quieras ejercer cierto control sobre aquellas que se pueden ejecutar en un grupo de nodos en particular.

Una intolerancia de nodos te permite marcar un nodo para que el programador evite o impida su uso para determinados pods. Una función complementaria, tolerancias, te permite designar pods que se pueden usar en nodos "contaminados".

Las intolerancias y las tolerancias trabajan juntas para asegurarse de que los pods no se programen en nodos inadecuados.

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

Efecto Descripción
NoSchedule Los pods que no toleran esta intolerancia no se programan en el nodo. Los pods que ya estén en el nodo no se expulsan.
PreferNoSchedule Kubernetes evita programar en el nodo los pods que no toleran esta intolerancia.
NoExecute El pod se expulsa del nodo si ya se está ejecutando en él y no se programa en el nodo si aún no se está ejecutando en él.

Ventajas de definir taints de nodos en Google Distributed Cloud

Aunque puedes definir etiquetas de nodos con el comando kubectl taint, usar gkectl o la consola de Google Cloud para definir una etiqueta de nodo tiene las siguientes ventajas con respecto a kubectl:

  • Las intolerancias se conservan cuando se reinicia o se sustituye un nodo.
  • Las marcas se crean automáticamente cuando se añade un nodo a un grupo de nodos.
  • Cuando se usa gkectl para añadir taints, estos se crean automáticamente durante el autoescalado del clúster. (El autoescalado de los grupos de nodos creados en la Google Cloud consola no está disponible actualmente).

Definir intolerancias de nodos

Puedes definir taints de nodos en un pool de nodos al crear un clúster de usuario o después de crear el clúster. En esta sección se muestra cómo añadir marcas a clústeres que ya se han creado, pero el proceso es similar al de crear clústeres.

Puedes añadir un nuevo grupo de nodos y definir un taint, o bien actualizar un grupo de nodos que ya tengas y definir un taint. Antes de añadir otro grupo de nodos, verifica que haya suficientes direcciones IP disponibles en el clúster.

Si has creado el clúster en la Google Cloud consola, puedes usarla para añadir o actualizar un grupo de nodos.Google Cloud

Definir tolerancias en un grupo de nodos nuevo

Consola

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

    Ir a clústeres de GKE

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

  3. En la lista de clústeres, haga clic en el nombre del clúster y, a continuación, en Ver detalles en el panel Detalles.

  4. Haz clic en Añadir grupo de nodos.

  5. Configura el grupo de nodos:

    1. Escribe el nombre del grupo de nodos.
    2. Introduce el número de vCPUs de cada nodo del grupo (un mínimo de 4 por cada trabajador del clúster de usuario).
    3. Introduce el tamaño de la memoria en mebibytes (MiB) de cada nodo del grupo (el mínimo es de 8192 MiB por nodo de trabajador del clúster de usuarios y debe ser un múltiplo de 4).
    4. En el campo Réplicas, introduce el número de nodos del pool (3 como mínimo).
    5. Selecciona el tipo de imagen de SO: Ubuntu Containerd o COS.

    6. Introduce el tamaño del disco de arranque en gibibytes (GiB). El valor predeterminado es 40 GiB.

  6. En la sección Metadatos del grupo de nodos (opcional), haz clic en + Añadir taint. Introduce la clave, el valor y el efecto del taint. Repite el proceso tantas veces como sea necesario.

  7. También puedes hacer clic en + Añadir etiquetas de Kubernetes. Introduce la clave y el valor de la etiqueta. Repite el proceso tantas veces como sea necesario.

  8. Haz clic en Crear.

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

Línea de comandos

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

    Debe especificar los siguientes campos:

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

    Los siguientes campos son opcionales. Si no incluye nodePools[i].bootDiskSizeGB o nodePools[i].osImageType, se usarán los valores predeterminados.

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

    nodePools:
    - name: "my-node-pool"
      taints:
      - key: "staging"
        value: "true"
        effect: "NoSchedule"
    
  3. Si quieres, puedes rellenar 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
    

    Haz los cambios siguientes:

    • [ADMIN_CLUSTER_KUBECONFIG] con la ruta del archivo kubeconfig de tu clúster de administrador.

    • [USER_CLUSTER_CONFIG] con la ruta del archivo de configuración de tu clúster de usuarios.

Definir tolerancias en un grupo de nodos

Consola

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

    Ir a clústeres de GKE

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

  3. En la lista de clústeres, haga clic en el nombre del clúster y, a continuación, 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 quieras modificar.

  6. Haz clic en Editar junto a la sección Metadatos del grupo de nodos (opcional) y, a continuación, en + Añadir taint. Introduce la clave, el valor y el efecto del taint. Repite el proceso tantas veces como sea necesario.

  7. Haz clic en Listo.

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

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

Línea de comandos

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

  2. Rellena el campo 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
    

    Haz los cambios siguientes:

    • [ADMIN_CLUSTER_KUBECONFIG] con la ruta del archivo kubeconfig de tu clúster de administrador.

    • [USER_CLUSTER_CONFIG] con la ruta del archivo de configuración de tu clúster de usuarios.

Configurar pods para tolerar un taint

Puedes configurar los pods para que toleren un taint incluyendo 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 ver más ejemplos, consulta Taints y tolerancias.