Dela via


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 myclusterkö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 myclusterklustret :

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. Detta configmap 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ämta kubeconfig 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:

Nästa steg