En esta página, se proporciona una descripción general de los taints de nodo en Google Kubernetes Engine (GKE). Los taints de nodo te ayudan a especificar los nodos en los que se deben ejecutar las cargas de trabajo.
Los clústeres de Autopilot solo admiten el uso de taints de nodo para la separación de cargas de trabajo. Si deseas obtener instrucciones, consulta Configura la separación de cargas de trabajo en GKE.
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 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 los taints de nodo en GKE
Puedes agregar taints de nodo a clústeres y nodos en GKE o mediante el comando kubectl taint
. Especificar taints de nodo en GKE tiene varias ventajas en comparación con kubectl
:
- Los taints se conservan cuando un nodo se reinicia o se reemplaza.
- Los taints se crean automáticamente cuando se agrega a un grupo de nodos o clúster.
- Los taints se crean automáticamente durante el ajuste de escala automático del clúster.
Antes de comenzar
Antes de comenzar, asegúrate de haber realizado las siguientes tareas:
- Habilita la API de Google Kubernetes Engine. Habilitar la API de Google Kubernetes Engine
- Si deseas usar Google Cloud CLI para esta tarea, instala y, luego, inicializa gcloud CLI. Si ya instalaste gcloud CLI, ejecuta
gcloud components update
para obtener la versión más reciente.
Crea un clúster con taints de nodo
Cuando creas un clúster en GKE, puedes asignar taints de nodo al clúster. Esto asigna los taints a todos los nodos creados con el clúster.
Si creas un clúster estándar con taints de nodo que tienen el efecto NoSchedule
o NoExecute
, GKE no puede programar algunos componentes administrados de GKE, como kube-dns
o metrics-server
en el grupo de nodos predeterminado que GKE crea cuando creas el clúster. GKE no puede programar estos componentes porque no tienen las tolerancias correspondientes para tus taints de nodo.
Debes agregar un grupo de nodos nuevo que cumpla con una de las siguientes condiciones:
- No hay taints
- Un taint que tenga el efecto
PreferNoSchedule
- El taint
components.gke.io/gke-managed-components=true:NoSchedule
Cualquiera de estas condiciones permite que GKE programe los componentes administrados de GKE en el grupo de nodos nuevo.
Para obtener instrucciones, consulta Aísla las cargas de trabajo en nodos dedicados.
gcloud
Para crear un clúster con taints de nodo, ejecuta el siguiente comando:
gcloud container clusters create CLUSTER_NAME \
--node-taints KEY=VALUE:EFFECT
Reemplaza lo siguiente:
CLUSTER_NAME
es el nombre del clúster nuevo.EFFECT
: es uno de los siguientes valores de efectos:PreferNoSchedule
,NoSchedule
oNoExecute
.KEY=VALUE
: es un par clave-valor asociado conEFFECT
.
Por ejemplo, con el siguiente comando, se aplica un taint que tiene un par clave-valor de dedicated=experimental
con un efecto de PreferNoSchedule
:
gcloud container clusters create example-cluster \
--node-taints dedicated=experimental:PreferNoSchedule
Console
Para crear un clúster con taints de nodo, sigue estos pasos:
Ve a la página de Google Kubernetes Engine en la consola de Google Cloud.
Haz clic en add_box Crear.
Configura tu clúster como desees.
En el panel de navegación, en Grupos de nodos, expande el grupo de nodos que deseas modificar y, luego, haz clic en Metadatos.
En la sección Taints de nodo, haz clic en add Agregar taint.
En la lista desplegable Efecto, selecciona el efecto deseado.
Ingresa el par clave-valor deseado en los campos Clave y Valor.
Haga clic en Crear.
API
Cuando uses la API para crear un clúster, incluye el campo nodeTaints
en nodeConfig
. Por ejemplo:
POST https://container.googleapis.com/v1/projects/PROJECT_ID/zones/COMPUTE_ZONE/clusters
{
'cluster': {
'name': 'example-cluster',
'nodeConfig': {
'nodeTaints': [
{
'key': 'special',
'Value': 'gpu',
'effect': 'PreferNoSchedule'
}
]
...
}
...
}
}
Crea 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 de 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 Google Cloud CLI, la consola de Google Cloud 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
Reemplaza lo siguiente:
POOL_NAME
: el nombre del grupo de nodos que se creará.CLUSTER_NAME
: es el nombre del clúster en el que se creó el grupo de nodos.EFFECT
: es uno de los siguientes valores de efectos:PreferNoSchedule
,NoSchedule
oNoExecute
.KEY=VALUE
: es un par clave-valor asociado conEFFECT
.
Por ejemplo, el siguiente comando crea un grupo de nodos en un clúster existente y aplica un taint que tiene un par clave-valor de dedicated=experimental
con un efecto NoSchedule
:
gcloud container node-pools create example-pool --cluster example-cluster \
--node-taints dedicated=experimental:NoSchedule
Este comando crea un grupo de nodos y aplica un taint que tiene un par clave-valor de special=gpu
con un 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:
Ve a la página de Google Kubernetes Engine en la consola de Google Cloud.
En la lista de clústeres, haz clic en el nombre del clúster que deseas modificar.
En la página de Detalles del clúster, haz clic en add_box Agregar grupo de nodos.
En el panel de navegación, haz clic en Metadatos.
En Taints de nodo, haz clic en add Agregar taint.
Selecciona el efecto que desees en la lista desplegable Efecto.
Ingresa el par clave-valor deseado en los campos Clave y Valor.
Haga clic en Crear.
API
Cuando uses la API para crear un grupo de nodos, incluye el campo nodeTaints
en nodeConfig
. Por ejemplo:
POST https://container.googleapis.com/v1/projects/PROJECT_ID/zones/COMPUTE_ZONE/clusters/CLUSTER_ID/nodePools
{
'nodePool': {
'name': 'example-pool',
'nodeConfig': {
'nodeTaints': [
{
'key': 'dedicated',
'Value': 'experimental',
'effect': 'NoSchedule'
}
]
...
}
...
}
}
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. Aquí hay una parte de una especificación de pod.
Este Pod se puede programar en un nodo que tenga el taint dedicated=experimental:NoSchedule
:
tolerations:
- key: dedicated
operator: Equal
value: experimental
effect: NoSchedule
Agrega un taint a un nodo existente
Puedes agregar taints a un nodo existente mediante el comando kubectl taint
. No recomendamos que agregues un taint a las VMs Spot mediante kubectl
porque los nodos nuevos que GKE agregue al grupo de nodos no hereda el taint.
kubectl taint nodes NODE_NAME KEY=VALUE:EFFECT
Por ejemplo, con el siguiente comando, se aplica un taint que tiene un par clave-valor de dedicated=experimental
con un efecto NoSchedule
en el nodo mynode
:
kubectl taint nodes mynode dedicated=experimental:NoSchedule
También puedes agregar taints a los nodos que tienen una etiqueta específica mediante el selector -l
junto con la etiqueta y el valor especificados:
kubectl taint nodes -l LABEL=LABEL_VALUE KEY=VALUE:EFFECT
Por ejemplo, el siguiente comando agrega un taint con la clave dedicated-pool
a los nodos de GKE en el grupo de nodos my_pool
:
kubectl taint nodes -l cloud.google.com/gke-nodepool=my_pool dedicated-pool=my_pool:NoSchedule
Inspecciona taints en busca de un nodo
Para ver los taints de un nodo, usa la herramienta de línea de comandos de kubectl
.
Ejecuta el siguiente comando para obtener una lista de todos los nodos:
kubectl get nodes
Ejecuta el siguiente comando para inspeccionar un nodo:
kubectl describe node NODE_NAME
En el resultado que se muestra, busca el campo
Taints
. El resultado es similar al siguiente:Taints: dedicated-pool=mypool:NoSchedule
Quita 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 todos los taints con la clave dedicated
del nodo mynode
:
kubectl taint nodes mynode dedicated-
Quita todos los taints de un grupo de nodos
Para quitar todos los taints de un grupo de nodos, ejecuta el siguiente comando:
gcloud beta container node-pools update POOL_NAME \
--node-taints="" \
--cluster=CLUSTER_NAME
Reemplaza lo siguiente:
POOL_NAME
: el nombre del grupo de nodos que se cambiaráCLUSTER_NAME
: el nombre del clúster en el que se creó el grupo de nodos.
¿Qué sigue?
- Obtén más información acerca de los grupos de nodos.
- Lee la documentación de Kubernetes para los taints y tolerancias.
- Lee la documentación de
kubectl taint
.