Dela via


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 (VM) som kör dina program. Systemnodpooler och användarnodpooler är två olika nodpoollägen för dina AKS-kluster. Den här artikeln beskriver hur du hanterar systemnodpooler i AKS. Information om hur du använder flera nodpooler finns i skapa nodpooler.

  • Systemnodpooler: Det primära syftet är att vara värd för kritiska systempoddar som CoreDNS och metrics-server. Systemnodpooler ska inte användas för att köra programmet. Systemnodpooler använder Ubuntu Linux eller Azure Linux.
  • Användarnodpooler: Det primära syftet är att vara värd för dina programpoddar och isolera program från systemnodpoolen. Den här isoleringen förhindrar att ett program orsakar instabilitet med klustrets systemnodpool. Användarnodpooler kan använda Ubuntu Linux, Azure Linux eller Windows.

Ett AKS-produktionskluster med en enda systemnodpool måste innehålla minst två noder. Rekommendationen för ett AKS-produktionskluster med en enda systemnodpool är att ha minst tre noder för förbättrad feltolerans och tillgänglighetszoner. Till exempel är az aks create-kommandots standardnodantal tre och skapar ett nytt kluster med en enda Linux-systemnodpool och tre Linux-noder.

Det är möjligt, men rekommenderas inte, att schemalägga programpoddar på en systemnodpool om du bara har en nodpool i DITT AKS-kluster. En bättre lösning är att skapa en användarnodpool för ditt program.

Innan du börjar

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

Limitations

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 större måste användas för att ange ett nodpoolläge. Kluster som skapats på 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 tecken i små bokstäver och måste börja med en liten 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 förhindrar inte schemaläggning av applikationspoddar i systemnodpooler. Men vi rekommenderar 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 CriticalAddonsOnly=true:NoSchedule-tainten för 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, men rekommendationen är tre noder. 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.).
  • Spot-nodpooler 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öredra schemaläggning av systempoddar till nodpooler markerade med 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.

Skapa variabler för resursgruppen, klusternamnet och platsen för kommandon som används i den här artikeln. Den här artikeln anger värden eller så kan du använda dina egna värden.

export RESOURCE_GROUP="myResourceGroup"
export CLUSTER_NAME="myAKSCluster"
export LOCATION="eastus"
export NEW_SYSTEM_NP="systempool"
export NEW_NODE_POOL="mynodepool"

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

az group create --name $RESOURCE_GROUP --location $LOCATION

az aks create Använd kommandot 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 tar flera minuter att slutföra.

az aks create --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --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. Rekommendationen är att schemalägga dina programpoddar på användarnodpooler och dedikera systemnodpooler till endast kritiska systempoddar. Den här separationen 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ägestyp System med tre noder. Kommandot az aks nodepool add lägger till tre noder som standard, men du använder parametern --node-count för att ange hur många noder du vill använda.

az aks nodepool add \
  --resource-group $RESOURCE_GROUP \
  --cluster-name $CLUSTER_NAME \
  --name $NEW_SYSTEM_NP \
  --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 \
  --resource-group $RESOURCE_GROUP \
  --cluster-name $CLUSTER_NAME \
  --name $NEW_SYSTEM_NP \
  --query "{Count:count, Mode:mode, NodePool:name, NodeTaint:nodeTaints, ResourceGroup:resourceGroup}"

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 egenskapen nodeTaints är inställd på CriticalAddonsOnly=true:NoSchedule, vilket förhindrar att programpoddar schemaläggs i den här nodpoolen.

{
  "Count": 3,
  "Mode": "System",
  "NodePool": "systempool",
  "NodeTaint": [
    "CriticalAddonsOnly=true:NoSchedule"
  ],
  "ResourceGroup": "myResourceGroup"
}

Uppdatera befintliga klustersystem- och användarnodpooler

Note

En API-version av 2020-03-01 eller större måste användas för att ange ett systemnodpoolläge. Kluster som skapats på API-versioner som är äldre än 2020-03-01 innehåller endast användarnodpooler som ett resultat. 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 systemnodpooler och användarnodpooler. Du kan bara ändra en systemnodpool till en användarnodpool om det redan finns en annan systemnodpool i AKS-klustret.

Kör det här kommandot för att skapa en ny nodpool i systemläge.

az aks nodepool add \
  --resource-group $RESOURCE_GROUP \
  --cluster-name $CLUSTER_NAME \
  --name $NEW_NODE_POOL \
  --node-count 3 \
  --mode System

Du kan verifiera läget med följande kommando.

az aks nodepool show \
  --resource-group $RESOURCE_GROUP \
  --cluster-name $CLUSTER_NAME \
  --name $NEW_NODE_POOL \
  --query mode --output tsv
System

Kör det här kommandot för att ändra en systemnodpool till en användarnodpool.

az aks nodepool update \
  --resource-group $RESOURCE_GROUP \
  --cluster-name $CLUSTER_NAME \
  --name $NEW_NODE_POOL \
  --mode User

Du kan kontrollera att läget har ändrats med följande kommando.

az aks nodepool show \
  --resource-group $RESOURCE_GROUP \
  --cluster-name $CLUSTER_NAME \
  --name $NEW_NODE_POOL \
  --query mode --output tsv
User

Kör det här kommandot för att ändra en användarnodpool till en systemnodpool.

az aks nodepool update \
  --resource-group $RESOURCE_GROUP \
  --cluster-name $CLUSTER_NAME \
  --name $NEW_NODE_POOL \
  --mode System

Kör föregående kommando för att kontrollera att läget har ändrats.

Ta bort en systemnodpool

Note

Om du vill använda systemnodpooler i AKS-kluster före API-versionen 2020-03-01lä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 \
  --resource-group $RESOURCE_GROUP \
  --cluster-name $CLUSTER_NAME \
  --name $NEW_NODE_POOL

När du har tagit bort systemnodpoolen bör du ha den ursprungliga systemnodpoolen som skapades med klustret och systemnodpoolen som du skapade i avsnittet lägga till en dedikerad systemnodpool i ett befintligt AKS-kluster.

az aks nodepool list \
  --resource-group $RESOURCE_GROUP \
  --cluster-name $CLUSTER_NAME \
  --query "[].{Name:name, Mode:mode}" --output table

Rensa resurser

När du tar bort AKS-klustrets resursgrupp tas alla klusterresurser och dess relaterade nodresursgrupp (MC_) bort.

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

az group delete --name $RESOURCE_GROUP --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.