Tworzenie klastra usługi Azure Kubernetes Service (AKS) korzystającego ze stref dostępnościCreate an Azure Kubernetes Service (AKS) cluster that uses availability zones

Klaster usługi Azure Kubernetes Service (AKS) dystrybuuje zasoby, takie jak węzły i magazyn, w logicznych sekcjach podstawowej infrastruktury platformy Azure.An Azure Kubernetes Service (AKS) cluster distributes resources such as nodes and storage across logical sections of underlying Azure infrastructure. Ten model wdrażania w przypadku korzystania ze stref dostępności gwarantuje, że węzły w danej strefie dostępności są fizycznie oddzielone od tych, które są zdefiniowane w innej strefie dostępności.This deployment model when using availability zones, ensures nodes in a given availability zone are physically separated from those defined in another availability zone. Klastry AKS wdrożone z wieloma strefami dostępności skonfigurowanymi w ramach klastra zapewniają wyższy poziom dostępności do ochrony przed awariami sprzętowymi lub zaplanowanym zdarzeniem konserwacji.AKS clusters deployed with multiple availability zones configured across a cluster provide a higher level of availability to protect against a hardware failure or a planned maintenance event.

Definiując pule węzłów w klastrze w celu rozdzielenia wielu stref, węzły w danej puli węzłów są w stanie kontynuować działanie nawet wtedy, gdy jedna strefa przestała działać.By defining node pools in a cluster to span multiple zones, nodes in a given node pool are able to continue operating even if a single zone has gone down. Aplikacje mogą być nadal dostępne nawet wtedy, gdy w jednym centrum danych występuje awaria fizyczna, jeśli jest ona niedostępna do tolerowanej awarii podzbioru węzłów.Your applications can continue to be available even if there is a physical failure in a single datacenter if orchestrated to tolerate failure of a subset of nodes.

W tym artykule pokazano, jak utworzyć klaster AKS i rozesłać składniki węzła w strefach dostępności.This article shows you how to create an AKS cluster and distribute the node components across availability zones.

Przed rozpoczęciemBefore you begin

Wymagany jest interfejs wiersza polecenia platformy Azure w wersji 2.0.76 lub nowszej.You need the Azure CLI version 2.0.76 or later installed and configured. Uruchom polecenie  az --version, aby dowiedzieć się, jaka wersja jest używana.Run az --version to find the version. Jeśli konieczne będzie przeprowadzenie instalacji lub uaktualnienia, zobacz  Instalowanie interfejsu wiersza polecenia platformy Azure.If you need to install or upgrade, see Install Azure CLI.

Ograniczenia i dostępność regionówLimitations and region availability

Klastry AKS można obecnie tworzyć przy użyciu stref dostępności w następujących regionach:AKS clusters can currently be created using availability zones in the following regions:

  • Środkowe stany USACentral US
  • Wschodnie stany USA 2East US 2
  • Wschodnie stany USAEast US
  • Francja ŚrodkowaFrance Central
  • Japonia WschodniaJapan East
  • Europa PółnocnaNorth Europe
  • Azja Południowo-WschodniaSoutheast Asia
  • Południowe Zjednoczone KrólestwoUK South
  • Europa ZachodniaWest Europe
  • Zachodnie stany USA 2West US 2

Podczas tworzenia klastra AKS przy użyciu stref dostępności są stosowane następujące ograniczenia:The following limitations apply when you create an AKS cluster using availability zones:

  • Strefy dostępności można definiować tylko po utworzeniu klastra lub puli węzłów.You can only define availability zones when the cluster or node pool is created.
  • Nie można zaktualizować ustawień strefy dostępności po utworzeniu klastra.Availability zone settings can't be updated after the cluster is created. Nie można również zaktualizować istniejącego klastra strefowego niebędącego dostępnością do korzystania ze stref dostępności.You also can't update an existing, non-availability zone cluster to use availability zones.
  • Wybrana opcja rozmiar węzła (jednostka SKU maszyny wirtualnej) musi być dostępna dla wszystkich wybranych stref dostępności.The chosen node size (VM SKU) selected must be available across all availability zones selected.
  • Klastry z włączonymi strefami dostępności wymagają użycia usługi równoważenia obciążenia w warstwie Standardowa na potrzeby dystrybucji między strefami.Clusters with availability zones enabled require use of Azure Standard Load Balancers for distribution across zones. Ten typ modułu równoważenia obciążenia można zdefiniować tylko w czasie tworzenia klastra.This load balancer type can only be defined at cluster create time. Aby uzyskać więcej informacji i ograniczeń dotyczących standardowego modułu równoważenia obciążenia, zobacz ograniczenia dotyczące standardowej jednostki SKU modułu równoważenia obciążenia platformy Azure.For more information and the limitations of the standard load balancer, see Azure load balancer standard SKU limitations.

Ograniczenia dotyczące dysków platformy AzureAzure disks limitations

Woluminy korzystające z usługi Azure Managed disks nie są obecnie strefowo nadmiarowe.Volumes that use Azure managed disks are currently not zone-redundant resources. Nie można dołączać woluminów między strefami i muszą one znajdować się w tej samej strefie co węzeł obsługujący element docelowy pod.Volumes cannot be attached across zones and must be co-located in the same zone as a given node hosting the target pod.

Jeśli konieczne jest uruchamianie obciążeń stanowych, należy użyć przydziałów i tolerowania puli węzłów w ramach specyfikacji ze specyfikacją grupowanie w tej samej strefie co dyski.If you must run stateful workloads, use node pool taints and tolerations in pod specs to group pod scheduling in the same zone as your disks. Alternatywnie możesz korzystać z magazynu opartego na sieci, takiego jak Azure Files, które można dołączyć do zasobników, gdy są one planowane między strefami.Alternatively, use network-based storage such as Azure Files that can attach to pods as they're scheduled between zones.

Przegląd stref dostępności dla klastrów AKSOverview of availability zones for AKS clusters

Strefy dostępności to oferta wysokiej dostępności, która chroni Twoje aplikacje i dane przed awariami centrów danych.Availability zones are a high-availability offering that protects your applications and data from datacenter failures. Strefy są unikatowymi lokalizacjami fizycznymi w regionie świadczenia usługi Azure.Zones are unique physical locations within an Azure region. Każda strefa składa się z co najmniej jednego centrum danych wyposażonego w niezależne zasilanie, chłodzenie i sieć.Each zone is made up of one or more datacenters equipped with independent power, cooling, and networking. Aby zapewnić odporność, istnieją co najmniej trzy oddzielne strefy we wszystkich regionach z włączonymi strefami.To ensure resiliency, there's a minimum of three separate zones in all zone enabled regions. Fizyczna separacja stref dostępności w ramach regionu chroni aplikacje i dane przed awariami centrum danych.The physical separation of availability zones within a region protects applications and data from datacenter failures.

Aby uzyskać więcej informacji, zobacz co to są strefy dostępności na platformie Azure?For more information, see What are availability zones in Azure?.

Klastry AKS wdrożone przy użyciu stref dostępności umożliwiają dystrybucję węzłów między wieloma strefami w jednym regionie.AKS clusters that are deployed using availability zones can distribute nodes across multiple zones within a single region. Na przykład klaster w regionie Wschodnie stany USA 2   może tworzyć węzły we wszystkich trzech strefach dostępności w regionach Wschodnie stany USA 2.For example, a cluster in the East US 2 region can create nodes in all three availability zones in East US 2. Ta dystrybucja zasobów klastra AKS zwiększa dostępność klastra w miarę odporności na awarię określonej strefy.This distribution of AKS cluster resources improves cluster availability as they're resilient to failure of a specific zone.

Rozkład węzłów AKS w różnych strefach dostępności

Jeśli jedna strefa będzie niedostępna, aplikacje kontynuują działanie, Jeśli klaster jest rozłożony w wielu strefach.If a single zone becomes unavailable, your applications continue to run if the cluster is spread across multiple zones.

Tworzenie klastra AKS w różnych strefach dostępnościCreate an AKS cluster across availability zones

W przypadku tworzenia klastra przy użyciu polecenia AZ AKS Create --zones parametr określa, które węzły agenta stref są wdrożone w programie.When you create a cluster using the az aks create command, the --zones parameter defines which zones agent nodes are deployed into. Składniki płaszczyzny kontroli, takie jak etcd, są rozłożone w trzech strefach, jeśli zdefiniujesz --zones parametr podczas tworzenia klastra.The control plane components such as etcd is spread across three zones if you define the --zones parameter at cluster creation time. Strefy, w których są rozmieszczone składniki płaszczyzny kontroli, są niezależne od wybranych dla puli węzłów początkowych.The specific zones which the control plane components are spread across are independent of what explicit zones are selected for the initial node pool.

Jeśli nie zdefiniowano żadnych stref dla domyślnej puli agentów podczas tworzenia klastra AKS, składniki płaszczyzny kontroli nie są gwarantowane do rozprzestrzeniania się między strefami dostępności.If you don't define any zones for the default agent pool when you create an AKS cluster, control plane components are not guaranteed to spread across availability zones. Można dodać dodatkowe pule węzłów za pomocą polecenia AZ AKS nodepool Add i określić --zones dla nowych węzłów, ale nie zmieni się, jak płaszczyzna kontroli została rozłożona między strefami.You can add additional node pools using the az aks nodepool add command and specify --zones for new nodes, but it will not change how the control plane has been spread across zones. Ustawienia stref dostępności można definiować tylko w przypadku tworzenia klastra lub puli węzłów.Availability zone settings can only be defined at cluster or node pool create-time.

Poniższy przykład tworzy klaster AKS o nazwie myAKSCluster w grupie zasobów o nazwie Moja resourceName.The following example creates an AKS cluster named myAKSCluster in the resource group named myResourceGroup. Łącznie 3 węzły są tworzone — jeden Agent w strefie 1, jeden w 2, a następnie jeden w 3.A total of 3 nodes are created - one agent in zone 1, one in 2, and then one in 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

Utworzenie klastra AKS może potrwać kilka minut.It takes a few minutes to create the AKS cluster.

Przy wyborze strefy, do której powinien się znajdować nowy węzeł, dana Pula węzłów AKS będzie korzystać z optymalnego równoważenia strefy oferowanego przez bazowe Virtual Machine Scale Sets platformy Azure.When deciding what zone a new node should belong to, a given AKS node pool will use a best effort zone balancing offered by underlying Azure Virtual Machine Scale Sets. Dana Pula węzłów AKS jest traktowana jako "Zrównoważona", jeśli każda strefa ma taką samą liczbę maszyn wirtualnych lub - maszynę wirtualną "+ 1" we wszystkich innych strefach zestawu skalowania.A given AKS node pool is considered "balanced" if each zone has the same number of VMs or +- 1 VM in all other zones for the scale set.

Weryfikowanie dystrybucji węzłów między strefamiVerify node distribution across zones

Gdy klaster jest gotowy, Utwórz listę węzłów agenta w zestawie skalowania, aby zobaczyć, w jakiej strefie dostępności są one wdrażane.When the cluster is ready, list the agent nodes in the scale set to see what availability zone they're deployed in.

Najpierw pobierz poświadczenia klastra AKS za pomocą polecenia AZ AKS Get-Credentials :First, get the AKS cluster credentials using the az aks get-credentials command:

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

Następnie użyj polecenia polecenia kubectl opisywania , aby wyświetlić listę węzłów w klastrze.Next, use the kubectl describe command to list the nodes in the cluster. Odfiltruj wartość Failure-Domain.beta.Kubernetes.IO/Zone , jak pokazano w następującym przykładzie:Filter on the failure-domain.beta.kubernetes.io/zone value as shown in the following example:

kubectl describe nodes | grep -e "Name:" -e "failure-domain.beta.kubernetes.io/zone"

Poniższe przykładowe dane wyjściowe przedstawiają trzy węzły rozproszone w określonym regionie i strefach dostępności, takie jak eastus2-1 dla pierwszej strefy dostępności i eastus2-2 dla drugiej strefy dostępności:The following example output shows the three nodes distributed across the specified region and availability zones, such as eastus2-1 for the first availability zone and eastus2-2 for the second availability zone:

Name:       aks-nodepool1-28993262-vmss000000
            failure-domain.beta.kubernetes.io/zone=eastus2-1
Name:       aks-nodepool1-28993262-vmss000001
            failure-domain.beta.kubernetes.io/zone=eastus2-2
Name:       aks-nodepool1-28993262-vmss000002
            failure-domain.beta.kubernetes.io/zone=eastus2-3

Podczas dodawania kolejnych węzłów do puli agentów platforma Azure automatycznie dystrybuuje bazowe maszyny wirtualne w określonych strefach dostępności.As you add additional nodes to an agent pool, the Azure platform automatically distributes the underlying VMs across the specified availability zones.

Należy pamiętać, że w nowszych wersjach programu Kubernetes (1.17.0 i nowsze), AKS używa nowszej etykiety topology.kubernetes.io/zone oprócz przestarzałej failure-domain.beta.kubernetes.io/zone .Note that in newer Kubernetes versions (1.17.0 and later), AKS is using the newer label topology.kubernetes.io/zone in addition to the deprecated failure-domain.beta.kubernetes.io/zone.

Weryfikacja pod kątem dystrybucji między strefamiVerify pod distribution across zones

Zgodnie z opisem w dobrze znanych etykietach, adnotacjach izastosowaniach, Kubernetes używa failure-domain.beta.kubernetes.io/zone etykiety do automatycznego dystrybucji zasobników w kontrolerze replikacji lub w usłudze w różnych dostępnych strefach.As documented in Well-Known Labels, Annotations and Taints, Kubernetes uses the failure-domain.beta.kubernetes.io/zone label to automatically distribute pods in a replication controller or service across the different zones available. W celu przetestowania można skalować klaster z 3 do 5 węzłów, aby sprawdzić poprawność rozpraszania:In order to test this, you can scale up your cluster from 3 to 5 nodes, to verify correct pod spreading:

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

Po zakończeniu operacji skalowania po kilku minutach polecenie kubectl describe nodes | grep -e "Name:" -e "failure-domain.beta.kubernetes.io/zone" powinno dać wynik podobny do tego przykładu:When the scale operation completes after a few minutes, the command kubectl describe nodes | grep -e "Name:" -e "failure-domain.beta.kubernetes.io/zone" should give an output similar to this sample:

Name:       aks-nodepool1-28993262-vmss000000
            failure-domain.beta.kubernetes.io/zone=eastus2-1
Name:       aks-nodepool1-28993262-vmss000001
            failure-domain.beta.kubernetes.io/zone=eastus2-2
Name:       aks-nodepool1-28993262-vmss000002
            failure-domain.beta.kubernetes.io/zone=eastus2-3
Name:       aks-nodepool1-28993262-vmss000003
            failure-domain.beta.kubernetes.io/zone=eastus2-1
Name:       aks-nodepool1-28993262-vmss000004
            failure-domain.beta.kubernetes.io/zone=eastus2-2

Mamy teraz dwa dodatkowe węzły w strefach 1 i 2.We now have two additional nodes in zones 1 and 2. Można wdrożyć aplikację składającą się z trzech replik.You can deploy an application consisting of three replicas. Będziemy używać NGINX jako przykładu:We will use NGINX as an example:

kubectl run nginx --image=nginx --replicas=3

Oglądając węzły, w których są uruchomione Twoje zasobniki, zobaczysz, że na węzłach odpowiadających trzema różnymi strefami dostępności są uruchomione na podst.By viewing nodes where your pods are running, you see pods are running on the nodes corresponding to three different availability zones. Na przykład za pomocą polecenia kubectl describe pod | grep -e "^Name:" -e "^Node:" można uzyskać dane wyjściowe podobne do następujących:For example, with the command kubectl describe pod | grep -e "^Name:" -e "^Node:" you would get an output similar to this:

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 widać na podstawie poprzednich danych wyjściowych, pierwszy pod z nich jest uruchamiany w węźle 0, który znajduje się w strefie dostępności eastus2-1 .As you can see from the previous output, the first pod is running on node 0, which is located in the availability zone eastus2-1. Drugi pod jest uruchomiony w węźle 2, który odnosi się do eastus2-3 , i trzeci drugi w węźle 4, w eastus2-2 .The second pod is running on node 2, which corresponds to eastus2-3, and the third one in node 4, in eastus2-2. Bez dodatkowej konfiguracji program Kubernetes poprawna rozłożeniem tego samego zasobnika we wszystkich trzech strefach dostępności.Without any additional configuration, Kubernetes is spreading the pods correctly across all three availability zones.

Następne krokiNext steps

W tym artykule szczegółowo opisano sposób tworzenia klastra AKS używającego stref dostępności.This article detailed how to create an AKS cluster that uses availability zones. Aby uzyskać więcej informacji na temat klastrów o wysokiej dostępności, zobacz najlepsze rozwiązania dotyczące ciągłości działania i odzyskiwania po awarii w programie AKS.For more considerations on highly available clusters, see Best practices for business continuity and disaster recovery in AKS.