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í AKS se zónami dostupnosti fyzicky distribuuje prostředky mezi různé zóny dostupnosti v rámci jedné oblasti a zvyšuje spolehlivost. Nasazení uzlů ve více zónách neúčtují 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 zobrazující komponenty AKS hostované microsoftem a komponentami AKS ve vašem předplatném Azure

Řídicí rovina AKS

Microsoft hostuje řídicí rovinu AKS, server rozhraní API Kubernetes a služby, jako scheduler je a etcd jako 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 následující prostředky:

Fondy uzlů

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

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živatele, které budou hostovat vaše aplikace.

Fondy uzlů je možné nasadit třemi způsoby:

  • Rozteč zón
  • Zarovnaná zóna
  • Regionální

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

Pro fond systémových uzlů se počet použitých zón nakonfiguruje při vytvoření clusteru.

Rozteč zón

Zóna zahrnující škálovací sadu rozprostírá uzly napříč všemi vybranými zónami zadáním těchto zón pomocí parametru --zones .

# Create an AKS Cluster, and create a zone spanning System Nodepool 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 Nodepool, 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 vyrovnává počet uzlů mezi zónami automaticky.

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

Zarovnaná zóna

Každý uzel je zarovnaný (připnutý) ke konkrétní zóně. Vytvoření tří fondů uzlů pro oblast se třemi Zóny dostupnosti:

# # Add three new zone aligned User Nodepools, 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 --balance-similar-node-groups nastavit, aby true se zachovala vyvážená distribuce uzlů napříč zónami pro vaše úlohy během operací vertikálního navýšení kapacity.

Místní (nepoužívá se Zóny dostupnosti)

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

V této konfiguraci fond uzlů vytvoří místní (nepřipnuté zóny) instance a implicitně umístí instance v celé oblasti. Neexistuje žádná záruka na zůstatek nebo rozložení napříč zónami nebo že instance přistanou ve stejné zóně dostupnosti.

Ve výjimečných případech úplného výpadku zón může dojít k ovlivnění všech instancí ve fondu uzlů nebo všech instancí.

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

kubectl describe nodes | grep -e "Name:" -e "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

Nasazení

Pody

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

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.

Pokud chcete zobrazit, na kterých uzlech podů běží, 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í této hodnoty na 1 zajistí, že každá zóna má spuštěný alespoň jeden pod:

kind: Pod
apiVersion: v1
metadata:
  name: myapp
spec:
  replicas: 3
  topologySpreadConstraints:
  - maxSkew: 1
    topologyKey: "topology.kubernetes.io/zone"
    whenUnsatisfiable: DoNotSchedule # or ScheduleAnyway
  containers:
  - name: pause
    image: registry.k8s.io/pause:3.1

Úložiště a svazky

Kubernetes verze 1.29 a novější ve výchozím nastavení používají Azure Spravované disky s využitím zónově redundantního úložiště (ZRS) pro trvalé deklarace identity svazku.

Tyto disky se replikují mezi zónami, aby se zlepšila odolnost aplikací, a chrání vaše data před selháními datacentra.

Příklad trvalé deklarace identity svazku, která používá SSD úrovně Standard v ZRS:

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í zarovnaná do zóny 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ší trvalé deklaraci identity svazku (PVC).

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

Příklad třídy úložiště SSD úrovně LRS úrovně Standard:

kind: StorageClass

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

Nástroje pro vyrovnávání zatížení

Kubernetes ve výchozím nastavení nasadí 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.

Příklad služby, 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 aktuálně 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óny dostupnosti platí následující omezení:

Další kroky