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:
Ří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í
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, abytrue
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í:
- Viz Kvóty, omezení velikosti virtuálních počítačů a dostupnost oblastí v AKS.
- Počet použitých Zóny dostupnosti nelze po vytvoření fondu uzlů změnit.
- Většina oblastí podporuje Zóny dostupnosti. Seznam najdete tady.
Další kroky
- Další informace o fondu systémových uzlů
- Další informace o fondech uzlů uživatelů
- Další informace o nástroji pro vyrovnávání zatížení
- Osvědčené postupy pro provozní kontinuitu a zotavení po havárii v AKS
Azure Kubernetes Service