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

Ein Azure Kubernetes Service-Cluster (AKS) verteilt Ressourcen wie Knoten und Speicher auf logische Abschnitte der zugrunde liegenden Azure-Infrastruktur. Mithilfe von Verfügbarkeitszonen werden Knoten physisch von anderen Knoten getrennt, die in verschiedenen Verfügbarkeitszonen bereitgestellt werden. AKS-Cluster, die mit mehreren in einem Cluster konfigurierten Verfügbarkeitszonen bereitgestellt werden, bieten ein höheres Maß an Verfügbarkeit zum Schutz vor Hardwareausfällen oder geplanten Wartungsereignissen.

Wenn Sie in einem Cluster Knotenpools definieren, die sich über mehrere Zonen erstrecken, können Knoten in einem bestimmten Knotenpool auch dann weiter ausgeführt werden, wenn eine einzelne Zone nicht mehr vorhanden ist. Ihre Anwendungen können auch dann weiterhin verfügbar sein, wenn in einem einzelnen Rechenzentrum ein physischer Fehler auftritt, wenn sie so orchestriert werden, dass sie einen Ausfall einer Teilmenge der Knoten tolerieren.

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.

Einschränkungen und regionale Verfügbarkeit

AKS-Cluster können Verfügbarkeitszonen in jeder Azure-Region mit Verfügbarkeitszonen verwenden.

Die folgenden Einschränkungen gelten, wenn Sie einen AKS-Cluster mit Verfügbarkeitszonen erstellen:

  • Verfügbarkeitszonen können Sie nur beim Erstellen des Clusters oder Knotenpools definieren.
  • Außerdem kann ein bestehender, nicht verfügbarer Zonencluster nicht aktualisiert werden, wenn nach dem Erstellen des Clusters Verfügbarkeitszonen verwenden werden sollen.
  • Die gewählte Knotengröße (VM-SKU) muss in allen ausgewählten Verfügbarkeitszonen verfügbar sein.
  • Cluster mit aktivierten Verfügbarkeitszonen erfordern den Einsatz von Azure Load Balancer Standard-Instanzen zur Verteilung über die Zonen. Diesen Load Balancer-Typ können Sie nur zum Zeitpunkt der Clustererstellung definieren. Weitere Informationen und die Einschränkungen des Standardlastenausgleichs finden Sie unter Einschränkungen.

Support der Azure-Datenträger Verfügbarkeitszone

  • Volumes mit von Azure verwalteten LRS-Datenträgern sind keine zonenredundanten Ressourcen, sodass das zonenübergreifende Anfügen nicht unterstützt wird. Sie müssen Volumes in derselben Zone wie der angegebene Knoten, auf dem der Zielpod gehostet wird, zusammenstellen.
  • Volumes, die von Azure verwaltete ZRS-Datenträger verwenden, sind zonenredundante Ressourcen. Sie können diese Volumes auf allen Zonen- und Nichtzonen-Agent-Knoten planen. Hier finden Sie ein Beispiel zum Erstellen einer Speicherklasse mit dem StandardSSD_ZRS Datenträger:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: managed-csi-zrs
provisioner: disk.csi.azure.com
parameters:
  skuName: StandardSSD_ZRS  # or Premium_ZRS
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true

Kubernetes kennt Azure-Verfügbarkeitszonen seit Version 1.12. Wenn Sie ein PersistentVolumeClaim-Objekt bereitstellen, das auf einen verwalteten Azure-Datenträger in einem AKS-Cluster mit mehreren Zonen verweist, kümmert sich Kubernetes um die Planung aller Pods, die diesen PVC in der richtigen Verfügbarkeitszone beanspruchen.

Azure Resource Manager-Vorlagen und -Verfügbarkeitszonen

Verstehen Sie beim Erstellen eines AKS-Clusters die folgenden Details zum Angeben von Verfügbarkeitszonen in einer Vorlage:

  • Wenn Sie explizit einen NULL-Wert in einer Vorlage definieren, z. B. durch Angeben von "availabilityZones": null, behandelt die Resource Manager-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 Ihre Resource Manager-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. Wenn Sie einen AKS-Cluster mit Resource Manager-Vorlagen aktualisieren, ist das Verhalten anders. 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": [].

Übersicht über Verfügbarkeitszonen für AKS-Cluster

Verfügbarkeitszonen sind ein Hochverfügbarkeitsangebot, das Anwendungen und Daten vor Ausfällen von Rechenzentren schützt. Zonen sind eindeutige physische Standorte in einer Azure-Region. Jede Zone umfasst eines oder mehrere Rechenzentren, die mit unabhängiger Stromversorgung, Kühlung und unabhängigem Netzwerk ausgestattet sind. Zur Gewährleistung der Resilienz ist in allen für Zonen aktivierten Regionen immer mehr als eine Zone aktiviert. Die physische Trennung von Verfügbarkeitszonen innerhalb einer Region schützt Anwendungen und Daten vor Ausfällen von Rechenzentren.

Weitere Informationen finden Sie unter Was sind Verfügbarkeitszonen in Azure?.

AKS-Cluster, die über Verfügbarkeitszonen bereitgestellt werden, können Knoten über mehrere Zonen innerhalb einer einzelnen Region verteilen. Beispielsweise kann ein Cluster in der Region USA, Osten 2 Knoten in allen drei Verfügbarkeitszonen in USA, Osten 2 erstellen. Diese Verteilung der AKS-Clusterressourcen verbessert die Clusterverfügbarkeit, da sie gegen den Ausfall einer bestimmten Zone resistent sind.

AKS node distribution across availability zones

Wenn eine einzelne Zone nicht mehr verfügbar ist, werden Ihre Anwendungen weiterhin in Clustern ausgeführt, die so konfiguriert sind, dass sie auf mehrere Zonen verteilt sind.

Hinweis

Bei der Implementierung von Verfügbarkeitszonen mit der Cluster-Autoskaler empfehlen wir die Verwendung eines einzelnen Knotenpools für jede Zone. Sie können den --balance-similar-node-groups Parameter so festlegen, dass True er eine ausgewogene Verteilung von Knoten über Zonen für Ihre Workloads bei Skalierungsvorgängen Standard. Wenn dieser Ansatz nicht implementiert wird, können Scale down-Vorgänge das Gleichgewicht von Knoten über Zonen hinweg unterbrechen.

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.

Das folgende Beispiel erstellt einen AKS-Cluster namens myAKSCluster in der Ressourcengruppe namens myResourceGroup mit insgesamt drei Knoten. Ein Agent in Zone 1, einer in Zone 2 und ein weiterer in Zone 3.

az group create --name myResourceGroup --location eastus2

az aks create \
    --resource-group myResourceGroup \
    --name myAKSCluster \
    --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.

Rufen Sie zuerst die Anmeldeinformationen für den AKS-Cluster mit dem Befehl az aks get-credentials ab:

az aks get-credentials --resource-group myResourceGroup --name myAKSCluster

Verwenden Sie anschließend den Befehl kubectl describe, um die Knoten im Cluster aufzulisten und nach dem Wert topology.kubernetes.io/zone zu filtern. Das folgende Beispiel gilt für eine Bash-Shell.

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 neuere Bezeichnung topology.kubernetes.io/zone und die veraltete Bezeichnung failure-domain.beta.kubernetes.io/zone. Sie können beim Ausführen des Befehls kubelet describe nodes im vorherigen Schritt das gleiche Ergebnis erhalten, indem Sie das folgende Skript 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. Wenn Sie die Bezeichnung testen und Ihren Cluster von 3 auf 5 Knoten skalieren möchten, führen Sie den folgenden Befehl aus, um zu überprüfen, ob der Pod ordnungsgemäß verteilt ist:

az aks scale \
    --resource-group myResourceGroup \
    --name myAKSCluster \
    --node-count 5

Wenn der Skalierungsvorgang nach einigen Minuten abgeschlossen ist, führen Sie den Befehl kubectl describe nodes | grep -e "Name:" -e "topology.kubernetes.io/zone" in einer Bash-Shell aus. Die folgende Ausgabe ähnelt den Ergebnissen:

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

Nun sind zwei weitere Knoten in Zone 1 und Zone 2 vorhanden. Sie können eine Anwendung bereitstellen, die aus drei Replikaten besteht. Im folgenden Beispiel wird NGINX verwendet:

kubectl create deployment nginx --image=mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
kubectl scale deployment nginx --replicas=3

Wenn Sie die Knoten anzeigen, auf denen Ihre Pods ausgeführt werden, sehen Sie, dass die Pods auf den Knoten ausgeführt werden, die den drei verschiedenen Verfügbarkeitszonen entsprechen. Mit dem Befehl kubectl describe pod | grep -e "^Name:" -e "^Node:" in einer Bash-Shell wird beispielsweise die folgende Beispielausgabe angezeigt:

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).