Vytvoření clusteru Azure Kubernetes Service (AKS), který používá zóny dostupnosti
V tomto článku se dozvíte, jak vytvořit cluster AKS a distribuovat komponenty uzlu napříč zónami dostupnosti.
Než začnete
- Potřebujete nainstalovanou a nakonfigurovanou verzi Azure CLI 2.0.76 nebo novější. Verzi zjistíte spuštěním příkazu
az --version
. Pokud potřebujete instalaci nebo upgrade, přečtěte si téma Instalace Azure CLI. - Přečtěte si přehled zón dostupnosti v AKS a seznamte se s výhodami a omezeními používání zón dostupnosti v AKS.
Šablony Azure Resource Manageru a zóny dostupnosti
Při vytváření clusteru AKS se zónami dostupnosti pomocí šablony Azure Resource Manageru mějte na paměti následující podrobnosti:
- Pokud například explicitně definujete hodnotu null v šabloně, šablona považuje vlastnost za to,
"availabilityZones": null
jako by neexistovala. To znamená, že váš cluster se nenasazuje v zóně dostupnosti. - Pokud do šablony nezadáte
"availabilityZones":
vlastnost, cluster se nenasadí do zóny dostupnosti. - Nastavení zón dostupnosti v existujícím clusteru nemůžete aktualizovat, protože chování se liší při aktualizaci clusteru AKS pomocí šablon Azure Resource Manageru. Pokud v šabloně explicitně nastavíte hodnotu null pro zóny dostupnosti a aktualizujete cluster, neaktualizuje cluster pro zóny dostupnosti. Pokud však vynecháte vlastnost zón dostupnosti se syntaxí, jako
"availabilityZones": []
je například , pokusí se nasazení zakázat zóny dostupnosti ve vašem existujícím clusteru AKS a selže.
Vytvoření clusteru AKS napříč zónami dostupnosti
Při vytváření clusteru az aks create
pomocí příkazu --zones
určuje parametr zóny dostupnosti pro nasazení uzlů agenta do. Zóny dostupnosti, do které jsou nasazené komponenty spravované roviny řízení, nejsou tímto parametrem řízeny. Během nasazování clusteru se automaticky šíří mezi všechny zóny dostupnosti (pokud jsou k dispozici).
Následující ukázkové příkazy ukazují, jak vytvořit skupinu prostředků a cluster AKS s celkem třemi uzly. Jeden uzel agenta v zóně 1, jeden v 2 a potom jeden v 3.
Pomocí příkazu vytvořte skupinu
az group create
prostředků.az group create --name $RESOURCE_GROUP --location $LOCATION
Vytvořte cluster AKS pomocí
az aks create
příkazu s parametrem--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
Vytvoření clusteru AKS bude trvat několik minut.
Při rozhodování o tom, do jaké zóny má nový uzel patřit, využívá zadaný fond uzlů AKS vyrovnávání zóny s nejlepším úsilím, které nabízí základní škálovací sady virtuálních počítačů Azure. Fond uzlů AKS je "vyvážený", pokud má každá zóna stejný počet virtuálních počítačů nebo +- jeden virtuální počítač ve všech ostatních zónách pro škálovací sadu.
Ověření distribuce uzlů napříč zónami
Jakmile je cluster připravený, vypište, ve které zóně dostupnosti jsou uzly agenta ve škálovací sadě.
Pomocí příkazu získejte přihlašovací údaje clusteru
az aks get-credentials
AKS:az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
Vypište uzly v clusteru pomocí
kubectl describe
příkazu a vyfiltrujte hodnotutopology.kubernetes.io/zone
.kubectl describe nodes | grep -e "Name:" -e "topology.kubernetes.io/zone"
Následující příklad výstupu ukazuje tři uzly distribuované napříč zadanou oblastí a zónami dostupnosti, například eastus2-1 pro první zónu dostupnosti a eastus2-2 pro druhou zónu dostupnosti:
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
Když do fondu agentů přidáte další uzly, platforma Azure automaticky distribuuje základní virtuální počítače napříč zadanými zónami dostupnosti.
S Kubernetes verze 1.17.0 a novější používá topology.kubernetes.io/zone
AKS popisek a zastaralé failure-domain.beta.kubernetes.io/zone
. Stejný výsledek můžete získat spuštěním kubectl describe nodes
příkazu v předchozím příkladu pomocí následujícího příkazu:
kubectl get nodes -o custom-columns=NAME:'{.metadata.name}',REGION:'{.metadata.labels.topology\.kubernetes\.io/region}',ZONE:'{metadata.labels.topology\.kubernetes\.io/zone}'
Následující příklad se podobá výstupu s více podrobnými podrobnostmi:
NAME REGION ZONE
aks-nodepool1-34917322-vmss000000 eastus eastus-1
aks-nodepool1-34917322-vmss000001 eastus eastus-2
aks-nodepool1-34917322-vmss000002 eastus eastus-3
Ověření distribuce podů napříč zónami
Jak je uvedeno v dobře známých popiscích, poznámkách a taintech, Kubernetes tento popisek používá topology.kubernetes.io/zone
k automatické distribuci podů v řadiči replikace nebo službě napříč různými dostupnými zónami. V tomto příkladu otestujete popisek a škálujete cluster z 3 na 5 uzlů, abyste ověřili správné rozložení podu.
Škálujte cluster AKS z 3 na 5 uzlů pomocí
az aks scale
příkazu se nastavenou hodnotou--node-count
5
.az aks scale \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --node-count 5
Po dokončení operace škálování pomocí následujícího
kubectl describe
příkazu ověřte distribuci podů napříč zónami:kubectl describe nodes | grep -e "Name:" -e "topology.kubernetes.io/zone"
Následující příklad výstupu ukazuje pět uzlů distribuovaných napříč zadanou oblastí a zónami dostupnosti, například eastus2-1 pro první zónu dostupnosti a eastus2-2 pro druhou zónu dostupnosti:
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
Pomocí následujících
kubectl create deployment
příkazůkubectl scale
nasaďte aplikaci NGINX se třemi replikami:kubectl create deployment nginx --image=mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine kubectl scale deployment nginx --replicas=3
Pomocí následujícího
kubectl describe
příkazu ověřte distribuci podů napříč zónami:kubectl describe pod | grep -e "^Name:" -e "^Node:"
Následující příklad výstupu ukazuje tři pody distribuované napříč zadanou oblastí a zónami dostupnosti, například eastus2-1 pro první zónu dostupnosti a eastus2-2 pro druhou zónu dostupnosti:
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
Jak vidíte z předchozího výstupu, první pod běží na uzlu 0 umístěném v zóně
eastus2-1
dostupnosti . Druhý pod běží na uzlu 2, který odpovídáeastus2-3
, a třetí pod v uzlu 4, veastus2-2
. Bez jakékoli další konfigurace kubernetes rozdělí pody správně do všech tří zón dostupnosti.
Další kroky
Tento článek popisuje, jak vytvořit cluster AKS pomocí zón dostupnosti. Další důležité informace o vysoce dostupných clusterech najdete v tématu Osvědčené postupy pro provozní kontinuitu a zotavení po havárii v AKS.
Azure Kubernetes Service