Condividi tramite


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

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.

  1. Creare un gruppo di risorse usando il comando az group create.

    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  2. 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à.

  1. 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
    
  2. Elencare i nodi nel cluster usando il comando kubectl describe e filtrare in base al valore topology.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.

  1. Dimensionare il cluster del servizio Azure Kubernetes da 3 a 5 nodi usando il comando az aks scale con --node-count impostato su 5.

    az aks scale \
        --resource-group $RESOURCE_GROUP \
        --name $CLUSTER_NAME \
        --node-count 5
    
  2. 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
    
  3. Distribuire un'applicazione NGINX con tre repliche usando i comandi kubectl create deployment e kubectl scale seguenti:

    kubectl create deployment nginx --image=mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
    kubectl scale deployment nginx --replicas=3
    
  4. 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 a eastus2-3, e il terzo nel nodo 4, in eastus2-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.