Använda PowerShell för automatisk skalning av kluster i AKS som aktiveras av Azure Arc
Gäller för: AKS på Azure Stack HCI 22H2, AKS på Windows Server
Du kan använda PowerShell för att aktivera autoskalning och för att hantera automatisk skalning av nodpooler i dina målkluster i AKS som aktiveras av Arc. Du kan också använda PowerShell för att konfigurera och hantera autoskalning av kluster.
Skapa ett nytt AksHciAutoScalerConfig-objekt
Om du vill skapa ett nytt AksHciAutoScalerConfig-objekt som ska skickas till New-AksHciCluster
kommandot eller Set-AksHciCluster
använder du det här kommandot:
New-AksHciAutoScalerProfile -Name asp1 -AutoScalerProfileConfig @{ "min-node-count"=2; "max-node-count"=7; 'scale-down-unneeded-time'='1m'}
Du kan ange autoskalningskonfigurationsobjektet när du skapar klustret. Objektet innehåller parametrarna för autoskalningen. Parameterinformation finns i Så här använder du autoskalningsprofilerna.
Ändra ett befintligt AksHciAutoScalerConfig-profilobjekt
När du uppdaterar ett befintligt AksHciAutoScalerConfig-profilobjekt uppdateras kluster som använder objektet för att använda de nya parametrarna:
Set-AksHciAutoScalerProfile -name myProfile -autoScalerProfileConfig @{ "max-node-count"=5; "min-node-count"=2 }
Du kan uppdatera autoskalningskonfigurationsobjektet , som innehåller parametrarna för autoskalningsobjektet. Parameterinformation finns i Så här använder du autoskalningsprofilerna.
Aktivera automatisk skalning för nya kluster
Om du vill aktivera automatisk skalning automatiskt i alla nyligen skapade nodpooler använder du följande parametrar med New-AksHciCluster
kommandot :
New-AksHciCluster -name mycluster -enableAutoScaler -autoScalerProfileName myAutoScalerProfile
Aktivera automatisk skalning i ett befintligt kluster
Om du vill aktivera automatisk skalning automatiskt på varje nyskapade nodpool i ett befintligt kluster använder du parametern enableAutoScaler
Set-AksHciCluster
med kommandot :
Set-AksHciCluster -Name <string> [-enableAutoScaler <boolean>] [-autoScalerProfileName <String>]
Aktivera automatisk skalning i en befintlig nodpool
Om du vill aktivera automatisk skalning i en befintlig nodpool använder du parametern autoScaler
med Set-AksHciNodePool
kommandot :
Set-AksHciNodePool -clusterName <Your-Cluster-Name> -name <Your-NodePool-Name> -autoScaler $true
Inaktivera autoskalning
Om du vill inaktivera automatisk skalning för alla befintliga och nyligen skapade nodpooler i ett befintligt kluster anger du enableAutoScaler
till false med kommandot Set-AksHciCluster
:
Set-AksHciCluster -Name <string> -enableAutoScaler $false
Använda den vågräta autoskalningen effektivt
Nu när klustret och nodpoolen har konfigurerats för automatisk skalning kan du konfigurera en arbetsbelastning för att även skala på ett sätt som använder de vågräta autoskalningsfunktionerna.
Två metoder är tillgängliga för arbetsbelastningsskalning:
- Kubernetes Horizontal Pod Autoscaler: Baserat på belastningsegenskaper skalar den horisontella podd-autoskalaren (även kallad horisontell autoskalning) poddarna för en programdistribution till tillgängliga noder i Kubernetes-klustret. Om det inte finns några fler noder som ska schemaläggas instansierar den vågräta autoskalningen en ny nod som poddarna ska schemaläggas till. Om programbelastningen minskar skalas noderna tillbaka igen.
- Kubernetes-nodskyddsregler: Regler mot tillhörighet för en Kubernetes-distribution kan ange att en uppsättning poddar inte kan skalas på samma nod, och en annan nod krävs för att skala arbetsbelastningen. I kombination med antingen belastningsegenskaper eller antalet målpoddar för programinstanserna instanser, instansierar den horisontella autoskalningen nya noder i nodpoolen för att uppfylla begäranden. Om programefterfrågan avtar skalar den vågräta autoskalningsappen ned nodpoolen igen.
Det här avsnittet innehåller några exempel.
Horisontell autoskalning av poddar
Förutsättningar:
- AKS som aktiveras av Arc är installerat.
- Målklustret är installerat och anslutet till Azure.
- En Linux-nodpool distribueras med minst en aktiv Linux-arbetsnod.
- Autoskalning av vågrät nod är aktiverad i målklustret och Linux-nodpoolen enligt beskrivningen tidigare.
Vi använder exemplet Kubernetes Horizontal Pod Autoscaler Walkthrough för att visa hur den vågräta podd-autoskalningen fungerar.
För att autoskalning av horisontell podd ska fungera måste du distribuera komponenten Metrics Server i målklustret.
Om du vill distribuera måttservern till ett målkluster med namnet mycluster
kör du följande kommandon:
Get-AksHciCredential -name mycluster
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
När Kubernetes Metrics Server har distribuerats kan du distribuera ett program till nodpoolen som du använder för att skala. Vi använder ett testprogram från Kubernetes community-webbplats för det här exemplet:
kubectl apply -f https://k8s.io/examples/application/php-apache.yaml
deployment.apps/php-apache created
service/php-apache created
Det här kommandot skapar en distribution av ett Apache-webbserverbaserat PHP-program som returnerar ett "OK"-meddelande till en anropande klient.
Konfigurera sedan horisontell podd autoskalning för att schemalägga en ny podd när CPU-användningen för den aktuella podden når 50 procent och skala från 1 till 50 poddar:
kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
horizontalpodautoscaler.autoscaling/php-apache autoscaled
Du kan kontrollera aktuell status för den nyligen skapade horisontella podd-autoskalningen genom att köra följande kommando:
kubectl get hpa
NAME REFERENCE TARGET MINPODS MAXPODS REPLICAS AGE
php-apache Deployment/php-apache/scale 0% / 50% 1 10 1 18s
Öka slutligen belastningen på webbservern för att se att den skalas ut. Öppna ett nytt PowerShell-fönster och kör följande kommando:
kubectl run -i --tty load-generator --rm --image=busybox:1.28 --restart=Never -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://php-apache; done"
Om du går tillbaka till föregående PowerShell-fönster och kör följande kommando bör du se hur många poddar som ändras inom en kort period:
kubectl get hpa php-apache --watch
NAME REFERENCE TARGET MINPODS MAXPODS REPLICAS AGE
php-apache Deployment/php-apache/scale 305% / 50% 1 10 1 3m
I det här exemplet ändras antalet poddar från 1 till 7, enligt följande:
NAME REFERENCE TARGET MINPODS MAXPODS REPLICAS AGE
php-apache Deployment/php-apache/scale 305% / 50% 1 10 7 3m
Om detta inte räcker för att utlösa nodens autoskalning eftersom alla poddar får plats på en nod öppnar du fler PowerShell-fönster och kör fler lastgeneratorkommandon. Se till att ändra namnet på podden som du skapar varje gång du kör kommandot. Använd till exempel load-generator-2
i stället för load-generator
, som du ser i följande kommando.
kubectl run -i --tty load-generator-2 --rm --image=busybox:1.28 --restart=Never -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://php-apache; done"
Kontrollera sedan antalet noder som instansieras med följande kommando:
kubectl get nodes
NAME STATUS ROLES AGE VERSION
moc-laondkmydzp Ready control-plane,master 3d4h v1.22.4
moc-lorl6k76q01 Ready <none> 3d4h v1.22.4
moc-lorl4323d02 Ready <none> 9m v1.22.4
moc-lorl43bc3c3 Ready <none> 2m v1.22.4
Om du vill titta på en nedskalning trycker du på CTRL-C för att avsluta belastningsgeneratorpoddarna och stänga de PowerShell-fönster som är associerade med dem. Efter cirka 30 minuter bör du se antalet poddar gå ned. Cirka 30 minuter senare avetableras noderna.
Mer information om Kubernetes Horizontal Pod Autoscaler finns i Horizontal Pod Autoscaling (Vågrät autoskalning av poddar).
Regler för nodtillhörighet
Du kan använda nodtillhörighetsregler för att göra det möjligt för Kubernetes-schemaläggaren att endast köra poddar på en specifik uppsättning noder i ett kluster eller en nodpool baserat på vissa egenskaper hos noden. Om du vill visa funktionen för autoskalning av vågrät nod kan du använda samma regler för att säkerställa att endast en instans av en viss podd körs på varje nod.
Förutsättningar:
- AKS Arc är installerat.
- Målklustret är installerat och anslutet till Azure.
- En Linux-nodpool distribueras med minst en aktiv Linux Worker-nod.
- Autoskalning av vågrät nod är aktiverad i målklustret och Linux-nodpoolen enligt beskrivningen tidigare.
Skapa en YAML-fil med följande innehåll och spara den som node-anti-affinity.yaml i en lokal mapp.
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis-cache
spec:
selector:
matchLabels:
app: store
replicas: 4
template:
metadata:
labels:
app: store
spec:
nodeSelector:
kubernetes.io/os: linux
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- store
topologyKey: "kubernetes.io/hostname"
containers:
- name: redis-server
image: redis:3.2-alpine
Öppna ett PowerShell-fönster och läs in autentiseringsuppgifterna för målklustret. I det här exemplet heter mycluster
klustret :
Get-AksHciCredential -name mycluster
Tillämpa nu YAML-filen på målklustret:
kubectl apply -f node-anti-affinity.yaml
Efter några minuter kan du använda följande kommando för att kontrollera att de nya noderna är online:
kubectl get nodes
NAME STATUS ROLES AGE VERSION
moc-laondkmydzp Ready control-plane,master 3d4h v1.22.4
moc-lorl6k76q01 Ready <none> 3d4h v1.22.4
moc-lorl4323d02 Ready <none> 9m v1.22.4
moc-lorl43bc3c3 Ready <none> 9m v1.22.4
moc-lorl44ef56c Ready <none> 9m v1.22.4
Ta bort noden genom att ta bort distributionen av redis-servern med det här kommandot:
kubectl delete -f node-anti-affinity.yaml
Mer information om Kubernetes poddtillhörighetsregler finns i Tilldela poddar till noder.
Felsöka horisontell autoskalning
När den horisontella podd-autoskalningen är aktiverad för ett målkluster skapas en ny Kubernetes-distribution med namnet <cluster_name>-cluster-autoscaler
i hanteringsklustret. Den här distributionen övervakar målklustret för att säkerställa att det finns tillräckligt med arbetsnoder för att schemalägga poddar.
Här följer några olika sätt att felsöka problem som rör autoskalning:
Klustrets autoskalningspoddar som körs i hanteringsklustret samlar in användbar information om hur den fattar skalningsbeslut, antalet noder som krävs för att ta upp eller ta bort samt eventuella allmänna fel som kan uppstå. Autoskalningen sparar den här informationen i loggar. Kör följande kommando för att komma åt loggarna:
kubectl --kubeconfig $(Get-AksHciConfig).Kva.kubeconfig logs -l app=<cluster_name>-cluster-autoscaler
Molnoperatörsloggar registrerar Kubernetes-händelser i hanteringsklustret, vilket kan vara användbart för att förstå när autoskalningen har aktiverats eller inaktiverats för ett kluster och en nodpool. Dessa kan visas genom att köra följande kommando:
kubectl --kubeconfig $(Get-AksHciConfig).Kva.kubeconfig get events
Distributionen av autoskalning av kluster skapar en
configmap
i målklustret som den hanterar. Dettaconfigmap
innehåller information om autoskalningsstatus på klusteromfattande nivå och per nodpool. Kör följande kommando mot målklustret för att visa statusen:Kommentar
Se till att du har kört
Get-AksHciCredentials -Name <clustername>
för att hämtakubeconfig
informationen för att komma åt målklustret i fråga.kubectl --kubeconfig ~\.kube\config get configmap cluster-autoscaler-status -o yaml
Autoskalning av kluster loggar händelser på autoskalningsstatusen
configmap
för klustret när det skalar ett klusters nodpool. Du kan visa dessa loggar genom att köra det här kommandot mot målklustret:kubectl --kubeconfig ~\.kube\config describe configmap cluster-autoscaler-status
Autoskalning av kluster genererar händelser på poddar i målklustret när det fattar ett skalningsbeslut om podden inte kan schemaläggas. Kör det här kommandot för att visa händelserna i en podd:
kubectl --kubeconfig ~\.kube\config describe pod <pod_name>
PowerShell-referens
Se följande referenssidor för PowerShell-cmdletar som stöder automatisk skalning av kluster:
- Get-AksHciAutoScalerProfile
- Get-AksHciCluster för AKS
- Get-AksHciNodePool för AKS
- New-AksHciAutoScalerProfile
- New-AksHciCluster
- New-AksHciNodePool
- Remove-AksHciAutoScalerProfile
- Set-AksHciAutoScalerProfile
- Set-AksHciCluster
- Set-AksHciNodePool