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": nulljako 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.

  1. Pomocí příkazu vytvořte skupinu az group create prostředků.

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

  1. 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
    
  2. Vypište uzly v clusteru pomocí kubectl describe příkazu a vyfiltrujte hodnotu topology.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.

  1. Škálujte cluster AKS z 3 na 5 uzlů pomocí az aks scale příkazu se nastavenou hodnotou --node-count5.

    az aks scale \
        --resource-group $RESOURCE_GROUP \
        --name $CLUSTER_NAME \
        --node-count 5
    
  2. 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
    
  3. 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
    
  4. 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-1dostupnosti . Druhý pod běží na uzlu 2, který odpovídá eastus2-3, a třetí pod v uzlu 4, v eastus2-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.