Använda autoskalning av kluster i Azure Kubernetes Service (AKS)

Om du vill hänga med i programkraven i AKS kan du behöva justera antalet noder som kör dina arbetsbelastningar. Komponenten autoskalning av kluster söker efter poddar i klustret som inte kan schemaläggas på grund av resursbegränsningar. När autoskalning av kluster identifierar problem skalar den upp antalet noder i nodpoolen för att uppfylla programkraven. Den kontrollerar också regelbundet noder på grund av brist på poddar som körs och skalar ned antalet noder efter behov.

Den här artikeln visar hur du aktiverar och hanterar autoskalning av kluster i AKS, som baseras på Kubernetes-versionen med öppen källkod.

Innan du börjar

Den här artikeln kräver Azure CLI version 2.0.76 eller senare. Kör az --version för att hitta versionen. Om du behöver installera eller uppgradera kan du läsa Installera Azure CLI.

Använda autoskalning av kluster i ett AKS-kluster

Viktigt!

Autoskalning av kluster är en Kubernetes-komponent. Även om AKS-klustret använder en VM-skalningsuppsättning för noderna ska du inte aktivera eller redigera inställningar manuellt för skalningsuppsättningens autoskalning. Låt Kubernetes-klustrets autoskalning hantera de skalningsinställningar som krävs. Mer information finns i Kan jag ändra AKS-resurserna i nodresursgruppen?

Aktivera autoskalning av kluster i ett nytt kluster

  1. Skapa en resursgrupp med kommandot az group create .

    az group create --name myResourceGroup --location eastus
    
  2. Skapa ett AKS-kluster med kommandot az aks create och aktivera och konfigurera klustrets autoskalning i nodpoolen för klustret med hjälp av parametern --enable-cluster-autoscaler och ange en nod --min-count och --max-count. Följande exempelkommando skapar ett kluster med en enda nod som backas upp av en vm-skalningsuppsättning, aktiverar autoskalning av kluster, anger minst en och högst tre noder:

    az aks create \
    --resource-group myResourceGroup \
    --name myAKSCluster \
    --node-count 1 \
    --vm-set-type VirtualMachineScaleSets \
    --load-balancer-sku standard \
    --enable-cluster-autoscaler \
    --min-count 1 \
    --max-count 3
    

    Det tar några minuter att skapa klustret och konfigurera autoskalningsinställningarna för klustret.

Aktivera autoskalning av kluster i ett befintligt kluster

  • Uppdatera ett befintligt kluster med kommandot az aks update och aktivera och konfigurera autoskalning av kluster i nodpoolen med hjälp av parametern --enable-cluster-autoscaler och ange en nod --min-count och --max-count. Följande exempelkommando uppdaterar ett befintligt AKS-kluster för att aktivera autoskalning av klustret i nodpoolen för klustret och anger minst en och högst tre noder:

    az aks update \
      --resource-group myResourceGroup \
      --name myAKSCluster \
      --enable-cluster-autoscaler \
      --min-count 1 \
      --max-count 3
    

    Det tar några minuter att uppdatera klustret och konfigurera autoskalningsinställningarna för klustret.

Inaktivera autoskalning av kluster i ett kluster

  • Inaktivera autoskalning av kluster med kommandot az aks update och parametern --disable-cluster-autoscaler .

    az aks update \
      --resource-group myResourceGroup \
      --name myAKSCluster \
      --disable-cluster-autoscaler
    

    Noder tas inte bort när autoskalning av kluster inaktiveras.

Kommentar

Du kan skala klustret manuellt när du har inaktiverat autoskalning av klustret med hjälp av az aks scale kommandot . Om du använder den vågräta autoskalningsappen för poddar fortsätter den att köras med autoskalning av klustret inaktiverad, men poddar kanske inte kan schemaläggas om alla nodresurser används.

Återaktivera autoskalning av klustret i ett kluster

Du kan återaktivera autoskalning av klustret i ett befintligt kluster med hjälp av az aks update kommandot och ange parametrarna --enable-cluster-autoscaler, --min-countoch --max-count .

Använda autoskalning av kluster i nodpooler

Använda autoskalning av kluster i flera nodpooler

Du kan använda autoskalning av kluster med flera nodpooler och aktivera autoskalning av klustret på varje enskild nodpool och skicka unika regler för automatisk skalning till dem.

  • Uppdatera inställningarna i en befintlig nodpool med hjälp av az aks nodepool update kommandot .

    az aks nodepool update \
      --resource-group myResourceGroup \
      --cluster-name myAKSCluster \
      --name nodepool1 \
      --update-cluster-autoscaler \
      --min-count 1 \
      --max-count 5
    

Inaktivera autoskalning av kluster i en nodpool

  • Inaktivera autoskalning av kluster i en nodpool med hjälp av az aks nodepool update kommandot och parametern --disable-cluster-autoscaler .

    az aks nodepool update \
      --resource-group myResourceGroup \
      --cluster-name myAKSCluster \
      --name nodepool1 \
      --disable-cluster-autoscaler
    

Återaktivera autoskalning av klustret i en nodpool

Du kan återaktivera autoskalning av klustret i en nodpool med hjälp av az aks nodepool update kommandot och ange parametrarna --enable-cluster-autoscaler, --min-countoch --max-count .

Kommentar

Om du planerar att använda autoskalning av kluster med nodpooler som sträcker sig över flera zoner och använder schemaläggningsfunktioner relaterade till zoner, till exempel volymtopologisk schemaläggning, rekommenderar vi att du har en nodpool per zon och aktiverar --balance-similar-node-groups via autoskalningsprofilen. Detta säkerställer att autoskalningen kan skalas upp och hålla storleken på nodpoolerna balanserade.

Uppdatera autoskalningsinställningarna för kluster

När programmets krav ändras kan du behöva justera antalet autoskalningsnoder för kluster för att skala effektivt.

  • Ändra antalet noder med kommandot az aks update och uppdatera autoskalning av klustret med hjälp av parametern --update-cluster-autoscaler och ange den uppdaterade noden --min-count och --max-count.

    az aks update \
      --resource-group myResourceGroup \
      --name myAKSCluster \
      --update-cluster-autoscaler \
      --min-count 1 \
      --max-count 5
    

Kommentar

Autoskalning av kluster framtvingar det minsta antalet i fall där det faktiska antalet sjunker under minimivärdet på grund av externa faktorer, till exempel under en avhysning av oanvänd kapacitet eller vid ändring av minsta antal värden från AKS-API:et.

Använda autoskalningsprofilen för kluster

Du kan konfigurera mer detaljerad information om autoskalning av kluster genom att ändra standardvärdena i autoskalningsprofilen för hela klustret. Till exempel inträffar en nedskalningshändelse när noderna är underutnyttjade efter 10 minuter. Om du har arbetsbelastningar som körs var 15:e minut kanske du vill ändra autoskalningsprofilen för att skala ned underutnyttjade noder efter 15 eller 20 minuter. När du aktiverar autoskalning av kluster används en standardprofil om du inte anger olika inställningar.

Viktigt!

Autoskalningsprofilen för kluster påverkar alla nodpooler som använder autoskalning av kluster. Du kan inte ange en autoskalningsprofil per nodpool. När du anger profilen börjar alla befintliga nodpooler med autoskalning av klustret omedelbart att börja använda profilen.

Profilinställningar för autoskalning av kluster

I följande tabell visas de tillgängliga inställningarna för autoskalningsprofilen för kluster:

Inställning Beskrivning Default value
scan-interval Hur ofta klustret omvärderas för upp- eller nedskalning. 10 sekund
scale-down-delay-after-add Hur lång tid efter att utvärderingen av nedskalning har skalats upp återupptas. 10 minuter
scale-down-delay-after-delete Hur lång tid efter borttagning av noder som nedskalningsutvärderingen återupptas. scan-interval
scale-down-delay-after-failure Hur lång tid efter nedskalningsfel som nedskalningsutvärderingen återupptas. Tre minuter
scale-down-unneeded-time Hur länge en nod ska vara onödig innan den är berättigad till nedskalning. 10 minuter
scale-down-unready-time Hur länge en oläst nod ska vara onödig innan den är berättigad till nedskalning. 20 minuter
ignore-daemonsets-utilization (Förhandsversion) Om DaemonSet-poddar ignoreras vid beräkning av resursanvändning för nedskalning. false
daemonset-eviction-for-empty-nodes (Förhandsversion) Om DaemonSet-poddar kommer att avslutas korrekt från tomma noder. false
daemonset-eviction-for-occupied-nodes (Förhandsversion) Om DaemonSet-poddar ska avslutas korrekt från icke-tomma noder. true
scale-down-utilization-threshold Nodanvändningsnivå, definierad som summan av begärda resurser dividerat med kapacitet, där en nod kan övervägas för nedskalning. 0,5
max-graceful-termination-sec Maximalt antal sekunder som autoskalning av klustret väntar på poddavslut när du försöker skala ned en nod. 600 sekunder
balance-similar-node-groups Identifierar liknande nodpooler och balanserar antalet noder mellan dem. false
expander Typ av nodpoolsexp expanderare som används vid uppskalning. Möjliga värden är most-pods, random, least-wasteoch priority. random
skip-nodes-with-local-storage Om truetar inte autoskalning av kluster bort noder med poddar med lokal lagring, till exempel EmptyDir eller HostPath. false
skip-nodes-with-system-pods Om truetar inte autoskalning av kluster bort noder med poddar från kube-system (förutom DaemonSet eller speglingspoddar). true
max-empty-bulk-delete Maximalt antal tomma noder som kan tas bort samtidigt. 10 noder
new-pod-scale-up-delay För scenarier som burst-/batchskala där du inte vill att CA ska agera innan Kubernetes-schemaläggaren kan schemalägga alla poddar kan du be CA:en att ignorera oplanerade poddar innan de når en viss ålder. 0 sekunder
max-total-unready-percentage Maximal procentandel olästa noder i klustret. När den här procentandelen har överskridits stoppar ca-certifikatet åtgärder. 45 %
max-node-provision-time Maximal tid som autoskalningen väntar på att en nod ska etableras. 15 minuter
ok-total-unready-count Antal tillåtna olästa noder, oavsett max-total-unready-percentage. Tre noder

Ange autoskalningsprofilen för klustret i ett nytt kluster

  • Skapa ett AKS-kluster med kommandot az aks create och ange autoskalningsprofilen för klustret med hjälp av parametern cluster-autoscaler-profile .

    az aks create \
      --resource-group myResourceGroup \
      --name myAKSCluster \
      --node-count 1 \
      --enable-cluster-autoscaler \
      --min-count 1 \
      --max-count 3 \
      --cluster-autoscaler-profile scan-interval=30s
    

Ange autoskalningsprofilen för klustret i ett befintligt kluster

  • Ange autoskalning av kluster i ett befintligt kluster med hjälp av az aks update kommandot och parametern cluster-autoscaler-profile . I följande exempel konfigureras inställningen för genomsökningsintervall som 30-talet:

    az aks update \
      --resource-group myResourceGroup \
      --name myAKSCluster \
      --cluster-autoscaler-profile scan-interval=30s
    

Konfigurera autoskalningsprofil för kluster för aggressiv nedskalning

Kommentar

Att skala ned aggressivt rekommenderas inte för kluster med frekvent utskalning och inskalning inom korta intervall, eftersom det potentiellt kan leda till längre nodetableringstider under dessa omständigheter. Att öka scale-down-delay-after-add kan hjälpa under dessa omständigheter genom att hålla noden kvar längre för att hantera inkommande arbetsbelastningar.

 az aks update \
     --resource-group myResourceGroup \
     --name myAKSCluster \
     --cluster-autoscaler-profile scan-interval=30s, scale-down-delay-after-add=0s,scale-down-delay-after-failure=30s,scale-down-unneeded-time=3m,scale-down-unready-time=3m,max-graceful-termination-sec=30,skip-nodes-with-local-storage=false,max-empty-bulk-delete=1000,max-total-unready-percentage=100,ok-total-unready-count=1000,max-node-provision-time=15m

Konfigurera autoskalningsprofil för kluster för bursty-arbetsbelastningar

 az aks update \   
     --resource-group "myResourceGroup" \
     --name myAKSCluster \ 
     --cluster-autoscaler-profile scan-interval=20s,scale-down-delay-after-add=10m,scale-down-delay-after-failure=1m,scale-down-unneeded-time=5m,scale-down-unready-time=5m,max-graceful-termination-sec=30,skip-nodes-with-local-storage=false,max-empty-bulk-delete=100,max-total-unready-percentage=100,ok-total-unready-count=1000,max-node-provision-time=15m

Återställa autoskalningsprofilen för kluster till standardvärden

  • Återställ autoskalningsprofilen för klustret med kommandot az aks update .

    az aks update \
      --resource-group myResourceGroup \
      --name myAKSCluster \
      --cluster-autoscaler-profile ""
    

Hämta loggar och status för autoskalning av kluster

Du kan hämta loggar och statusuppdateringar från autoskalning av kluster för att diagnostisera och felsöka autoskalningshändelser. AKS hanterar klustrets autoskalning åt dig och kör den i det hanterade kontrollplanet. Du kan aktivera kontrollplansnoden för att se loggarna och åtgärderna från autoskalning av klustret.

  1. Konfigurera en regel för resursloggar för att skicka autoskalningsloggar för kluster till Log Analytics med hjälp av anvisningarna här. Kontrollera att du markerar kryssrutan för cluster-autoscaler när du väljer alternativ för Loggar.

  2. Välj avsnittet Logg i klustret.

  3. Ange följande exempelfråga i Log Analytics:

    AzureDiagnostics
    | where Category == "cluster-autoscaler"
    

    Så länge det finns loggar att hämta bör du se loggar som liknar följande loggar:

    Skärmbild av Log Analytics-loggar.

  4. Visa autoskalning av kluster – uppskalning som inte utlösts i CLI

    kubectl get events --field-selector source=cluster-autoscaler,reason=NotTriggerScaleUp
    
  5. Visa varningshändelser för autoskalning av kluster i CLI

    kubectl get events --field-selector source=cluster-autoscaler,type=Warning
    
  6. Autoskalning av kluster skriver också ut hälsostatusen till en configmap namngiven cluster-autoscaler-status. Du kan hämta dessa loggar med hjälp av följande kubectl kommando:

    kubectl get configmap -n kube-system cluster-autoscaler-status -o yaml
    

Mer information finns i Vanliga frågor och svar om Kubernetes/autoskalning av GitHub-projekt.

Autoskalningsmått för kluster

Du kan aktivera kontrollplansmått (förhandsversion) för att se loggar och åtgärder från autoskalning av kluster med Azure Monitor-hanterade tjänsten för Prometheus-tillägget

Nästa steg

Den här artikeln visar hur du automatiskt skalar antalet AKS-noder. Du kan också använda den vågräta autoskalningsappen för att automatiskt justera antalet poddar som kör programmet. Anvisningar om hur du använder den vågräta podd-autoskalningen finns i Skala program i AKS.

Mer information om hur du kan förbättra användningen av klusterresurser och frigöra processor och minne för andra poddar finns i Lodrät autoskalning av poddar.