En esta página, se proporciona una descripción general de los taints de nodo en Google Kubernetes Engine (GKE). 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 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 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. 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.
Ten en cuenta que algunos pods del sistema (por ejemplo, kube-proxy y fluentd) toleran todos los taints NoExecute
y NoSchedule
, y no serán desalojados.
Antes de comenzar
Antes de comenzar, asegúrate de haber realizado las siguientes tareas:
- Asegúrate de que habilitaste la API de Google Kubernetes Engine. Habilitar la API de Google Kubernetes Engine
- Asegúrate de que instalaste el SDK de Cloud.
Establece la configuración de gcloud
predeterminada mediante uno de los siguientes métodos:
- Usa
gcloud init
si deseas ver una explicación sobre cómo configurar parámetros predeterminados. - Usa
gcloud config
para establecer el ID, la zona y la región del proyecto de manera individual.
Usa gcloud init
Si recibes el error One of [--zone, --region] must be supplied: Please specify
location
, completa esta sección.
-
Ejecuta
gcloud init
y sigue las instrucciones:gcloud init
Si usas SSH en un servidor remoto, usa la marca
--console-only
para evitar que el comando abra un navegador:gcloud init --console-only
- Sigue las instrucciones a fin de autorizar a
gcloud
para que use tu cuenta de Google Cloud. - Crea una configuración nueva o selecciona una existente.
- Elige un proyecto de Google Cloud.
- Elige una zona predeterminada de Compute Engine.
Usa gcloud config
- Establece tu ID del proyecto predeterminado:
gcloud config set project PROJECT_ID
- Si trabajas con clústeres zonales, establece tu zona de procesamiento predeterminada:
gcloud config set compute/zone COMPUTE_ZONE
- Si trabajas con clústeres regionales, establece 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
Crea 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 container clusters create cluster-name \
--node-taints key=value:effect
Reemplaza lo siguiente:
- cluster-name es el nombre del clúster que se creará.
- effect es
PreferNoSchedule
,NoSchedule
oNoExecute
. - key y value forman un par clave-valor asociado con effect.
Por ejemplo, con el siguiente comando, se aplica un taint que tiene la clave dedicated
, el valor experimental
y el efecto 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 al menú de Google Kubernetes Engine en Cloud Console.
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'
}
]
...
}
...
}
}
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 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 la herramienta de línea de comandos gcloud
, Cloud Console 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 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
oNoExecute
. - key y value forman un par clave-valor asociado con effect.
Por ejemplo, con el siguiente comando, se aplica un taint que tiene la clave dedicated
, el valor experimental
y el efecto NoSchedule
:
gcloud container node-pools create example-pool --cluster example-cluster \
--node-taints dedicated=experimental:NoSchedule
Este comando aplica un taint que tiene la clave special
, el valor gpu
y el 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 al menú de Google Kubernetes Engine en Cloud Console.
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 con 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.
Inspeccionar los taints de un nodo
Para ver los taints de un nodo, puedes usar 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 la descripción del nodo que se muestra, busca el campo
Taints
:Taints: key=value:effect
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 foo
:
kubectl taint nodes foo dedicated-
Ventajas de usar la función de taints de nodos de GKE
Usar la función de taints de nodos de GKE con clústeres y grupos de nodos en lugar de configurar taints de forma manual mediante 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?
- 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
.