Creare un cluster del servizio Azure Kubernetes che usi le zone di disponibilità
Questo articolo illustra come creare un cluster del servizio Azure Kubernetes e distribuire i componenti del nodo tra le zone di disponibilità.
Operazioni preliminari
- È necessario che sia installata e configurata l'interfaccia della riga di comando di Azure 2.0.76 o versioni successive. Eseguire
az --version
per trovare la versione. Se è necessario eseguire l'installazione o l'aggiornamento, vedere Installare l'interfaccia della riga di comando di Azure. - Leggere la panoramica delle zone di disponibilità nel servizio Azure Kubernetes per conoscere i vantaggi e le limitazioni dell'uso delle zone di disponibilità nel servizio Azure Kubernetes.
Modelli e zone di disponibilità di Azure Resource Manager
Quando si crea un cluster del servizio Azure Kubernetes con zone di disponibilità usando un modello di Azure Resource Manager, tenere presenti i dettagli seguenti:
- Se si definisce in modo esplicito un valore Null in un modello, ad esempio
"availabilityZones": null
, il modello considera la proprietà come se non esistesse. Ciò significa che il cluster non viene distribuito in una zona di disponibilità. - Se non si include la proprietà
"availabilityZones":
nel modello, il cluster non viene distribuito in una zona di disponibilità. - Non è possibile aggiornare le impostazioni per le zone di disponibilità in un cluster esistente perché il comportamento è diverso quando si aggiorna un cluster del servizio Azure Kubernetes con i modelli di Azure Resource Manager. Se si imposta in modo esplicito un valore Null nel modello per le zone di disponibilità e si aggiorna il cluster, il cluster non viene aggiornato per le zone di disponibilità. Tuttavia, se si omette la proprietà delle zone di disponibilità con sintassi come
"availabilityZones": []
, la distribuzione tenta di disabilitare le zone di disponibilità nel cluster del servizio Azure Kubernetes esistente e ha esito negativo.
Creare un cluster del servizio Azure Kubernetes tra le zone di disponibilità
Quando si crea un cluster usando il comando az aks create
, il parametro --zones
specifica le zone di disponibilità in cui distribuire i nodi dell'agente. Le zone di disponibilità in cui vengono distribuiti i componenti del piano di controllo gestito non sono controllate da questo parametro. Vengono distribuite automaticamente in tutte le zone di disponibilità (se presenti) nell'area durante la distribuzione del cluster.
I comandi di esempio seguenti illustrano come creare un gruppo di risorse e un cluster del servizio Azure Kubernetes con un totale di tre nodi. Un nodo agente nella zona 1, uno nella 2 e uno nella 3.
Creare un gruppo di risorse usando il comando
az group create
.az group create --name $RESOURCE_GROUP --location $LOCATION
Creare un cluster del servizio Azure Kubernetes con il comando
az aks create
e il parametro--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
Per creare il cluster del servizio Azure Kubernetes sono necessari alcuni minuti.
Quando si decide la zona a cui deve appartenere un nuovo nodo, un pool di nodi specificato del servizio Azure Kubernetes userà un bilanciamento ottimale della zona offerto dai set di scalabilità di macchine virtuali di Azure sottostanti. Il pool di nodi del servizio Azure Kubernetes è "bilanciato" quando ogni zona ha lo stesso numero di macchine virtuali o +- una macchina virtuale in tutte le altre zone per il set di scalabilità.
Verificare la distribuzione del nodo tra le zone
Quando il cluster è pronto, elencare le zone di disponibilità in cui si trovano i nodi dell'agente nel set di scalabilità.
Ottenere le credenziali del cluster del servizio Azure Kubernetes usando il comando
az aks get-credentials
:az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
Elencare i nodi nel cluster usando il comando
kubectl describe
e filtrare in base al valoretopology.kubernetes.io/zone
.kubectl describe nodes | grep -e "Name:" -e "topology.kubernetes.io/zone"
L'output di esempio seguente mostra i tre nodi distribuiti nell'area specificata e nelle zone di disponibilità, ad esempio eastus2-1 per la prima zona di disponibilità e eastus2-2 per la seconda zona di disponibilità:
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
Quando si aggiungono altri nodi a un pool di agenti, la piattaforma Azure distribuisce automaticamente le macchine virtuali sottostanti nelle zone di disponibilità specificate.
Con Kubernetes versioni 1.17.0 e successive, il servizio Azure Kubernetes usa l'etichetta topology.kubernetes.io/zone
e l'etichetta deprecata failure-domain.beta.kubernetes.io/zone
. È possibile ottenere lo stesso risultato dall'esecuzione del comando kubectl describe nodes
nell'esempio precedente eseguendo il comando seguente:
kubectl get nodes -o custom-columns=NAME:'{.metadata.name}',REGION:'{.metadata.labels.topology\.kubernetes\.io/region}',ZONE:'{metadata.labels.topology\.kubernetes\.io/zone}'
L'esempio seguente è simile all'output con dettagli più precisi:
NAME REGION ZONE
aks-nodepool1-34917322-vmss000000 eastus eastus-1
aks-nodepool1-34917322-vmss000001 eastus eastus-2
aks-nodepool1-34917322-vmss000002 eastus eastus-3
Verificare la distribuzione del pod tra le zone
Come documentato in Etichette note, annotazioni e taint, Kubernetes usa l'etichetta topology.kubernetes.io/zone
per distribuire automaticamente i pod in un controller o un servizio di replica tra le diverse zone disponibili. In questo esempio si testa l'etichetta e si dimensiona il cluster da 3 a 5 nodi per verificare che il pod venga distribuito correttamente.
Dimensionare il cluster del servizio Azure Kubernetes da 3 a 5 nodi usando il comando
az aks scale
con--node-count
impostato su5
.az aks scale \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --node-count 5
Al termine dell'operazione di dimensionamento, verificare la distribuzione del pod tra le zone usando il comando
kubectl describe
seguente:kubectl describe nodes | grep -e "Name:" -e "topology.kubernetes.io/zone"
L'output di esempio seguente mostra i cinque nodi distribuiti nell'area specificata e nelle zone di disponibilità, ad esempio eastus2-1 per la prima zona di disponibilità e eastus2-2 per la seconda zona di disponibilità:
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
Distribuire un'applicazione NGINX con tre repliche usando i comandi
kubectl create deployment
ekubectl scale
seguenti:kubectl create deployment nginx --image=mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine kubectl scale deployment nginx --replicas=3
Verificare la distribuzione del pod tra le zone usando il comando
kubectl describe
seguente:kubectl describe pod | grep -e "^Name:" -e "^Node:"
L'output di esempio seguente mostra i tre pod distribuiti nell'area specificata e nelle zone di disponibilità, ad esempio eastus2-1 per la prima zona di disponibilità e eastus2-2 per la seconda zona di disponibilità:
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
Come si può notare dall'output precedente, il primo pod viene eseguito sul nodo 0 nella zona di disponibilità
eastus2-1
. Il secondo pod viene eseguito sul nodo 2, che corrisponde aeastus2-3
, e il terzo nel nodo 4, ineastus2-2
. Senza alcuna configurazione aggiuntiva, Kubernetes distribuisce correttamente i pod in tutte e tre le zone di disponibilità.
Passaggi successivi
Questo articolo descrive in modo dettagliato come creare un cluster del servizio Azure Kubernetes usando le zone di disponibilità. Per altre considerazioni sui cluster ad alta disponibilità, vedere le Procedure consigliate per continuità aziendale e ripristino di emergenza nel servizio Azure Kubernetes.
Azure Kubernetes Service