Administración de grupos de nodos del sistema en Azure Kubernetes Service (AKS)

En Azure Kubernetes Service (AKS), los nodos de la misma configuración se agrupan en grupos de node. Los grupos de nodos contienen las máquinas virtuales (VM) 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. En este artículo se explica cómo administrar grupos de nodos del sistema en AKS. Para obtener información sobre cómo usar varios grupos de nodos, consulte Creación de grupos de nodos.

  • Grupos de nodos del sistema: el propósito principal es hospedar pods críticos del sistema como CoreDNS y metrics-server. Los grupos de nodos del sistema no deben usarse para ejecutar la aplicación. Los grupos de nodos del sistema usan Ubuntu Linux o Azure Linux.
  • Grupos de nodos de usuario: el propósito principal es hospedar los pods de la aplicación y aislar las aplicaciones del grupo de nodos del sistema. Este aislamiento impide que una aplicación cause inestabilidad con el grupo de nodos del sistema del clúster. Los grupos de nodos de usuario pueden usar Ubuntu Linux, Azure Linux o Windows.

Un clúster de AKS de producción con un único grupo de nodos del sistema debe contener al menos dos nodos. La recomendación para un clúster de AKS de producción con un único grupo de nodos del sistema es tener al menos tres nodos para mejorar la tolerancia a errores y las zonas de disponibilidad. Por ejemplo, el recuento de nodos predeterminados del comando az aks create es tres y crea un nuevo clúster con un único grupo de nodos del sistema Linux y tres nodos de Linux.

Es posible, aunque no recomendable, programar pods de aplicación en un pool de nodos del sistema si solo tienes un pool de nodos en tu clúster AKS. Una mejor solución es crear un grupo de nodos de usuario para la aplicación.

Antes de empezar

Necesita la CLI de Azure versión 2.3.1 o posterior instalada y configurada. Para encontrar la versión, ejecute el comando az --version. Si necesita instalar o actualizar, consulte Install CLI de Azure.

Limitaciones

Se aplican las siguientes limitaciones cuando crea y administra clústeres de AKS que admiten grupos de nodos del sistema.

  • Consulta Cuotas, restricciones de tamaño de máquina virtual y disponibilidad regional en AKS.
  • Debe utilizarse una versión de API 2020-03-01 o superior para establecer un modo de grupo de nodos. Los clústeres creados en versiones de API anteriores a 2020-03-01 solo contienen grupos de nodos de usuario, pero se pueden migrar para que contengan grupos de nodos del sistema siguiendo los pasos del modo de grupo de actualizaciones.
  • 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. Para los grupos de nodos de Windows, la longitud debe estar 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 los pods del sistema en los grupos de nodos que contengan esta etiqueta. Esta etiqueta no impide que se programen pods de aplicación en grupos de nodos del sistema. Es recomendable aislar los pods críticos del sistema de los pods de aplicación para evitar que los pods de aplicación mal configurados o rebeldes 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:

  • Los grupos de nodos del sistema deben admitir al menos 30 pods como se indica en la fórmula del valor mínimo y máximo de los pods.
  • Los grupos osType de sistemas deben ser Linux.
  • Los grupos de nodos de usuario osType pueden ser Linux o Windows.
  • Los grupos del sistema deben contener al menos dos nodos, pero la recomendación es de tres nodos. Los grupos de nodos de usuario pueden contener cero o más nodos.
  • Los grupos de nodos del sistema requieren una SKU de máquina virtual de 4 vCPUs y 4 GB de memoria como mínimo.
  • Las máquinas virtuales de la serie B no se admiten para los grupos de nodos del sistema.
  • 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 Spot requieren grupos de nodos de usuario.
  • Agregar otro grupo de nodos del sistema o cambiar qué grupo de nodos es un grupo de nodos del sistema no mueve 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 tener varios grupos de nodos del sistema y requiere al menos un grupo de nodos del sistema.
  • Si quiere cambiar varias opciones de configuración inmutables en los grupos de nodos existentes, puede crear nuevos grupos de nodos para reemplazarlas. Un ejemplo es agregar un nuevo grupo de nodos con una nueva maxPods configuración y eliminar el grupo de nodos antiguo.
  • 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.

Cree variables para el grupo de recursos, el nombre del clúster y la ubicación para los comandos usados en este artículo. En este artículo se especifican valores o se pueden usar sus propios valores.

export RESOURCE_GROUP="myResourceGroup"
export CLUSTER_NAME="myAKSCluster"
export LOCATION="eastus"
export NEW_SYSTEM_NP="systempool"
export NEW_NODE_POOL="mynodepool"

En el ejemplo siguiente, se crea un grupo de recursos denominado myResourceGroup en la región eastus.

az group create --name $RESOURCE_GROUP --location $LOCATION

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 utilizar grupos de nodos del sistema que cuenten con al menos tres nodos. Esta operación tarda varios minutos en completarse.

az aks create --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --node-count 2 --generate-ssh-keys

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. La recomendación es programar los pods de aplicación en grupos de nodos de usuario y dedicar grupos de nodos del sistema solo a pods críticos del sistema. Esta separación impide que los pods de aplicación no autorizados eliminen accidentalmente los pods del sistema. Aplique este comportamiento con el CriticalAddonsOnly=true:NoScheduletaint para tus grupos de nodos del sistema.

El siguiente comando agrega un conjunto de nodos dedicado de tipo modo System con tres nodos. El az aks nodepool add comando agrega tres nodos de forma predeterminada, pero se usa el --node-count parámetro para especificar el número de nodos que desee.

az aks nodepool add \
  --resource-group $RESOURCE_GROUP \
  --cluster-name $CLUSTER_NAME \
  --name $NEW_SYSTEM_NP \
  --node-count 3 \
  --node-taints CriticalAddonsOnly=true:NoSchedule \
  --mode System

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 $RESOURCE_GROUP \
  --cluster-name $CLUSTER_NAME \
  --name $NEW_SYSTEM_NP \
  --query "{Count:count, Mode:mode, NodePool:name, NodeTaint:nodeTaints, ResourceGroup:resourceGroup}"

Un modo del tipo sistema se define para los grupos de nodos del sistema y uno del tipo usuario para los del usuario. Para un grupo de sistemas, compruebe que la propiedad nodeTaints esté establecida en CriticalAddonsOnly=true:NoSchedule, lo que impide que los pods de aplicación se programen en este grupo de nodos.

{
  "Count": 3,
  "Mode": "System",
  "NodePool": "systempool",
  "NodeTaint": [
    "CriticalAddonsOnly=true:NoSchedule"
  ],
  "ResourceGroup": "myResourceGroup"
}

Actualización de los grupos de nodos de usuario y del sistema en clústeres existentes

Nota

Se debe usar una versión de API de 2020-03-01 o superior para establecer un modo de grupo de nodos del sistema. Los clústeres creados en versiones de API anteriores a 2020-03-01 solo contienen grupos de nodos de usuario como resultado. Para recibir la funcionalidad y las ventajas del grupo de nodos del sistema en clústeres más antiguos, actualice el modo de los grupos de nodos existentes con los siguientes comandos en la versión de CLI de Azure más reciente.

Puede cambiar los modos de los grupos de nodos del sistema y los grupos de nodos de usuario. Puede cambiar un grupo de nodos del sistema a un grupo de nodos de usuario solo si ya existe otro grupo de nodos del sistema en el clúster de AKS.

Ejecute este comando para crear un nuevo grupo de nodos en modo de sistema.

az aks nodepool add \
  --resource-group $RESOURCE_GROUP \
  --cluster-name $CLUSTER_NAME \
  --name $NEW_NODE_POOL \
  --node-count 3 \
  --mode System

Puede comprobar el modo con el siguiente comando.

az aks nodepool show \
  --resource-group $RESOURCE_GROUP \
  --cluster-name $CLUSTER_NAME \
  --name $NEW_NODE_POOL \
  --query mode --output tsv
System

Ejecute este comando para cambiar un grupo de nodos del sistema a un grupo de nodos de usuario.

az aks nodepool update \
  --resource-group $RESOURCE_GROUP \
  --cluster-name $CLUSTER_NAME \
  --name $NEW_NODE_POOL \
  --mode User

Puede comprobar el modo cambiado con el comando siguiente.

az aks nodepool show \
  --resource-group $RESOURCE_GROUP \
  --cluster-name $CLUSTER_NAME \
  --name $NEW_NODE_POOL \
  --query mode --output tsv
User

Ejecute este comando para cambiar un grupo de nodos de usuario a un grupo de nodos del sistema.

az aks nodepool update \
  --resource-group $RESOURCE_GROUP \
  --cluster-name $CLUSTER_NAME \
  --name $NEW_NODE_POOL \
  --mode System

Ejecute el comando anterior para comprobar que el modo ha cambiado.

Eliminación de un grupo de nodos del sistema

Nota

Para usar grupos de nodos del sistema en clústeres de AKS antes de la versión 2020-03-01de LA API , agregue un nuevo grupo de nodos del sistema y 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.

az aks nodepool delete \
  --resource-group $RESOURCE_GROUP \
  --cluster-name $CLUSTER_NAME \
  --name $NEW_NODE_POOL

Después de eliminar el grupo de nodos del sistema, debe tener el grupo de nodos del sistema original que se creó con el clúster y el grupo de nodos del sistema que creó en la sección agregar un grupo de nodos del sistema dedicado a un clúster de AKS existente.

az aks nodepool list \
  --resource-group $RESOURCE_GROUP \
  --cluster-name $CLUSTER_NAME \
  --query "[].{Name:name, Mode:mode}" --output table

Limpieza de recursos

Al eliminar el grupo de recursos del clúster de AKS, se eliminan todos los recursos del clúster y el grupo de recursos del nodo relacionado (MC_).

Para eliminar el clúster, use el comando az group delete para eliminar el grupo de recursos de AKS:

az group delete --name $RESOURCE_GROUP --yes --no-wait

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.