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 manuellt aktivera eller redigera inställningarna för 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
Skapa en resursgrupp med kommandot
az group create
.az group create --name myResourceGroup --location eastus
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 \ --generate-ssh-keys
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-count
och --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-count
och --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 | Standardvärde |
---|---|---|
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 |
Om DaemonSet-poddar ignoreras vid beräkning av resursanvändning för nedskalning. | false |
daemonset-eviction-for-empty-nodes |
Om DaemonSet-poddar kommer att avslutas korrekt från tomma noder. | false |
daemonset-eviction-for-occupied-nodes |
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-waste och priority . |
random |
skip-nodes-with-local-storage |
Om true tar inte autoskalning av kluster bort noder med poddar med lokal lagring, till exempel EmptyDir eller HostPath. |
false |
skip-nodes-with-system-pods |
Om true tar 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 |
Kommentar
Parametrarna ignore-daemonsets-utilization, daemonset-eviction-for-empty-nodes och daemonset-eviction-for-occupied-nodes är GA från API-version 2024-05-01. Om du använder CLI för att uppdatera dessa flaggor kontrollerar du att du använder version 2.63 eller senare.
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 parameterncluster-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 \ --generate-ssh-keys
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 parameterncluster-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=0m,scale-down-delay-after-failure=1m,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.
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.Välj avsnittet Logg i klustret.
Ange följande exempelfråga i Log Analytics:
AzureDiagnostics | where Category == "cluster-autoscaler"
Visa uppskalning av kluster autoskalning som inte utlöses av händelser i CLI.
kubectl get events --field-selector source=cluster-autoscaler,reason=NotTriggerScaleUp
Visa varningshändelser för autoskalning av kluster i CLI.
kubectl get events --field-selector source=cluster-autoscaler,type=Warning
Autoskalning av kluster skriver också ut hälsostatusen till en
configmap
namngivencluster-autoscaler-status
. Du kan hämta dessa loggar med hjälp av följandekubectl
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.
Azure Kubernetes Service