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": null
behandlar 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.
Skapa en resursgrupp med kommandot
az group create
.az group create --name $RESOURCE_GROUP --location $LOCATION
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.
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
Visa en lista över noderna i klustret med kommandot
kubectl describe
och filtrera eftertopology.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.
Skala aks-klustret från 3 till 5 noder med kommandot
az aks scale
med--node-count
värdet5
.az aks scale \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --node-count 5
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
Distribuera ett NGINX-program med tre repliker med hjälp av följande
kubectl create deployment
ochkubectl scale
kommandon:kubectl create deployment nginx --image=mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine kubectl scale deployment nginx --replicas=3
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, motsvarandeeastus2-3
, och den tredje i noden 4 ieastus2-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.
Azure Kubernetes Service