Dela via


Skapa ett AKS-kluster (Azure Kubernetes Service) som använder tillgänglighetszoner

Den här artikeln visar hur du skapar ett AKS-kluster och distribuerar nodkomponenterna mellan tillgänglighetszoner.

Innan du börjar

  • Du behöver Azure CLI version 2.0.76 eller senare installerad och konfigurerad. Kör az --version för att hitta versionen. Om du behöver installera eller uppgradera kan du läsa Installera Azure CLI.
  • Läs översikten över tillgänglighetszoner i AKS för att förstå fördelarna och begränsningarna med att använda tillgänglighetszoner i AKS.

Azure Resource Manager-mallar och tillgänglighetszoner

Tänk på följande när du skapar ett AKS-kluster med tillgänglighetszoner med hjälp av en Azure Resource Manager-mall:

  • Om du uttryckligen definierar ett null-värde i en mall, till exempel , "availabilityZones": nullbehandlar mallen egenskapen som om den inte finns. Det innebär att klustret inte distribueras i en tillgänglighetszon.
  • Om du inte inkluderar "availabilityZones": egenskapen i mallen distribueras inte klustret i en tillgänglighetszon.
  • Du kan inte uppdatera inställningarna för tillgänglighetszoner i ett befintligt kluster eftersom beteendet skiljer sig när du uppdaterar ett AKS-kluster med Azure Resource Manager-mallar. Om du uttryckligen anger ett null-värde i mallen för tillgänglighetszoner och uppdaterar klustret uppdateras inte klustret för tillgänglighetszoner. Men om du utelämnar egenskapen tillgänglighetszoner med syntax som "availabilityZones": [], försöker distributionen inaktivera tillgänglighetszoner i ditt befintliga AKS-kluster och misslyckas.

Skapa ett AKS-kluster mellan tillgänglighetszoner

När du skapar ett kluster med kommandot az aks create anger parametern --zones de tillgänglighetszoner som agentnoderna ska distribueras till. Tillgänglighetszonerna som komponenterna för det hanterade kontrollplanet distribueras till styrs inte av den här parametern. De sprids automatiskt över alla tillgänglighetszoner (om de finns) i regionen under klusterdistributionen.

Följande exempelkommandon visar hur du skapar en resursgrupp och ett AKS-kluster med totalt tre noder. En agentnod i zon 1, en i 2 och sedan en i 3.

  1. Skapa en resursgrupp med kommandot az group create .

    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  2. Skapa ett AKS-kluster med kommandot az aks create med parametern --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
    

    Det tar några minuter att skapa AKS-klustret.

    När du bestämmer vilken zon en ny nod ska tillhöra använder en angiven AKS-nodpool en zonutjämning med bästa möjliga ansträngning som erbjuds av underliggande Skalningsuppsättningar för virtuella Azure-datorer. AKS-nodpoolen är "balanserad" när varje zon har samma antal virtuella datorer eller +- en virtuell dator i alla andra zoner för skalningsuppsättningen.

Verifiera noddistribution mellan zoner

När klustret är klart anger du vilken tillgänglighetszon agentnoderna i skalningsuppsättningen finns i.

  1. Hämta autentiseringsuppgifterna för AKS-klustret med hjälp av az aks get-credentials kommandot:

    az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
    
  2. Visa en lista över noderna i klustret med kommandot kubectl describe och filtrera efter topology.kubernetes.io/zone värdet.

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

    Följande exempelutdata visar de tre noderna som distribueras över den angivna regionen och tillgänglighetszonerna, till exempel eastus2-1 för den första tillgänglighetszonen och eastus2-2 för den andra tillgänglighetszonen:

    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
    

När du lägger till fler noder i en agentpool distribuerar Azure-plattformen automatiskt de underliggande virtuella datorerna över de angivna tillgänglighetszonerna.

Med Kubernetes version 1.17.0 och senare använder topology.kubernetes.io/zone AKS etiketten och den inaktuella failure-domain.beta.kubernetes.io/zone. Du kan få samma resultat från att köra kubectl describe nodes kommandot i föregående exempel med hjälp av följande kommando:

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

Följande exempel liknar utdata med mer utförlig information:

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

Verifiera podddistribution mellan zoner

Enligt beskrivningen i Välkända etiketter, Anteckningar och Taints använder topology.kubernetes.io/zone Kubernetes etiketten för att automatiskt distribuera poddar i en replikeringskontrollant eller tjänst över de olika tillgängliga zonerna. I det här exemplet testar du etiketten och skalar klustret från 3 till 5 noder för att kontrollera att podden sprider sig korrekt.

  1. Skala aks-klustret från 3 till 5 noder med kommandot az aks scale med --node-count värdet 5.

    az aks scale \
        --resource-group $RESOURCE_GROUP \
        --name $CLUSTER_NAME \
        --node-count 5
    
  2. När skalningsåtgärden är klar kontrollerar du podddistributionen mellan zonerna med hjälp av följande kubectl describe kommando:

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

    Följande exempelutdata visar de fem noderna som distribueras över den angivna regionen och tillgänglighetszonerna, till exempel eastus2-1 för den första tillgänglighetszonen och eastus2-2 för den andra tillgänglighetszonen:

    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. Distribuera ett NGINX-program med tre repliker med hjälp av följande kubectl create deployment och kubectl scale kommandon:

    kubectl create deployment nginx --image=mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
    kubectl scale deployment nginx --replicas=3
    
  4. Kontrollera podddistributionen mellan zonerna med hjälp av följande kubectl describe kommando:

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

    Följande exempelutdata visar de tre poddar som distribueras över den angivna regionen och tillgänglighetszonerna, till exempel eastus2-1 för den första tillgänglighetszonen och eastus2-2 för den andra tillgänglighetszonen:

    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
    

    Som du ser från föregående utdata körs den första podden på nod 0 i tillgänglighetszonen eastus2-1. Den andra podden körs på nod 2, motsvarande eastus2-3, och den tredje i noden 4 i eastus2-2. Utan någon extra konfiguration sprider Kubernetes poddarna korrekt över alla tre tillgänglighetszonerna.

Nästa steg

I den här artikeln beskrivs hur du skapar ett AKS-kluster med hjälp av tillgänglighetszoner. Mer information om kluster med hög tillgänglighet finns i Metodtips för affärskontinuitet och haveriberedskap i AKS.