Hantera systemnodpooler i Azure Kubernetes Service (AKS)

I Azure Kubernetes Service (AKS) grupperas noder med samma konfiguration i nodpooler. Nodpooler innehåller de underliggande virtuella datorer som kör dina program. Systemnodpooler och användarnodpooler är två olika nodpoollägen för dina AKS-kluster. Systemnodpooler har det primära syftet att vara värd för kritiska systempoddar som CoreDNS och metrics-server. Användarnodpooler har det primära syftet att vara värd för dina programpoddar. Programpoddar kan dock schemaläggas i systemnodpooler om du bara vill ha en pool i AKS-klustret. Varje AKS-kluster måste innehålla minst en systemnodpool med minst två noder.

Viktigt!

Om du kör en enda systemnodpool för ditt AKS-kluster i en produktionsmiljö rekommenderar vi att du använder minst tre noder för nodpoolen.

Den här artikeln beskriver hur du hanterar systemnodpooler i AKS. Information om hur du använder flera nodpooler finns i Använda flera nodpooler.

Innan du börjar

Du behöver Azure CLI version 2.3.1 eller senare installerad och konfigurerad. Kör az --version för att hitta versionen. Om du behöver installera eller uppgradera kan du läsa Installera Azure CLI.

Begränsningar

Följande begränsningar gäller när du skapar och hanterar AKS-kluster som stöder systemnodpooler.

  • Se Kvoter, storleksbegränsningar för virtuella datorer och regiontillgänglighet i AKS.
  • En API-version av 2020-03-01 eller senare måste användas för att ange ett nodpoolläge. Kluster som skapats i API-versioner som är äldre än 2020-03-01 innehåller endast användarnodpooler, men kan migreras till att innehålla systemnodpooler genom att följa stegen i uppdateringspoolläget.
  • Namnet på en nodpool får bara innehålla alfanumeriska gemener och måste börja med en gemen bokstav. För Linux-nodpooler måste längden vara mellan 1 och 12 tecken. För Windows-nodpooler måste längden vara mellan ett och sex tecken.
  • Läget för en nodpool är en obligatorisk egenskap och måste anges explicit när du använder ARM-mallar eller direkta API-anrop.

System- och användarnodpooler

För en systemnodpool tilldelar AKS automatiskt etiketten kubernetes.azure.com/mode: system till sina noder. Detta gör att AKS föredrar att schemalägga systempoddar i nodpooler som innehåller den här etiketten. Den här etiketten hindrar dig inte från att schemalägga programpoddar i systemnodpooler. Vi rekommenderar dock att du isolerar kritiska systempoddar från dina programpoddar för att förhindra att felkonfigurerade eller oseriösa programpoddar oavsiktligt tar bort systempoddar.

Du kan framtvinga det här beteendet genom att skapa en dedikerad systemnodpool. Använd taint för CriticalAddonsOnly=true:NoSchedule att förhindra att programpoddar schemaläggs i systemnodpooler.

Systemnodpooler har följande begränsningar:

  • Systemnodpooler måste ha stöd för minst 30 poddar enligt beskrivningen i formeln för lägsta och högsta värde för poddar.
  • Systempooler osType måste vara Linux.
  • Användarnodpooler osType kan vara Linux eller Windows.
  • Systempooler måste innehålla minst två noder och användarnodpooler kan innehålla noll eller fler noder.
  • Systemnodpooler kräver en VM-SKU på minst 4 vCPU:er och 4 GB minne.
  • Virtuella datorer i B-serien stöds inte för systemnodpooler.
  • Minst tre noder med 8 vCPU:er eller två noder med minst 16 vCPU:er rekommenderas (till exempel Standard_DS4_v2), särskilt för stora kluster (flera CoreDNS Pod-repliker, 3–4+ tillägg osv.).
  • Nodpooler för oanvänd kapacitet kräver användarnodpooler.
  • Om du lägger till en annan systemnodpool eller ändrar vilken nodpool som är en systemnodpool flyttas inte systempoddar automatiskt. Systempoddar kan fortsätta att köras i samma nodpool, även om du ändrar den till en användarnodpool. Om du tar bort eller skalar ned en nodpool som kör systempoddar som tidigare var en systemnodpool, distribueras dessa systempoddar om med önskad schemaläggning till den nya systemnodpoolen.

Du kan utföra följande åtgärder med nodpooler:

  • Skapa en dedikerad systemnodpool (föredrar schemaläggning av systempoddar framför nodpooler i mode:system)
  • Ändra en systemnodpool så att den blir en användarnodpool, förutsatt att du har en annan systemnodpool för att ta dess plats i AKS-klustret.
  • Ändra en användarnodpool till en systemnodpool.
  • Ta bort användarnodpooler.
  • Du kan ta bort systemnodpooler, förutsatt att du har en annan systemnodpool som ska ta plats i AKS-klustret.
  • Ett AKS-kluster kan ha flera systemnodpooler och kräver minst en systemnodpool.
  • Om du vill ändra olika oföränderliga inställningar i befintliga nodpooler kan du skapa nya nodpooler som ersätter dem. Ett exempel är att lägga till en ny nodpool med en ny maxPods-inställning och ta bort den gamla nodpoolen.
  • Använd nodtillhörighet för att kräva eller föredra vilka noder som kan schemaläggas baserat på nodetiketter. Du kan ange key till kubernetes.azure.com, operator till Inoch values för antingen user eller system på din YAML och tillämpa den här definitionen med hjälp av kubectl apply -f yourYAML.yaml.

Skapa ett nytt AKS-kluster med en systemnodpool

När du skapar ett nytt AKS-kluster är den första nodpoolen som standard ett typläge system. När du skapar nya nodpooler med az aks nodepool addär dessa nodpooler användarnodpooler om du inte uttryckligen anger lägesparametern.

I följande exempel skapas en resursgrupp med namnet myResourceGroup i regionen eastus .

az group create --name myResourceGroup --location eastus

Använd kommandot az aks create för att skapa ett AKS-kluster. I följande exempel skapas ett kluster med namnet myAKSCluster med en dedikerad systempool som innehåller två noder. För dina produktionsarbetsbelastningar kontrollerar du att du använder systemnodpooler med minst tre noder. Den här åtgärden kan ta flera minuter att slutföra.

# Create a new AKS cluster with a single system pool
az aks create -g myResourceGroup --name myAKSCluster --node-count 2 --generate-ssh-keys

Lägga till en dedikerad systemnodpool i ett befintligt AKS-kluster

Du kan lägga till en eller flera systemnodpooler i befintliga AKS-kluster. Vi rekommenderar att du schemalägger programpoddar på användarnodpooler och ägnar systemnodpooler till endast kritiska systempoddar. Detta förhindrar att oseriösa programpoddar oavsiktligt tar bort systempoddar. Framtvinga det här beteendet med CriticalAddonsOnly=true:NoScheduletaint för systemnodpoolerna.

Följande kommando lägger till en dedikerad nodpool av lägestypsystem med ett standardantal på tre noder.

az aks nodepool add \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name systempool \
    --node-count 3 \
    --node-taints CriticalAddonsOnly=true:NoSchedule \
    --mode System

Visa information för nodpoolen

Du kan kontrollera information om nodpoolen med följande kommando.

az aks nodepool show -g myResourceGroup --cluster-name myAKSCluster -n systempool

Ett typläge System definieras för systemnodpooler och ett typläge av typen Användare definieras för användarnodpooler. För en systempool kontrollerar du att CriticalAddonsOnly=true:NoScheduletaint är inställt på , vilket förhindrar att programpoddar schemaläggs i den här nodpoolen.

{
  "agentPoolType": "VirtualMachineScaleSets",
  "availabilityZones": null,
  "count": 3,
  "enableAutoScaling": null,
  "enableNodePublicIp": false,
  "id": "/subscriptions/yourSubscriptionId/resourcegroups/myResourceGroup/providers/Microsoft.ContainerService/managedClusters/myAKSCluster/agentPools/systempool",
  "maxCount": null,
  "maxPods": 110,
  "minCount": null,
  "mode": "System",
  "name": "systempool",
  "nodeImageVersion": "AKSUbuntu-1604-2020.06.30",
  "nodeLabels": {},
  "nodeTaints": [
    "CriticalAddonsOnly=true:NoSchedule"
  ],
  "orchestratorVersion": "1.16.10",
  "osDiskSizeGb": 128,
  "osType": "Linux",
  "provisioningState": "Succeeded",
  "proximityPlacementGroupId": null,
  "resourceGroup": "myResourceGroup",
  "scaleSetEvictionPolicy": null,
  "scaleSetPriority": null,
  "spotMaxPrice": null,
  "tags": null,
  "type": "Microsoft.ContainerService/managedClusters/agentPools",
  "upgradeSettings": {
    "maxSurge": null
  },
  "vmSize": "Standard_DS2_v2",
  "vnetSubnetId": null
}

Uppdatera befintliga klustersystem- och användarnodpooler

Kommentar

En API-version av 2020-03-01 eller senare måste användas för att ange ett systemnodpoolläge. Kluster som skapats i API-versioner som är äldre än 2020-03-01 innehåller endast användarnodpooler. Om du vill ta emot funktioner och fördelar för systemnodpooler i äldre kluster uppdaterar du läget för befintliga nodpooler med följande kommandon på den senaste Azure CLI-versionen.

Du kan ändra lägen för både system- och användarnodpooler. Du kan bara ändra en systemnodpool till en användarpool om det redan finns en annan systemnodpool i AKS-klustret.

Det här kommandot ändrar en systemnodpool till en användarnodpool.

az aks nodepool update -g myResourceGroup --cluster-name myAKSCluster -n mynodepool --mode user

Det här kommandot ändrar en användarnodpool till en systemnodpool.

az aks nodepool update -g myResourceGroup --cluster-name myAKSCluster -n mynodepool --mode system

Ta bort en systemnodpool

Kommentar

Om du vill använda systemnodpooler i AKS-kluster före API-version 2020-03-02 lägger du till en ny systemnodpool och tar sedan bort den ursprungliga standardnodpoolen.

Du måste ha minst två systemnodpooler i AKS-klustret innan du kan ta bort en av dem.

az aks nodepool delete -g myResourceGroup --cluster-name myAKSCluster -n mynodepool

Rensa resurser

Om du vill ta bort klustret använder du kommandot az group delete för att ta bort AKS-resursgruppen:

az group delete --name myResourceGroup --yes --no-wait

Nästa steg

I den här artikeln har du lärt dig hur du skapar och hanterar systemnodpooler i ett AKS-kluster. Information om hur du startar och stoppar AKS-nodpooler finns i starta och stoppa AKS-nodpooler.