Sdílet prostřednictvím


Zóny dostupnosti ve službě Azure Kubernetes Service (AKS)

Zóny dostupnosti pomáhají chránit aplikace a data před selháními datacentra. Zóny jsou jedinečná fyzická umístění v rámci oblasti Azure. Každá zóna zahrnuje jedno nebo více datacenter vybavených nezávislým napájením, chlazením a sítěmi.

Použití služby Azure Kubernetes Service (AKS) se zónami dostupnosti fyzicky distribuuje prostředky mezi různé zóny dostupnosti v rámci jedné oblasti, což zlepšuje spolehlivost. Nasazení uzlů ve více zónách neúčtuje další náklady.

V tomto článku se dozvíte, jak nakonfigurovat prostředky AKS tak, aby používaly zóny dostupnosti.

Prostředky AKS

Tento diagram znázorňuje prostředky Azure vytvořené při vytváření clusteru AKS:

Diagram znázorňující různé komponenty AKS, včetně komponent AKS hostovaných komponentami Microsoftu a AKS ve vašem předplatném Azure

Řídicí rovina AKS

Microsoft poskytuje řídicí rovinu AKS, server rozhraní API Kubernetes a služby, jako je scheduler a etcd, jakožto spravovaná služba. Microsoft replikuje řídicí rovinu ve více zónách.

Další prostředky clusteru se nasazují ve spravované skupině prostředků ve vašem předplatném Azure. Ve výchozím nastavení má tato skupina prostředků předponu MC_ pro spravovaný cluster a obsahuje prostředky uvedené v následujících částech.

Skupiny uzlů

Fondy uzlů se vytvářejí jako škálovací sady virtuálních počítačů ve vašem předplatném Azure.

Při vytváření clusteru AKS se vyžaduje jeden fond systémových uzlů a vytvoří se automaticky. Hostuje důležité systémové pody, například CoreDNS a metrics-server. Do clusteru AKS můžete přidat další fondy uzlů uživatelů pro hostování aplikací.

Pooly uzlů lze nasadit třemi způsoby:

  • Zónově rozsazení
  • Zarovnané do zóny
  • Regionální

Diagram znázorňující distribuci uzlů AKS napříč zónami dostupnosti v různých modelech

Zóny fondu systémových uzlů se konfigurují při vytvoření clusteru nebo fondu uzlů.

Zónově rozsazení

V této konfiguraci jsou uzly rozložené do všech vybraných zón. Tyto zóny jsou určeny pomocí parametru --zones .

# Create an AKS cluster, and create a zone-spanning system node pool in all three AZs, one node in each AZ
az aks create --resource-group example-rg --name example-cluster --node-count 3 --zones 1 2 3
# Add one new zone-spanning user node pool, two nodes in each
az aks nodepool add --resource-group example-rg --cluster-name example-cluster --name userpool-a  --node-count 6 --zones 1 2 3

AKS automaticky vyrovnává počet uzlů mezi zónami.

Pokud dojde k výpadku zón, můžou být ovlivněny uzly v ovlivněné zóně, ale uzly v jiných zónách dostupnosti zůstanou nedotčené.

Pokud chcete ověřit umístění uzlů, spusťte následující příkaz:

kubectl get nodes -o custom-columns='NAME:metadata.name, REGION:metadata.labels.topology\.kubernetes\.io/region, ZONE:metadata.labels.topology\.kubernetes\.io/zone'
NAME                                REGION   ZONE
aks-nodepool1-34917322-vmss000000   eastus   eastus-1
aks-nodepool1-34917322-vmss000001   eastus   eastus-2
aks-nodepool1-34917322-vmss000002   eastus   eastus-3

Zarovnané do zóny

V této konfiguraci se každý uzel zarovná (připne) ke konkrétní zóně. Vytvoření tří uzlových skupin pro region se třemi zónami dostupnosti.

# # Add three new zone-aligned user node pools, two nodes in each
az aks nodepool add --resource-group example-rg --cluster-name example-cluster --name userpool-x  --node-count 2 --zones 1
az aks nodepool add --resource-group example-rg --cluster-name example-cluster --name userpool-y  --node-count 2 --zones 2
az aks nodepool add --resource-group example-rg --cluster-name example-cluster --name userpool-z  --node-count 2 --zones 3

Tuto konfiguraci můžete použít v případě, že potřebujete nižší latenci mezi uzly. Poskytuje také podrobnější kontrolu nad operacemi škálování nebo při použití automatického škálování clusteru.

Poznámka:

Pokud je jedna úloha nasazená napříč fondy uzlů, doporučujeme nastavit --balance-similar-node-groups na true tak, aby byla zachována vyvážená distribuce uzlů napříč zónami pro vaše úlohy během operací rozšiřování kapacity.

Regionální (nepoužívá se zóny dostupnosti)

Místní režim se používá v případě, že přiřazení zóny není nastavené v šabloně nasazení (například "zones"=[] nebo "zones"=null).

V této konfiguraci fond uzlů vytvoří regionální (ne připnuté k zóně) instance a implicitně je rozloží po celém regionu. Neexistuje žádná záruka, že instance jsou vyvážené nebo rozložené mezi zóny nebo že instance jsou ve stejné zóně dostupnosti.

Ve výjimečných případech úplného výpadku zón může být ovlivněna libovolná nebo všechny instance ve fondu uzlů.

Pokud chcete ověřit umístění uzlů, spusťte následující příkaz:

kubectl get nodes -o custom-columns='NAME:metadata.name, REGION:metadata.labels.topology\.kubernetes\.io/region, ZONE:metadata.labels.topology\.kubernetes\.io/zone'
NAME                                REGION   ZONE
aks-nodepool1-34917322-vmss000000   eastus   0
aks-nodepool1-34917322-vmss000001   eastus   0
aks-nodepool1-34917322-vmss000002   eastus   0

Nasazení

Kapsle

Kubernetes ví o zónách dostupnosti Azure a dokáže vyrovnávat pody napříč uzly v různých zónách. V případě, že zóna přestane být dostupná, Kubernetes automaticky přesune pody mimo ovlivněné uzly.

Jak je uvedeno v referenčních informacích Kubernetes Well-Known Popisky, poznámky a Taints, Kubernetes používá tento popisek topology.kubernetes.io/zone k automatické distribuci podů v kontroleru replikace nebo službě napříč různými dostupnými zónami.

Pokud chcete zjistit, které pody a uzly jsou spuštěné, spusťte následující příkaz:

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

Parametr maxSkew popisuje stupeň nerovnoměrného rozdělení podů. Za předpokladu, že jsou tři zóny a tři repliky, nastavením této hodnoty 1 zajistíte, že každá zóna má spuštěný aspoň jeden pod:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment
spec:
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      topologySpreadConstraints:
      - maxSkew: 1
        topologyKey: topology.kubernetes.io/zone
        whenUnsatisfiable: DoNotSchedule
        labelSelector:
          matchLabels:
            app: my-app
      containers:
      - name: my-container
        image: my-image

Úložiště a svazky

Kubernetes verze 1.29 a novější ve výchozím nastavení používají spravované disky Azure a využívají zónově redundantní úložiště pro nároky na trvalé svazky.

Tyto disky se replikují mezi zónami, aby se zvýšila odolnost vašich aplikací. Tato akce pomáhá chránit vaše data před selháními datacentra.

Následující příklad ukazuje požadavek na trvalý svazek, který používá Azure Standard SSD v zónově redundantním úložišti.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
    name: azure-managed-disk
spec:
  accessModes:
  - ReadWriteOnce
  storageClassName: managed-csi
  #storageClassName: managed-csi-premium
  resources:
    requests:
      storage: 5Gi

Pro nasazení v souladu se zónou můžete vytvořit novou třídu úložiště s parametrem skuname nastaveným na LRS (místně redundantní úložiště). Pak můžete použít novou třídu úložiště ve vašem Persistent Volume Claim.

I když jsou místně redundantní disky úložiště levnější, nejsou zónově redundantní a připojení disku k uzlu v jiné zóně se nepodporuje.

Následující příklad ukazuje místně redundantní třídu úložiště SSD úrovně Standard:

kind: StorageClass

metadata:
  name: azuredisk-csi-standard-lrs
provisioner: disk.csi.azure.com
parameters:
  skuname: StandardSSD_LRS
  #skuname: PremiumV2_LRS

Vyrovnávače zatížení

Kubernetes ve výchozím nastavení nasazuje Azure Standard Load Balancer, který vyrovnává příchozí provoz napříč všemi zónami v oblasti. Pokud uzel přestane být dostupný, nástroj pro vyrovnávání zatížení směruje provoz na uzly, které jsou v pořádku.

Ukázková služba, která používá Azure Load Balancer:

apiVersion: v1
kind: Service
metadata:
  name: example
spec:
  type: LoadBalancer
  selector:
    app: myapp
  ports:
    - port: 80
      targetPort: 8080

Důležité

30. září 2025 bude Load Balancer úrovně Basic vyřazen. Další informace najdete v oficiálním oznámení. Pokud používáte Load Balancer úrovně Basic, nezapomeňte před datem vyřazení upgradovat na Load Balancer úrovně Standard.

Omezení

Při používání zón dostupnosti platí následující omezení: