Konfigurera löpande uppgraderingar för Azure Kubernetes Service (AKS) nodpooler

En löpande uppgraderingsstrategi uppgraderar noderna en i taget (eller några i taget), vilket minimerar arbetsbelastningsstörningar samtidigt som nodpoolen förblir tillgänglig under hela uppgraderingsprocessen. Den här artikeln beskriver hur du konfigurerar löpande uppgraderingar för AKS-nodpooler, inklusive inställningar för överspänning, timeout för tömning och förbrukningstid.

Innan du börjar

  • Kontrollera att kontrollplanet redan har uppgraderats till kubernetes-målversionen. Du kan inte uppgradera nodpooler till en högre version än kontrollplanet. Mer information finns i Uppgradera AKS-klusterkontrollplanet.
  • Om du använder Azure CLI kräver den här artikeln Azure CLI version 2.34.1 eller senare. az --version Använd kommandot för att hitta versionen. Om du behöver installera eller uppgradera kan du läsa Installera Azure CLI.
  • Du behöver Microsoft.ContainerService/managedClusters/agentPools/write RBAC-rollbehörighet för att konfigurera löpande uppgraderingar för AKS-nodpooler.

Översikt över löpande uppgraderingsbeteende

Under en löpande uppgradering utför AKS följande åtgärder för varje nod i nodpoolen:

  1. Lägg till överspänningsnoder: Lägg till nya buffertnoder baserat på inställningarna för maximal ökning (--max-surge) för att underhålla kapaciteten under uppgraderingen.
  2. Avspärrnings- och tömningsnoder: Avspärra och töm de gamla noderna en i taget för att minimera störningar i program som körs. Om du använder max surge, spärrar och dränerar den lika många noder samtidigt som det specificerade antalet buffertnoder.
  3. Vänta på stabiliseringstid (valfritt): Vänta på en konfigurerad stabiliseringstidens varaktighet innan du fortsätter, så att arbetsbelastningarna kan stabiliseras på de nya noderna innan uppgraderingen fortskrider.
  4. Återskapa gamla noder: När de gamla noderna töms återskapas de för att ta emot den nya versionen. De omskapade noderna blir buffertnoderna för nästa uppsättning noder som ska uppgraderas.
  5. Upprepa: Processen upprepas tills alla noder i nodpoolen har uppgraderats.
  6. Ta bort överspänningsnoder: När alla noder har uppgraderats tas eventuella återstående buffertnoder bort, vilket bibehåller den ursprungliga nodpoolens storlek och balans.

Konfigurera inställningar för löpande uppgradering

Anpassa nodökning

Viktigt!

  • Nodtoppar kräver en abonnemangskvot för det begärda maximala antalet resursökningar för varje uppgraderingsoperation. Till exempel har ett kluster som har fem nodpooler, var och en med antalet fyra noder, totalt 20 noder. Om varje nodpool har ett maximalt överspänningsvärde på 50%krävs extra beräknings- och IP-kvot på 10 noder (två noder × fem pooler) för att slutföra uppgraderingen.
  • Inställningen för maximal ökning på en nodpool är beständig. Följande Kubernetes-uppgraderingar eller nodversionsuppgraderingar använder den här inställningen. Du kan när som helst ändra maximalt överspänningsvärde för dina nodpooler. För produktionsnodpooler rekommenderar vi en maximal ökningsinställning på 33%.
  • Om du använder Azure CNI, kontrollera att det finns tillgängliga IP-adresser i undernätet för att uppfylla IP-kraven för Azure CNI.

AKS konfigurerar uppgraderingar till överspänning med en extra nod som standard. Ett standardvärde på ett för inställningen för maximal överbelastning gör det möjligt för AKS att minimera arbetsbelastningsstörningar genom att skapa en extra nod före avspärrning/tömning av befintliga program för att ersätta en äldre version av noden. Du kan anpassa maximalt överspänningsvärde per nodpool. När du ökar det maximala överspänningsvärdet slutförs uppgraderingsprocessen snabbare, men du kan uppleva fler störningar under uppgraderingsprocessen.

Ett maximalt överspänningsvärde 100% för ger till exempel den snabbaste möjliga uppgraderingsprocessen, men gör också att alla noder i nodpoolen töms samtidigt. Du kanske vill använda ett högre värde som detta för att testa miljöer. För produktionsnodpooler rekommenderar vi en inställning för maximal ökning på 33%.

AKS accepterar både heltalsvärden och ett procentvärde för maximal ökning. Till exempel:

Värdetyp Example Description
Integer 5 Fem extra noder för att skapa en våg
Procent 50% Överspänningsvärde för hälften av nuvarande antal noder i poolen

Högsta ökningsprocentvärden kan vara minst 1% och högst 100%. Ett procentvärde avrundas upp till närmaste nodantal. Om det maximala överspänningsvärdet är högre än det antal noder som krävs för att uppgraderas används antalet noder som ska uppgraderas för det maximala överspänningsvärdet.

Om det inte går att skala till MaxSurge-värdet på grund av kvot- eller kapacitetsbegränsningar försöker AKS automatiskt öka med 1 som standard som en säkerhetskopia.

Ange maximalt överspänningsvärde

Ange maximala överspänningsvärden för nya eller befintliga nodpooler med hjälp av az aks nodepool add kommandot eller az aks nodepool update med parametern --max-surge . Till exempel:

# Set max surge for a new node pool
az aks nodepool add \
    --name <node-pool-name> \
    --resource-group <resource-group-name> \
    --cluster-name <cluster-name> \
    --max-surge 33%

# Update max surge for an existing node pool 
az aks nodepool update \
    --name <node-pool-name> \
    --resource-group <resource-group-name> \
    --cluster-name <cluster-name> \
    --max-surge 5

Anpassa noder som inte är tillgängliga

Viktigt!

  • Max otillgänglighet skapar inte extraknoder under uppgraderingsprocessen. I stället spärrar AKS n noder (det högsta otillgängliga värdet) i taget och avlägsnar poddarna till andra noder i agentpoolen. Detta kan orsaka arbetsbelastningsstörningar om poddarna inte kan schemaläggas.
  • Maximalt otillgängligt kan orsaka fler fel på grund av otillfredsställande poddstörningsbudgetar (PDB) eftersom det finns färre resurser för poddar som ska schemaläggas på. Mer information finns i Felsökning av Pod Disruption Budgets.
  • Du kan inte ange maximalt otillgängligt för systemnodpooler.

AKS kan också konfigurera uppgraderingar för att inte använda en överspänningsnod och uppgradera noderna på plats. Värdet för maximalt otillgängligt avgör hur många noder som kan spärras av samtidigt och tömmas från de befintliga noderna i nodpoolen. Användning av "max unavailable" för en direkt uppgradering rekommenderas när det inte går att hämta ytterligare kvoter eller kapacitet för uppgraderingsrycket.

AKS accepterar både heltalsvärden och ett procentvärde för maximalt otillgängligt. Till exempel:

Värdetyp Example Description
Integer 5 Fem noder är avspärrade från de befintliga noderna
Procent 50% Hälften av det aktuella antalet noder i poolen är inte tillgängligt

Maximalt antal otillgängliga procentvärden kan vara minst 1% och högst 100%. Ett procentvärde avrundas upp till närmaste nodantal.

Ange maximalt otillgängligt värde

Ange högsta otillgängliga värden för nya eller befintliga nodpooler med hjälp av az aks nodepool addkommandot , az aks nodepool updateeller az aks nodepool upgrade med parametern --max-unavailable . Till exempel:

# Set max unavailable for a new node pool
az aks nodepool add \
    --name <node-pool-name> \
    --resource-group <resource-group-name> \
    --cluster-name <cluster-name> \
    --max-surge 0 \
    --max-unavailable 5

# Update max unavailable for an existing node pool 
az aks nodepool update \
    --name <node-pool-name> \
    --resource-group <resource-group-name> \
    --cluster-name <cluster-name> \
    --max-surge 0 \
    --max-unavailable 5

# Set max unavailable at upgrade time
az aks nodepool upgrade \
    --name <node-pool-name> \
    --resource-group <resource-group-name> \
    --cluster-name <cluster-name> \
    --max-surge 0 \
    --max-unavailable 5

Kapacitetsbaserad ökning (förhandsversion)

Viktigt!

AKS-förhandsversionsfunktioner är tillgängliga via självbetjäning och frivillig registrering. Förhandsversioner tillhandahålls "i befintligt skick" och "i mån av tillgång," och de är undantagna från servicenivåavtal och begränsad garanti. AKS-förhandsversioner stöds delvis av kundsupport efter bästa förmåga. Därför är dessa funktioner inte avsedda för produktionsanvändning. Mer information finns i följande supportartiklar:

Ange både MaxUnavailable- och MaxSurge-värden till överspänning baserat på tillgänglig kapacitet. När båda konfigurationerna är aktiverade kommer MaxSurge-värdet att försökas först. Om MaxSurge-värdet inte är tillgängligt på grund av kvot eller kapacitet kommer en ökning på 1 nod att försökas. Om en överkapacitet på 1 inte är tillgänglig kommer MaxUnavailable-konfigurationen att användas för att försöka en uppgradering på plats.

Tillägget aks-preview, Azure CLI, krävs för att använda kapacitetsbaserad skalning. MaxSurge och MaxUnavailable kan användas tillsammans för en kapacitetsbaserad ökning eller individuellt.

Anpassa tidsgränsen för noddränering

Du kan ha långvariga arbetsbelastningar på vissa poddar som du inte kan omallokera till en annan nod under körningstiden. Till exempel en minnesintensiv tillståndsberoende arbetsbelastning som måste slutföra körningen. I dessa fall kan du konfigurera en tidsgräns för noddränering som AKS respekterar i uppgraderingsarbetsflödet.

Standardvärdet för timeout för noddränering är 30 minuter. Timeoutvärden för noddränering kan vara minst 5 minuter och högst 24 timmar.

Om tidsgränsvärdet för drainage har passerat och poddar fortfarande körs, avbryts uppgraderingsoperationen. PUT Efterföljande åtgärder återupptar den stoppade uppgraderingen.

Tips/Råd

För långvariga poddar bör du också konfigurera terminationGracePeriodSeconds i poddspecifikationen.

Ange timeout-värde för noddränering

Ange tidsgräns för noddränering (i minuter) för nya eller befintliga nodpooler med hjälp av az aks nodepool add kommandot eller az aks nodepool update med parametern --drain-time-out .

# Set drain timeout for a new node pool
az aks nodepool add \
    --name <node-pool-name> \
    --resource-group <resource-group-name> \
    --cluster-name <cluster-name> \
    --drain-time-out 100

# Update drain timeout for an existing node pool
az aks nodepool update \
    --name <node-pool-name> \
    --resource-group <resource-group-name> \
    --cluster-name <cluster-name> \
    --drain-time-out 45

Anpassa nodens sugtid

För att aktivera en väntetid för en angiven tid mellan att tömma en nod och fortsätta med att ominstallera den och sedan gå vidare till nästa nod, kan du ställa in soak time. Blötläggningstiden ger dig möjlighet att utföra andra uppgifter under uppgraderingsprocessen, till exempel att kontrollera applikationens hälsa från en övervakningspanel.

Den förvalda dräneringstiden för noder är 0 minuter. Tidsvärden för nodblödning kan vara minst 0 minuter och högst 30 minuter. Vi rekommenderar att du håller blötläggningstiden så kort som möjligt. En högre nodförbrukningstid ökar den totala uppgraderingstiden och fördröjer identifieringen av problem.

Ange nodens blötläggningstid

Ange blötläggningstid (i minuter) för nya eller befintliga nodpooler med hjälp av kommandot az aks nodepool add, az aks nodepool update eller az aks nodepool upgrade med flaggan --node-soak-duration.

# Set node soak time for a new node pool
az aks nodepool add \
    --name <node-pool-name> \
    --resource-group <resource-group-name> \
    --cluster-name <cluster-name> \
    --node-soak-duration 10

# Update node soak time for an existing node pool
az aks nodepool update \
    --name <node-pool-name> \
    --resource-group <resource-group-name> \
    --cluster-name <cluster-name> \
    --max-surge 33% \
    --node-soak-duration 5

# Set node soak time when upgrading an existing node pool
az aks nodepool upgrade \
    --name <node-pool-name> \
    --resource-group <resource-group-name> \
    --cluster-name <cluster-name> \
    --max-surge 33% \
    --node-soak-duration 20

Visa händelser för AKS-noduppgradering

Visa uppgraderingshändelser med kommandot kubectl get events för att övervaka den löpande uppgraderingens förlopp.

kubectl get events --field-selector reason=Drain,reason=Surge,reason=Upgrade

Exempel på utdata under en uppgraderingshändelse:

default  2m1s  Normal  Drain    node/aks-nodepool1-12345678-vmss000001  Draining node: [aks-nodepool1-12345678-vmss000001]
default  9m22s Normal  Surge    node/aks-nodepool1-12345678-vmss000002  Created a surge node [aks-nodepool1-12345678-vmss000002 nodepool1] for agentpool nodepool1
default  1m45s Normal  Upgrade  node/aks-nodepool1-12345678-vmss000001  Soak duration 5m0s after draining node: aks-nodepool1-12345678-vmss000001

I följande tabell beskrivs rekommenderade uppgraderingsinställningar för nodpooler för produktionsarbetsbelastningar:

Inställning Recommendation
Maximal överspänning Ställ in på 33% för produktion-nodpooler
Timeout för tömning Konfigurera baserat på kraven för din pod med längst driftstid
Blötläggningstid Använd en kort varaktighet (0–5 minuter) om du inte behöver manuell verifiering
Pod-störningsbudgetar Konfigurera PDB:er för kritiska arbetsbelastningar för att hantera poddavveckling
Uppgraderingsordning Uppgradera nodpooler som inte är produktionsbaserade först för att verifiera den nya versionen