Creación de un clúster de Azure Kubernetes Service (AKS) que use zonas de disponibilidad

En este artículo le mostraremos cómo crear un clúster de AKS y distribuir los componentes del nodo en las zonas de disponibilidad.

Antes de empezar

Plantillas de Azure Resource Manager y zonas de disponibilidad

Tenga en cuenta los detalles siguientes al crear un clúster de AKS con zonas de disponibilidad mediante una plantilla de Azure Resource Manager:

  • Si define explícitamente un valor NULL en una plantilla, por ejemplo, "availabilityZones": null, la plantilla trata la propiedad como si no existiera. lo que significa que el clúster no se implementa en una zona de disponibilidad.
  • Si no incluye la propiedad "availabilityZones": en la plantilla, el clúster no se implementa en una zona de disponibilidad.
  • No puede actualizar la configuración de las zonas de disponibilidad de un clúster existente, ya que el comportamiento es diferente al actualizar un clúster de AKS con plantillas de Azure Resource Manager. Si establece explícitamente un valor null en la plantilla de las zonas de disponibilidad y actualiza el clúster, no actualiza el clúster en las zonas de disponibilidad. Sin embargo, si omite la propiedad availability zones con una sintaxis de tipo "availabilityZones": [], la implementación intenta deshabilitar las zonas de disponibilidad en el clúster de AKS existente y "availabilityZones": [].

Crear un clúster de AKS en zonas de disponibilidad

Si crea un clúster mediante el comando az aks create, el parámetro --zones especifica las zonas de disponibilidad en que se implementan los nodos de agente. Este parámetro no controla las zonas de disponibilidad en las que se implementan los componentes del plano de control administrado. Se distribuyen automáticamente entre todas las zonas de disponibilidad (si están presentes) en la región durante la implementación del clúster.

Los comandos de ejemplo siguientes muestran cómo crear un grupo de recursos y un clúster de AKS con un total de tres nodos. Un nodo de agente en la zona 1, otro en la 2 y un tercero en la 3.

  1. Cree un grupo de recursos con el comando az group create.

    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  2. Cree un clúster de AKS mediante el comando az aks create con el parámetro --zones.

    az aks create \
        --resource-group $RESOURCE_GROUP \
        --name $CLUSTER_NAME \
        --generate-ssh-keys \
        --vm-set-type VirtualMachineScaleSets \
        --load-balancer-sku standard \
        --node-count 3 \
        --zones 1 2 3
    

    El clúster de AKS tarda unos minutos en crearse.

    A la hora de decidir la zona a la que debe pertenecer un nodo nuevo, un grupo de nodos determinado de AKS usa la mejor opción de equilibrio de zonas que ofrece la instancia subyacente de Azure Virtual Machine Scale Sets. El grupo de nodos dado de AKS está "equilibrado" cuando todas las zonas tienen el mismo número de máquinas virtuales o + una máquina virtual en todas las demás zonas del conjunto de escalado.

Comprobar la distribución de nodos entre zonas

Cuando el clúster esté listo, indique la zona de disponibilidad en que se encuentran los nodos de agente en el conjunto de escalado.

  1. Obtenga las credenciales del clúster de AKS mediante el comando az aks get-credentials:

    az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
    
  2. Enumere los nodos del clúster mediante el comando kubectl describe y filtre por el valor topology.kubernetes.io/zone.

    kubectl describe nodes | grep -e "Name:" -e "topology.kubernetes.io/zone"
    

    El siguiente resultado de ejemplo muestra los tres nodos distribuidos en la región especificada y las zonas de disponibilidad, como eastus2-1 para la primera zona de disponibilidad y eastus2-2 para la segunda zona de disponibilidad:

    Name:       aks-nodepool1-28993262-vmss000000
                topology.kubernetes.io/zone=eastus2-1
    Name:       aks-nodepool1-28993262-vmss000001
                topology.kubernetes.io/zone=eastus2-2
    Name:       aks-nodepool1-28993262-vmss000002
                topology.kubernetes.io/zone=eastus2-3
    

Cuando se agregan más nodos a un grupo de agentes, la plataforma Azure distribuye automáticamente las máquinas virtuales subyacentes en las zonas de disponibilidad especificadas.

A partir de la versión 1.17.0 de Kubernetes, AKS usa la etiqueta topology.kubernetes.io/zone y failure-domain.beta.kubernetes.io/zone, que está en desuso. Puede obtener el mismo resultado si ejecuta el comando kubectl describe nodes en el ejemplo anterior mediante el siguiente comando:

kubectl get nodes -o custom-columns=NAME:'{.metadata.name}',REGION:'{.metadata.labels.topology\.kubernetes\.io/region}',ZONE:'{metadata.labels.topology\.kubernetes\.io/zone}'

El ejemplo siguiente se parece a la salida, aunque es más detallado:

NAME                                REGION   ZONE
aks-nodepool1-34917322-vmss000000   eastus   eastus-1
aks-nodepool1-34917322-vmss000001   eastus   eastus-2
aks-nodepool1-34917322-vmss000002   eastus   eastus-3

Comprobar la distribución de pods entre zonas

Como se documenta en Etiquetas, anotaciones y taints ampliamente conocidas, Kubernetes usa la etiqueta topology.kubernetes.io/zone para distribuir automáticamente los pods en un controlador o servicio de replicación en las diferentes zonas disponibles. En este ejemplo, probará la etiqueta y escalará el clúster de 3 a 5 nodos para comprobar que el pod se propaga correctamente.

  1. Escale el clúster de AKS de 3 a 5 nodos con el comandoaz aks scale con --node-count establecido en 5.

    az aks scale \
        --resource-group $RESOURCE_GROUP \
        --name $CLUSTER_NAME \
        --node-count 5
    
  2. Cuando se complete la operación de escalado, compruebe la distribución del pod entre las zonas mediante el siguiente comando kubectl describe:

    kubectl describe nodes | grep -e "Name:" -e "topology.kubernetes.io/zone"
    

    El siguiente resultado de ejemplo muestra los cinco nodos distribuidos en la región especificada y las zonas de disponibilidad, como eastus2-1 para la primera zona de disponibilidad y eastus2-2 para la segunda zona de disponibilidad:

    Name:       aks-nodepool1-28993262-vmss000000
                topology.kubernetes.io/zone=eastus2-1
    Name:       aks-nodepool1-28993262-vmss000001
                topology.kubernetes.io/zone=eastus2-2
    Name:       aks-nodepool1-28993262-vmss000002
                topology.kubernetes.io/zone=eastus2-3
    Name:       aks-nodepool1-28993262-vmss000003
                topology.kubernetes.io/zone=eastus2-1
    Name:       aks-nodepool1-28993262-vmss000004
                topology.kubernetes.io/zone=eastus2-2
    
  3. Implemente una aplicación NGINX con tres réplicas con los comandos kubectl create deployment y kubectl scale siguientes:

    kubectl create deployment nginx --image=mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
    kubectl scale deployment nginx --replicas=3
    
  4. Compruebe la distribución de pods en las zonas mediante el comando kubectl describe siguiente:

    kubectl describe pod | grep -e "^Name:" -e "^Node:"
    

    El siguiente resultado de ejemplo muestra los tres nodos distribuidos en la región especificada y las zonas de disponibilidad, como eastus2-1 para la primera zona de disponibilidad y eastus2-2 para la segunda zona de disponibilidad:

    Name:         nginx-6db489d4b7-ktdwg
    Node:         aks-nodepool1-28993262-vmss000000/10.240.0.4
    Name:         nginx-6db489d4b7-v7zvj
    Node:         aks-nodepool1-28993262-vmss000002/10.240.0.6
    Name:         nginx-6db489d4b7-xz6wj
    Node:         aks-nodepool1-28993262-vmss000004/10.240.0.8
    

    Como puede ver en la salida anterior, el primer pod se ejecuta en el nodo 0, que se encuentra en la zona de disponibilidad eastus2-1. El segundo se ejecuta en el nodo 2, que corresponde a eastus2-3, y el tercero, en el nodo 4, en eastus2-2. Sin necesidad de configuración adicional, Kubernetes extiende los pods correctamente en las tres zonas de disponibilidad.

Pasos siguientes

En este artículo se describe cómo crear un clúster de AKS mediante zonas de disponibilidad. Para obtener más información sobre los clústeres de alta disponibilidad, consulte Best practices for business continuity and disaster recovery in AKS (Procedimientos recomendados para la continuidad empresarial y recuperación ante desastres en AKS).