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
- Es preciso que esté instalada y configurada la versión 2.0.76 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. - Lea la introducción a las zonas de disponibilidad en AKS para comprender las ventajas y limitaciones del uso de zonas de disponibilidad en AKS.
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.
Cree un grupo de recursos con el comando
az group create
.az group create --name $RESOURCE_GROUP --location $LOCATION
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.
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
Enumere los nodos del clúster mediante el comando
kubectl describe
y filtre por el valortopology.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.
Escale el clúster de AKS de 3 a 5 nodos con el comando
az aks scale
con--node-count
establecido en5
.az aks scale \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --node-count 5
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
Implemente una aplicación NGINX con tres réplicas con los comandos
kubectl create deployment
ykubectl scale
siguientes:kubectl create deployment nginx --image=mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine kubectl scale deployment nginx --replicas=3
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 aeastus2-3
, y el tercero, en el nodo 4, eneastus2-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).
Azure Kubernetes Service