Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo se describe cómo usar intolerancias de nodo en un clúster de Azure Kubernetes Service (AKS).
Información general
El mecanismo de programación de AKS es responsable de colocar pods en nodos y se basa en el programador de Kubernetes ascendente, kube-scheduler. Puede restringir un pod para que se ejecute en nodos concretos adjuntando los pods a un conjunto de nodos mediante la afinidad de nodo o instruyendo al nodo para rechazar un conjunto de pods mediante intolerancias de nodo, que interactúan con el programador de AKS.
Las intolerancias de nodo funcionan marcando un nodo para que el programador evite colocar determinados pods en los nodos marcados. Puede colocar tolerancias en un pod para permitir que el programador programe ese pod en un nodo con una intolerancia coincidente. Las intolerancias y tolerancias funcionan juntos para ayudarle a controlar cómo el programador coloca los pods en los nodos. Para obtener más información, consulte ejemplos de casos de uso de intolerancias y tolerancias.
Las intolerancias son pares clave-valor con un efecto. Hay tres valores para el campo de efecto cuando se usan intolerancias de nodo: NoExecute, NoSchedule y PreferNoSchedule.
-
NoExecute: los pods que ya se ejecutan en el nodo se expulsan inmediatamente si no tienen tolerancia coincidente. Si un pod tiene una tolerancia coincidente, podría expulsarse si se especificatolerationSeconds. -
NoSchedule: solo los pods con una tolerancia coincidente se colocan en este nodo. Los pods existentes no se expulsan. -
PreferNoSchedule: el programador evita colocar los pods que no tengan tolerancia coincidente.
Opciones de intolerancia de nodo
Hay dos tipos de intolerancias de nodo que se pueden aplicar a los nodos de AKS: intolerancias de nodo y intolerancias de inicialización de nodo.
- Las intolerancias de nodo están diseñadas para permanecer permanentemente en el nodo para programar pods con afinidad de nodo. Los valores de las intolerancias de nodo solo se pueden agregar, actualizar o quitar completamente mediante la API de AKS.
- Las intolerancias de inicialización de nodo se colocan en el nodo en tiempo de arranque y están diseñados para usarse temporalmente, como en escenarios en los que es posible que necesite tiempo adicional para configurar los nodos. Puede quitar la taint de inicialización del nodo mediante la API de Kubernetes aunque estas no se garantizan durante el ciclo de vida del nodo. Aparecerán en las nuevas réplicas del nodo cuando se escala verticalmente o en todas las réplicas cuando se actualiza un nodo. Si desea quitar completamente las intolerancias de inicialización, puede quitarlos mediante la API de AKS después de destentar los nodos mediante la API de Kubernetes. Una vez quitados las intolerancias de inicialización de la especificación de clúster mediante la API de AKS, los nodos recién creados no se presentan con esas intolerancias de inicialización. Si la intolerancia de inicialización sigue presente en los nodos existentes, puede quitarlo permanentemente realizando una operación de actualización de imágenes de nodo.
Nota:
Las etiquetas y las intolerancias de nodo aplicadas mediante la API del grupo de nodos de AKS no se pueden modificar desde la API de Kubernetes y viceversa. No se permiten modificaciones en las intolerancias del sistema.
Esto no se aplica a las intolerancias de inicialización de nodo.
Usar intolerancias de nodo
Requisitos previos
Este artículo supone que ya tiene un clúster de AKS. Si necesita un clúster de AKS, puede crear uno mediante la CLI de Azure, Azure PowerShell o Azure Portal.
Crear un grupo de nodos con un valor de intolerancia de nodo
Cree un grupo de nodos con una intolerancia mediante el comando
az aks nodepool addy use el parámetro--node-taintspara especificarsku=gpu:NoSchedulepara la intolerancia.az aks nodepool add \ --resource-group $RESOURCE_GROUP_NAME \ --cluster-name $CLUSTER_NAME \ --name $NODE_POOL_NAME \ --node-count 1 \ --node-taints "sku=gpu:NoSchedule" \ --no-wait
Actualizar un grupo de nodos para agregar un valor de intolerancia de nodo
Actualice un grupo de nodos para agregar un valor de intolerancia de nodo mediante el comando
az aks nodepool updatey use el parámetro--node-taintspara especificarsku=gpu:NoSchedulepara el valor de intolerancia.az aks nodepool update \ --resource-group $RESOURCE_GROUP_NAME \ --cluster-name $CLUSTER_NAME \ --name $NODE_POOL_NAME \ --node-taints "sku=gpu:NoSchedule" \ --no-wait
Usar la intolerancia de inicialización de nodo (versión preliminar)
Importante
Las características en versión preliminar de AKS están disponibles como opción de participación y autoservicio. Las versiones preliminares se proporcionan "tal cual" y "como están disponibles", y están excluidas de los Acuerdos de nivel de servicio y la garantía limitada. Las versiones preliminares de AKS reciben cobertura parcial del soporte al cliente en la medida de lo posible. Por lo tanto, estas características no están diseñadas para su uso en producción. Para más información, consulte los siguientes artículos de soporte:
Requisitos previos y limitaciones
- Necesita la versión de la CLI de Azure
3.0.0b3o posterior instalada y configurada. Ejecuteaz --versionpara encontrar la versión. Si necesita instalarla o actualizarla, vea Instalación de la CLI de Azure. - Solo puede aplicar intolerancias de inicialización mediante la creación o actualización del clúster al usar la API de AKS. Si utiliza una plantilla ARM que dará lugar a una operación a nivel de clúster administrado, puede especificar marcas de inicialización de nodos durante la creación y actualización del grupo de nodos. Las operaciones a nivel de pool de agentes se bloquean cuando
NodeInitializationTaintsse encuentran en el cuerpo de la solicitud. - No se pueden aplicar intolerancias de inicialización a grupos de nodos de Windows mediante la CLI de Azure.
Obtención de las credenciales del clúster
Obtenga las credenciales del clúster de AKS mediante el comando
az aks get-credentials.az aks get-credentials --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME
Instalación de la extensión de la CLI de Azure aks-preview
Registre o actualice la extensión aks-preview mediante el comando
az extension addoaz extension update.# Register the aks-preview extension az extension add --name aks-preview # Update the aks-preview extension az extension update --name aks-preview
Registro de la marca de característica NodeInitializationTaintsPreview
Registre la marca de características de
NodeInitializationTaintsPreviewmediante el comandoaz feature register.az feature register --namespace "Microsoft.ContainerService" --name "NodeInitializationTaintsPreview"Tarda unos minutos en que el estado muestre Registrado.
Comprobar el estado del registro mediante el comando
az feature show.az feature show --namespace "Microsoft.ContainerService" --name "NodeInitializationTaintsPreview"Cuando aparezca el estado Registrado, actualice el registro del proveedor de recursos Microsoft.ContainerService mediante el comando
az provider register.az provider register --namespace Microsoft.ContainerService
Creación de un clúster con una intolerancia de inicialización de nodo
Cree un clúster con una intolerancia de inicialización de nodo mediante el comando
az aks createy el parámetro--node-initialization-taintspara especificarsku=gpu:NoSchedulepara la intolerancia.Importante
Las intolerancias de inicialización de nodo que especifique se aplican a todos los grupos de nodos del clúster. Para aplicar la intolerancia de inicialización a un nodo específico, puede usar una plantilla de ARM en lugar de la CLI.
az aks create \ --resource-group $RESOURCE_GROUP_NAME \ --name $CLUSTER_NAME \ --node-count 1 \ --node-init-taints "sku=gpu:NoSchedule" \ --generate-ssh-keys
Actualizar un clúster para agregar una intolerancia de inicialización de nodo
Actualice un clúster para agregar una intolerancia de inicialización de nodo mediante el comando
az aks updatey el parámetro--node-initialization-taintspara especificarsku=gpu:NoSchedulepara la intolerancia.Importante
Al actualizar un clúster con una intolerancia de inicialización de nodo, las intolerancias se aplican a todos los grupos de nodos del clúster. Si los nodos usan VMSS, puede ver las actualizaciones de las taints de inicialización en el nodo después de que se actualice el modelo VMSS de este (por ejemplo, tras una operación de actualización de la versión de la imagen del nodo). Las taints de inicialización no aparecerán en los nodos hasta que se produzca una operación que desencadene una actualización del modelo de VMSS.
az aks update \ --resource-group $RESOURCE_GROUP_NAME \ --name $CLUSTER_NAME \ --node-init-taints "sku=gpu:NoSchedule"
Compruebe el estado del grupo de nodos
Después de aplicar la intolerancia del nodo o la intolerancia de inicialización, compruebe el estado del grupo de nodos mediante el comando
az aks nodepool list.az aks nodepool list --resource-group $RESOURCE_GROUP_NAME --cluster-name $CLUSTER_NAMESi han aplicado intolerancias de nodo, la siguiente salida de ejemplo muestra que el grupo de nodos de
<node-pool-name>esCreatingnodos con elnodeTaintsespecificado:[ { ... "count": 1, ... "name": "<node-pool-name>", "orchestratorVersion": "1.15.7", ... "provisioningState": "Creating", ... "nodeTaints": [ "sku=gpu:NoSchedule" ], ... }, ... ]Si aplicó intolerancias de inicialización de nodo, la siguiente salida de ejemplo muestra que el grupo de nodos de
<node-pool-name>esCreatingnodos con elnodeInitializationTaintsespecificado:[ { ... "count": 1, ... "name": "<node-pool-name>", "orchestratorVersion": "1.15.7", ... "provisioningState": "Creating", ... "nodeInitializationTaints": [ "sku=gpu:NoSchedule" ], ... }, ... ]
Compruebe que la intolerancia está establecido en el nodo
Compruebe las intolerancias de nodo y las intolerancias de inicialización de nodos en la configuración del nodo mediante el comando
kubectl describe node.kubectl describe node $NODE_NAMESi ha aplicado intolerancias de nodo, la siguiente salida de ejemplo muestra que el grupo de nodos de
<node-pool-name>tiene elTaintsespecificado:[ ... Name: <node-pool-name> ... Taints: sku=gpu:NoSchedule ... ], ... ... ]
Importante
Si los nodos usan VMSS, las taints de inicialización de nodos no estarán visibles en los nodos reales del clúster hasta que se produzca una operación que desencadene la actualización del modelo de VMSS (por ejemplo, actualización de la versión de Kubernetes o actualización de la versión de la imagen de nodo).
Quitar intolerancias de nodo
Quitar un valor de intolerancia de nodo específico
Quite las intolerancias de nodo mediante el comando
az aks nodepool update. El siguiente comando de ejemplo elimina la intolerancia del nodo"sku=gpu:NoSchedule"del grupo de nodos.az aks nodepool update \ --cluster-name $CLUSTER_NAME \ --name $NODE_POOL_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --node-taints "sku=gpu:NoSchedule"
Eliminar de todas las intolerancias de nodo
Quite todas las intolerancias de nodo de un grupo de nodos mediante el comando
az aks nodepool update. El siguiente comando de ejemplo quita todas las intolerancias de nodo del grupo de nodos.az aks nodepool update \ --cluster-name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --name $NODE_POOL_NAME \ --node-taints ""
Quitar intolerancias de inicialización de nodo
Tiene las siguientes opciones para quitar los intolerancias de inicialización de nodos del nodo:
- Quitar las intolerancias de inicialización de nodos temporalmente mediante la API de Kubernetes. Si las quita de esta manera, las intolerancias vuelven a aparecer después de que se produzca la actualización o el escalado de nodos. Los nuevos nodos todavía tienen la intolerancia de inicialización del nodo después del escalado. Las intolerancias de inicialización de nodos aparecen en todos los nodos después de actualizar.
- Quitar las intolerancias de inicialización de nodos de forma permanente al destentar el nodo mediante la API de Kubernetes y, a continuación, quitar la intolerancia mediante la API de AKS. Una vez que las intolerancias de inicialización se quitan de la especificación de clúster mediante la API de AKS, los nodos recién creados después de que las operaciones de imagen nueva ya no tengan intolerancias de inicialización.
Al quitar todas las apariciones de intolerancia de inicialización de las réplicas del grupo de nodos, la intolerancia de inicialización existente podría volver a aparecer después de una actualización con las nuevas intolerancias de inicialización.
Quitar las intolerancias de inicialización de nodos temporalmente
Quite las intolerancias de inicialización de nodo temporalmente mediante el comando
kubectl taint nodes.Este comando quita la intolerancia solo del nodo especificado. Si desea quitar la intolerancia de todos los nodos del grupo de nodos, debe ejecutar el comando para cada nodo del que desea quitar la intolerancia.
kubectl taint nodes $NODE_POOL_NAME sku=gpu:NoSchedule-Una vez quitadas, las intolerancias de inicialización de nodo vuelven a aparecer después de que se produzca la actualización o el escalado de nodos.
Quitar las intolerancias de inicialización de nodos de forma permanente
Siga los pasos descritos en quitar las intolerancias de inicialización de nodos temporalmente para quitar la intolerancia de inicialización de nodos mediante la API de Kubernetes.
Quite la intolerancia del nodo mediante la API de AKS mediante el comando
az aks update. Este comando quita la intolerancia de inicialización del nodo de todos los nodos del clúster.az aks update \ --resource-group $RESOURCE_GROUP_NAME \ --name $CLUSTER_NAME \ --node-init-taints ""
Compruebe que la intolerancia se ha quitado del nodo
Compruebe las intolerancias de nodo y las intolerancias de inicialización de nodos en la configuración del nodo mediante el comando
kubectl describe node.kubectl describe node $NODE_NAMESi ha quitado una intolerancia de nodo, la siguiente salida de ejemplo muestra que el grupo de nodos de
<node-pool-name>no tiene la intolerancia quitada enTaints:[ ... Name: <node-pool-name> ... Taints: ... ], ... ... ]
Pasos siguientes
- Obtenga más información sobre los casos de uso de ejemplo para intolerancias y tolerancias.
- Obtenga más información sobre los procedimientos recomendados para las funciones avanzadas del programador de AKS.
- Más información sobre las etiquetas de Kubernetes en la documentación de etiquetas de Kubernetes.