Administración de grupos de nodos del sistema en Azure Kubernetes Service (AKS)
Artículo
En Azure Kubernetes Service, los nodos de la misma configuración se agrupan en grupos de nodos. Los grupos de nodos contienen las máquinas virtuales subyacentes que ejecutan las aplicaciones. Los grupos de nodos del sistema y los grupos de nodos del usuario son dos modos de grupos de nodos diferentes para los clústeres de AKS. Los grupos de nodos del sistema tienen el propósito principal de hospedar los pods críticos del sistema, como CoreDNS y metrics-server. Los grupos de nodos de usuario tienen el propósito principal de hospedar los pods de aplicación. Sin embargo, se pueden programar pods de aplicación en grupos de nodos del sistema si quiere tener solo un grupo en el clúster de AKS. Cada clúster de AKS debe contener al menos un grupo de nodos del sistema con al menos dos nodos.
Importante
Si ejecuta un único grupo de nodos del sistema para el clúster de AKS en un entorno de producción, se recomienda usar al menos tres nodos para el grupo de nodos.
En este artículo se explica cómo administrar grupos de nodos del sistema en AKS. Para más información acerca de cómo usar varios grupos de nodos, consulta Uso de grupos de varios nodos.
Es preciso que esté instalada y configurada la versión 2.3.1 de la CLI de Azure, o cualquier otra posterior. Ejecute az --version para encontrar la versión. Si necesita instalarla o actualizarla, vea Instalación de la CLI de Azure.
Necesita la versión 7.5.0 o posterior de Azure PowerShell instalada y configurada. Ejecute Get-InstalledModule -Name Az para encontrar la versión. Si necesita instalarla o actualizarla, consulte el artículo sobre la instalación de Azure PowerShell.
Limitaciones
Se aplican las siguientes limitaciones cuando crea y administra clústeres de AKS que admiten grupos de nodos del sistema.
Se debe usar una versión de API de 2020-03-01 o superior para establecer un modo de grupo de nodos. Los clústeres creados con versiones de API anteriores a la 2020-03-01 solo contienen grupos de nodos de usuario, pero se pueden migrar para que contengan grupos de nodos del sistema si sigue las instrucciones del actualización del modo de grupo.
El nombre de un grupo de nodos solo puede contener caracteres alfanuméricos en minúsculas y debe comenzar con una letra minúscula. En el caso de los grupos de nodos de Linux, la longitud debe estar comprendida entre 1 y 12 caracteres. En el caso de los grupos de nodos de Windows, la longitud debe estar comprendida entre uno y seis caracteres.
El modo de un grupo de nodos es una propiedad obligatoria y se debe establecer explícitamente cuando se usan plantillas de Resource Manager o llamadas API directas.
Grupos de nodos del sistema y del usuario
Para un grupo de nodos del sistema, AKS asigna automáticamente la etiqueta kubernetes.azure.com/mode: system a sus nodos. Esto hace que AKS prefiera programar pods del sistema en grupos de nodos que contengan esta etiqueta. Esta etiqueta no impide que se programen pods de aplicación en grupos de nodos del sistema. Sin embargo, se recomienda aislar los pods del sistema críticos de los pods de aplicación para evitar que los pods de aplicación mal configurados o no autorizados eliminen accidentalmente los pods del sistema.
Puede aplicar este comportamiento mediante la creación de un grupo de nodos del sistema dedicado. Use el valor de taint CriticalAddonsOnly=true:NoSchedule para evitar que los pods de aplicación se programen en grupos de nodos del sistema.
Los grupos de nodos del sistema tienen las siguientes restricciones:
Se recomienda un mínimo de tres nodos y 8 vCPU o dos nodos de 16 vCPU como mínimo (por ejemplo, Standard_DS4_v2), especialmente para clústeres de gran tamaño (varias réplicas de pod de CoreDNS, 3-4+ complementos, etc.).
Los grupos de nodos de zona requieren grupos de nodos del usuario.
Si se agrega otro grupo de nodos del sistema o si se cambia qué grupo de nodos es un grupo de nodos del sistema, no se mueven automáticamente los pods del sistema. Los pods del sistema pueden seguir ejecutándose en el mismo grupo de nodos, incluso si se cambia a un grupo de nodos de usuario. Si elimina o reduce verticalmente un grupo de nodos que ejecuta pods del sistema que anteriormente era un grupo de nodos del sistema, esos pods del sistema se implementan de nuevo con la programación preferida en el nuevo grupo de nodos del sistema.
Puede hacer las siguientes operaciones con los grupos de nodos:
Crear un grupo de nodos del sistema dedicado (se prefiere la programación de pods del sistema a grupos de nodos de mode:system).
Cambiar un grupo de nodos del sistema para que sea un grupo de nodos del usuario, siempre que disponga de otro grupo de nodos del sistema que ocupe su lugar en el clúster de AKS.
Cambiar un grupo de nodos del usuario para que sea un grupo de nodos del sistema.
Eliminar grupos de nodos del usuario.
Puede eliminar grupos de nodos del sistema, siempre que disponga de otro grupo de nodos del sistema que ocupe su lugar en el clúster de AKS.
Un clúster de AKS puede incluir varios grupos de nodos del sistema y requiere uno como mínimo.
Si quiere cambiar varias opciones de configuración inmutables en los grupos de nodos existentes, puede crear nuevos grupos de nodos para reemplazarlas. Por ejemplo, puede agregar un nuevo grupo de nodos con una nueva opción de configuración maxPods y eliminar el grupo de nodos anterior.
Use la afinidad de nodos para requerir o preferir qué nodos se pueden programar según las etiquetas de nodo. Puede establecer key en kubernetes.azure.com, operator en In y values de user o system en YAML, aplicando esta definición mediante kubectl apply -f yourYAML.yaml.
Creación de un nuevo clúster de AKS con un grupo de nodos del sistema
Al crear un nuevo clúster de AKS, el grupo de nodos inicial tiene como valor predeterminado un modo de tipo system. Cuando crea nuevos grupos de nodos con az aks nodepool add, estos serán grupos de nodos del usuario a menos que especifique explícitamente lo contrario en el parámetro de modo.
En el ejemplo siguiente, se crea un grupo de recursos denominado myResourceGroup en la región eastus.
az group create --name myResourceGroup --location eastus
Use el comando az aks create para crear un clúster de AKS. En el siguiente ejemplo se crea un clúster denominado myAKSCluster con un grupo del sistema dedicado que contiene dos nodos. Para las cargas de trabajo de producción, asegúrese de que usa grupos de nodos del sistema con al menos tres nodos. Esta operación puede tardar varios minutos en completarse.
# Create a new AKS cluster with a single system pool
az aks create --resource-group myResourceGroup --name myAKSCluster --node-count 2 --generate-ssh-keys
Al crear un nuevo clúster de AKS, el grupo de nodos inicial tiene como valor predeterminado un modo de tipo system. Cuando se crean nuevos grupos de nodos con New-AzAksNodePool, esos grupos de nodos son grupos de nodos de usuario. El modo de un grupo de nodos se puede actualizar en cualquier momento.
En el ejemplo siguiente, se crea un grupo de recursos denominado myResourceGroup en la región eastus.
Use el cmdlet New-AzAksCluster para crear un cluster AKS. En el siguiente ejemplo se crea un clúster denominado myAKSCluster con un grupo del sistema dedicado que contiene dos nodos. Para las cargas de trabajo de producción, asegúrese de que usa grupos de nodos del sistema con al menos tres nodos. La operación de creación puede tardar varios minutos en completarse.
# Create a new AKS cluster with a single system pool
New-AzAksCluster -ResourceGroupName myResourceGroup -Name myAKSCluster -NodeCount 2 -GenerateSshKey
Incorporación de un grupo de nodos del sistema dedicado a un clúster de AKS existente
Puede agregar uno o varios grupos de nodos del sistema a los clústeres de AKS existentes. Se recomienda programar los pods de aplicación en grupos de nodos de usuario y dedicar grupos de nodos del sistema a los pods del sistema imprescindibles. Esto evita que los pods de aplicaciones no autorizadas eliminen por accidente los pods del sistema. Aplique este comportamiento con el taintCriticalAddonsOnly=true:NoSchedule de los grupos de nodos del sistema.
El siguiente comando le permite agregar un grupo de nodos del tipo sistema dedicado con un número predeterminado de tres nodos.
az aks nodepool add \
--resource-group myResourceGroup \
--cluster-name myAKSCluster \
--name systempool \
--node-count 3 \
--node-taints CriticalAddonsOnly=true:NoSchedule \
--mode System
Puede agregar uno o varios grupos de nodos del sistema a los clústeres de AKS existentes. Se recomienda programar los pods de aplicación en grupos de nodos de usuario y dedicar grupos de nodos del sistema a los pods del sistema imprescindibles. Si se agregan más grupos de nodos del sistema, se evita que los pods de aplicaciones no autorizadas eliminen accidentalmente pods del sistema. Aplique este comportamiento con el CriticalAddonsOnly=true:NoScheduletaint de los grupos de nodos del sistema.
El siguiente comando le permite agregar un grupo de nodos del tipo sistema dedicado con un número predeterminado de tres nodos.
# By default, New-AzAksNodePool creates a user node pool
# We need to update the node pool's mode to System later
New-AzAksNodePool -ResourceGroupName myResourceGroup -ClusterName myAKSCluster -Name systempool -Count 3
# Update the node pool's mode to System and add the 'CriticalAddonsOnly=true:NoSchedule' taint
$myAKSCluster = Get-AzAksCluster -ResourceGroupName myResourceGroup2 -Name myAKSCluster
$systemPool = $myAKSCluster.AgentPoolProfiles | Where-Object Name -eq 'systempool'
$systemPool.Mode = 'System'
$nodeTaints = [System.Collections.Generic.List[string]]::new()
$NodeTaints.Add('CriticalAddonsOnly=true:NoSchedule')
$systemPool.NodeTaints = $NodeTaints
$myAKSCluster | Set-AzAksCluster
Visualización de detalles del grupo de nodos
Puede comprobar los detalles del grupo de nodos con el siguiente comando.
az aks nodepool show --resource-group myResourceGroup --cluster-name myAKSCluster --name systempool
Un modo del tipo sistema se define para los grupos de nodos del sistema y uno del tipo usuario para los del usuario. En el caso de un grupo de sistemas, compruebe que el sistema está establecido en CriticalAddonsOnly=true:NoSchedule, lo que impedirá que los pods de aplicación estén programados en este grupo de nodos.
Un modo del tipo sistema se define para los grupos de nodos del sistema y uno del tipo usuario para los del usuario. En el caso de un grupo de sistemas, compruebe que el sistema está establecido en CriticalAddonsOnly=true:NoSchedule, lo que impedirá que los pods de aplicación estén programados en este grupo de nodos.
Se debe usar la versión de API 2020-03-01 o posterior para configurar el modo de grupo de nodos del sistema. Como resultado, los clústeres creados en versiones de API anteriores a la 2020-03-01 solo contienen grupos de nodos de usuario. Para obtener la funcionalidad y las ventajas del grupo de nodos del sistema en clústeres anteriores, actualice el modo de los grupos de nodos existentes con los siguientes comandos en la última versión de la CLI de Azure.
Puede cambiar los modos para los grupos de nodos del sistema y del usuario. Solo puede cambiar un grupo de nodos del sistema para que sea uno del usuario si ya existe otro grupo de nodos del sistema en el clúster de AKS.
Este comando cambia un grupo de nodos del sistema en un grupo de nodos del usuario.
az aks nodepool update --resource-group myResourceGroup --cluster-name myAKSCluster --name mynodepool --mode user
Este comando cambia un grupo de nodos del usuario en un grupo de nodos del sistema.
az aks nodepool update --resource-group myResourceGroup --cluster-name myAKSCluster --name mynodepool --mode system
Nota
Se debe usar la versión de API 2020-03-01 o posterior para configurar el modo de grupo de nodos del sistema. Como resultado, los clústeres creados en versiones de API anteriores a la 2020-03-01 solo contienen grupos de nodos de usuario. Para obtener la funcionalidad y las ventajas del grupo de nodos del sistema en clústeres anteriores, actualice el modo de los grupos de nodos existentes con los siguientes comandos en la última versión de Azure PowerShell.
Puede cambiar los modos para los grupos de nodos del sistema y del usuario. Solo puede cambiar un grupo de nodos del sistema para que sea uno del usuario si ya existe otro grupo de nodos del sistema en el clúster de AKS.
Este comando cambia un grupo de nodos del sistema en un grupo de nodos del usuario.
Para usar grupos de nodos del sistema en clústeres de AKS con una versión de API anterior a 2020-03-02, agregue un nuevo grupo de nodos del sistema y, a continuación, elimine el grupo de nodos predeterminado original.
Debe contar con al menos dos grupos de nodos del sistema en el clúster de AKS antes de poder eliminar uno de ellos.
Para eliminar el clúster, use el comando az group delete para eliminar el grupo de recursos de AKS:
az group delete --name myResourceGroup --yes --no-wait
Para eliminar el clúster, use el comando Remove-AzResourceGroup para eliminar el grupo de recursos de AKS:
Remove-AzResourceGroup -Name myResourceGroup
Pasos siguientes
En este artículo ha aprendido a crear y administrar grupos de nodos del sistema en un clúster de AKS. Para obtener información sobre cómo iniciar y detener grupos de nodos de AKS, consulta Inicio y detención de grupos de nodos de AKS.
Colaborar con nosotros en GitHub
El origen de este contenido se puede encontrar en GitHub, donde también puede crear y revisar problemas y solicitudes de incorporación de cambios. Para más información, consulte nuestra guía para colaboradores.
Comentarios de Azure Kubernetes Service
Azure Kubernetes Service es un proyecto de código abierto. Seleccione un vínculo para proporcionar comentarios:
Explore las estrategias que puede usar en Azure para optimizar el proceso de desarrollo de aplicaciones nativas de nube con Azure Kubernetes Service (AKS).