Erstellen eines Azure Kubernetes Service-Clusters (AKS), der Verfügbarkeitszonen verwendet

Dieser Artikel zeigt Ihnen, wie Sie einen AKS-Cluster erstellen und die Knotenkomponenten auf Verfügbarkeitszonen verteilen.

Voraussetzungen

  • Azure CLI-Version 2.0.76 oder höher muss installiert und konfiguriert sein. Führen Sie az --version aus, um die Version zu ermitteln. Informationen zum Durchführen einer Installation oder eines Upgrades finden Sie bei Bedarf unter Installieren der Azure CLI.
  • Lesen Sie die Übersicht über Verfügbarkeitszonen in AKS, um die Vorteile und Einschränkungen der Verwendung von Verfügbarkeitszonen in AKS zu verstehen.

Azure Resource Manager-Vorlagen und -Verfügbarkeitszonen

Beachten Sie die folgenden Details beim Erstellen eines AKS-Clusters mit Verfügbarkeitszonen mithilfe einer Azure Resource Manager-Vorlage:

  • Wenn Sie explizit einen NULL-Wert in einer Vorlage definieren, z. B. "availabilityZones": null, behandelt die Vorlage die Eigenschaft so, als ob sie nicht vorhanden wäre. Dies bedeutet, dass Ihr Cluster nicht in einer Verfügbarkeitszone bereitgestellt wird.
  • Wenn Sie die Eigenschaft "availabilityZones": nicht in die Vorlage einschließen, wird Ihr Cluster nicht in einer Verfügbarkeitszone bereitgestellt.
  • Sie können die Einstellungen für Verfügbarkeitszonen in einem vorhandenen Cluster nicht aktualisieren, da das Verhalten anderes ist, wenn Sie einen AKS-Cluster mit Azure Resource Manager-Vorlagen aktualisieren. Wenn Sie in Ihrer Vorlage einen NULL-Wert für Verfügbarkeitszonen explizit festlegen und Ihren Cluster aktualisieren, wird Ihr Cluster für Verfügbarkeitszonen nicht aktualisiert. Wenn Sie jedoch die Eigenschaft für Verfügbarkeitszonen mit Syntax wie "availabilityZones": [] weglassen, versucht die Bereitstellung, Verfügbarkeitszonen in Ihrem vorhandenen AKS-Cluster zu deaktivieren, und "availabilityZones": [].

Erstellen eines AKS-Clusters über Verfügbarkeitszonen hinweg

Wenn Sie einen Cluster mit dem Befehl az aks create erstellen, gibt der Parameter --zones die Verfügbarkeitszonen an, in denen Agentknoten bereitgestellt werden. Die Verfügbarkeitszonen, in denen die Komponenten der verwalteten Steuerungsebene bereitgestellt werden, werden nicht durch diesen Parameter gesteuert. Sie werden während der Clusterbereitstellung automatisch auf alle Verfügbarkeitszonen (sofern vorhanden) in der Region verteilt.

Die folgenden Beispielbefehle zeigen, wie Sie eine Ressourcengruppe und einen AKS-Cluster mit insgesamt drei Knoten erstellen. Ein Agent in Zone 1, einer in Zone 2 und ein weiterer in Zone 3.

  1. Erstellen Sie mit dem Befehl az group create eine Ressourcengruppe.

    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  2. Erstellen Sie einen AKS-Cluster mit dem Befehl „az aks create“ und dem --zones-Parameter.

    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
    

    Die Erstellung des AKS-Clusters dauert einige Minuten.

    Bei der Entscheidung, welcher Zone ein neuer Knoten angehören soll, verwendet ein angegebener AKS-Knotenpool ein bestmögliches Zonengleichgewicht, das von den zugrunde liegenden Azure VM-Skalierungsgruppen geboten wird. Der AKS-Knotenpool befindet sich „im Gleichgewicht“, wenn die gleiche Anzahl von VMs oder +- 1 VM in allen anderen Zonen der Skalierungsgruppe liegt.

Überprüfen der Verteilung der Knoten auf die Zonen

Wenn der Cluster bereit ist, listen Sie die Verfügbarkeitszone auf, in der sich die Agent-Knoten in der Skalierungsgruppe befinden.

  1. Laden Sie die AKS-Cluster-Anmeldeinformationen mit dem Befehl az aks get-credentials:

    az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
    
  2. Listen Sie die Konten im Cluster mit dem Befehl kubectl describe auf, und filtern Sie nach dem Wert topology.kubernetes.io/zone.

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

    Das folgende Beispiel zeigt die drei Knoten, die auf die angegebene Region und die Verfügbarkeitszonen verteilt sind, wie z. B. eastus2-1 für die erste Verfügbarkeitszone und eastus2-2 für die zweite Verfügbarkeitszone:

    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
    

Wenn Sie einem Agent-Pool weitere Knoten hinzufügen, verteilt die Azure-Plattform die zugrunde liegenden VMs automatisch auf die angegebenen Verfügbarkeitszonen.

In den Kubernetes-Versionen 1.17.0 und höher verwendet AKS die Bezeichnung topology.kubernetes.io/zone und die veraltete Bezeichnung failure-domain.beta.kubernetes.io/zone. Sie können dasselbe Ergebnis erhalten, indem Sie den Befehl kubectl describe nodes im vorherigen Beispiel mit dem folgenden Befehl ausführen:

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

Das folgende Beispiel ähnelt der Ausgabe mit ausführlicheren Details:

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

Überprüfen der Verteilung der Pods auf die Zonen

Wie unter Well-Known Labels, Annotations and Taints (Bekannte Bezeichnungen, Anmerkungen und Taints) dokumentiert, wird in Kubernetes die Bezeichnung topology.kubernetes.io/zone zum automatischen Verteilen von Pods in einem Replikationscontroller oder Replikationsdienst in den verschiedenen verfügbaren Zonen verwendet. In diesem Beispiel testen Sie die Beschriftung und skalieren Ihren Cluster von 3 auf 5 Knoten, um die korrekte Verteilung des Pods zu überprüfen.

  1. Skalieren Sie Ihren AKS-Cluster von 3 auf 5 Knoten, indem Sie den Befehl az aks scale verwenden, wobei die --node-count auf 5 festgelegt ist.

    az aks scale \
        --resource-group $RESOURCE_GROUP \
        --name $CLUSTER_NAME \
        --node-count 5
    
  2. Überprüfen Sie nach Abschluss des Skalierungsvorgangs die Podverteilung über die Zonen, indem Sie den folgenden Befehl kubectl describe verwenden:

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

    Das folgende Beispiel zeigt die fünf Knoten, die auf die angegebene Region und die Verfügbarkeitszonen verteilt sind, wie z. B. eastus2-1 für die erste Verfügbarkeitszone und eastus2-2 für die zweite Verfügbarkeitszone:

    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. Stellen Sie eine NGINX-Anwendung mit drei Replikaten mithilfe der folgenden Befehle kubectl create deployment und kubectl scale bereit:

    kubectl create deployment nginx --image=mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
    kubectl scale deployment nginx --replicas=3
    
  4. Überprüfen die Podverteilung über die Zonen, indem Sie den folgenden Befehl kubectl describe verwenden:

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

    Das folgende Beispiel zeigt die drei Pods, die auf die angegebene Region und die Verfügbarkeitszonen verteilt sind, wie z. B. eastus2-1 für die erste Verfügbarkeitszone und eastus2-2 für die zweite Verfügbarkeitszone:

    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
    

    Wie Sie in dieser Ausgabe sehen können, wird der erste Pod auf dem Knoten 0 ausgeführt, der sich in der Verfügbarkeitszone eastus2-1 befindet. Der zweite Pod wird auf dem Knoten 2 ausgeführt, der eastus2-3 entspricht, und der dritte Pod auf dem Knoten 4, der eastus2-2 entspricht. Ohne zusätzliche Konfiguration verteilt Kubernetes die Pods ordnungsgemäß auf alle drei Verfügbarkeitszonen.

Nächste Schritte

Dieser Artikel beschreibt, wie Sie einen AKS-Cluster mit Verfügbarkeitszonen erstellen. Weitere Informationen zu hochverfügbaren Clustern finden Sie unter Best Practices für Geschäftskontinuität und Notfallwiederherstellung in Azure Kubernetes Service (AKS).