Dela via


Tillgänglighetszoner i Azure Kubernetes Service (AKS)

Tillgänglighetszoner hjälper till att skydda dina program och data från datacenterfel. Zoner är unika fysiska platser i en Azure-region. Varje zon innehåller ett eller flera datacenter som är utrustade med oberoende ström, kylning och nätverk.

Genom att använda AKS med tillgänglighetszoner distribueras resurser fysiskt mellan olika tillgänglighetszoner i en enda region, vilket förbättrar tillförlitligheten. Att distribuera noder i flera zoner medför inte extra kostnader.

Den här artikeln visar hur du konfigurerar AKS-resurser att använda Tillgänglighetszoner.

AKS-resurser

Det här diagrammet visar de Azure-resurser som skapas när du skapar ett AKS-kluster:

Diagram som visar olika AKS-komponenter som visar AKS-komponenter som hanteras av Microsoft- och AKS-komponenter i din Azure-prenumeration.

AKS-kontrollplan

Microsoft är värd för AKS-kontrollplanet, Kubernetes API-servern och tjänster som scheduler och etcd som en hanterad tjänst. Microsoft replikerar kontrollplanet i flera zoner.

Andra resurser i klustret distribueras i en hanterad resursgrupp i din Azure-prenumeration. Som standard är den här resursgruppen prefix med MC_ för hanterat kluster och innehåller följande resurser:

Nodpooler

Nodpooler skapas som en VM-skalningsuppsättning i din Azure-prenumeration.

När du skapar ett AKS-kluster krävs en systemnodpool och skapas automatiskt. Den är värd för kritiska systempoddar som CoreDNS och metrics-server. Fler användarnodpooler kan läggas till i DITT AKS-kluster som värd för dina program.

Det finns tre sätt att distribuera nodpooler:

  • Zonintervall
  • Zonjusterad
  • Regional

Diagram som visar AKS-noddistribution mellan tillgänglighetszoner i de olika modellerna.

För systemnodpoolen konfigureras antalet zoner som används när klustret skapas.

Zonintervall

En zon som sträcker sig över skalningsuppsättningen sprider noder över alla valda zoner genom att ange dessa zoner med parametern --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 balanserar antalet noder mellan zoner automatiskt.

Om ett zonindelade avbrott inträffar kan noder i den berörda zonen påverkas, medan noder i andra tillgänglighetszoner fortfarande inte påverkas.

Zonjusterad

Varje nod justeras (fästs) till en viss zon. Så här skapar du tre nodpooler för en region med tre Tillgänglighetszoner:

# # 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

Den här konfigurationen kan användas när du behöver kortare svarstid mellan noder. Det ger också mer detaljerad kontroll över skalningsåtgärder eller när du använder autoskalning av kluster.

Kommentar

  • Om en enskild arbetsbelastning distribueras mellan nodpooler rekommenderar vi att du anger --balance-similar-node-groups för att true upprätthålla en balanserad fördelning av noder mellan zoner för dina arbetsbelastningar under uppskalningsåtgärder.

Regional (använder inte Tillgänglighetszoner)

Regionalt läge används när zontilldelningen inte anges i distributionsmallen ("zones"=[] or "zones"=null).

I den här konfigurationen skapar nodpoolen regionala (inte zonfästa) instanser och placerar implicit instanser i hela regionen. Det finns ingen garanti för balans eller spridning mellan zoner eller att instanser hamnar i samma tillgänglighetszon.

I sällsynta fall av ett fullständigt zonindelade avbrott kan alla instanser i nodpoolen påverkas.

Kör följande kommando för att verifiera nodplatser:

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

Distributioner

Poddar

Kubernetes är medveten om Azure Tillgänglighetszoner och kan balansera poddar mellan noder i olika zoner. Om en zon blir otillgänglig flyttar Kubernetes poddar från berörda noder automatiskt.

Enligt beskrivningen i Välkända etiketter, Anteckningar och Taints använder topology.kubernetes.io/zone Kubernetes etiketten för att automatiskt distribuera poddar i en replikeringskontrollant eller tjänst över de olika tillgängliga zonerna.

Om du vill visa vilka poddnoder som körs kör du följande kommando:

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

Parametern "maxSkew" beskriver i vilken grad poddar kan vara ojämnt fördelade. Om vi antar tre zoner och tre repliker säkerställer inställningen av det här värdet till 1 att varje zon har minst en podd som körs:

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

Lagring och volymer

Som standard använder Kubernetes version 1.29 och senare Azure Managed Disks med zonredundant lagring (ZRS) för beständiga volymanspråk.

Dessa diskar replikeras mellan zoner för att förbättra återhämtningsförmågan för dina program och skyddar dina data mot datacenterfel.

Ett exempel på ett beständiga volymanspråk som använder Standard SSD i ZRS:

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

För zonjusterade distributioner kan du skapa en ny lagringsklass med parametern skuname inställd på LRS (lokalt redundant lagring). Du kan sedan använda den nya lagringsklassen i ditt beständiga volymanspråk (PVC).

Även om LRS-diskar är billigare är de inte zonredundanta och det går inte att ansluta en disk till en nod i en annan zon.

Ett exempel på en LRS Standard SSD-lagringsklass:

kind: StorageClass

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

Lastbalanserare

Kubernetes distribuerar som standard en Azure Standard Load Balancer som balanserar inkommande trafik över alla zoner i en region. Om en nod blir otillgänglig omdirigerar lastbalanseraren trafiken till felfria noder.

Ett exempel på en tjänst som använder Azure Load Balancer:

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

Viktigt!

Den 30 september 2025 dras Basic Load Balancer tillbaka. Mer information finns i det officiella meddelandet. Om du för närvarande använder Basic Load Balancer måste du uppgradera till Standard Load Balancer före slutdatumet.

Begränsningar

Följande begränsningar gäller när du använder Tillgänglighetszoner:

Nästa steg