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
En la consola, ve a la página Descripción general de los clústeres de Google Kubernetes Engine.
Selecciona el proyecto en el que se encuentra el clúster de usuario. Google Cloud
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.
Haz clic en
Añadir grupo de nodos.Configura el grupo de nodos:
- Escribe el nombre del grupo de nodos.
- Introduce el número de vCPUs de cada nodo del grupo (un mínimo de 4 por cada trabajador del clúster de usuario).
- 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).
- En el campo Réplicas, introduce el número de nodos del pool (3 como mínimo).
Selecciona el tipo de imagen de SO: Ubuntu Containerd o COS.
Introduce el tamaño del disco de arranque en gibibytes (GiB). El valor predeterminado es 40 GiB.
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.
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.
Haz clic en Crear.
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
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
onodePools[i].osImageType
, se usarán los valores predeterminados.Rellena la sección
nodePools[i].taints
. Por ejemplo:nodePools: - name: "my-node-pool" taints: - key: "staging" value: "true" effect: "NoSchedule"
Si quieres, puedes rellenar las siguientes secciones:
nodePools[i].labels
nodePools[i].bootDiskSizeGB
nodePools[i].osImageType
nodePools[i].vsphere.datastore
nodePools[i].vsphere.tags
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
En la consola, ve a la página Descripción general de los clústeres de Google Kubernetes Engine.
Selecciona el proyecto en el que se encuentra el clúster de usuario. Google Cloud
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.
Haz clic en la pestaña Nodos.
Haz clic en el nombre del grupo de nodos que quieras modificar.
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.Haz clic en Listo.
Haz clic en
para volver a la página anterior.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
En el archivo de configuración del clúster de usuarios, ve a la sección
nodePools
del grupo de nodos que quieras actualizar.Rellena el campo
nodePools[i].taints
. Por ejemplo:nodePools: - name: "my-node-pool" taints: - key: "staging" value: "true" effect: "NoSchedule"
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.