Delen via


PowerShell gebruiken voor automatische schaalaanpassing van clusters in AKS ingeschakeld door Azure Arc

Van toepassing op: AKS in Azure Local 22H2, AKS op Windows Server

U kunt PowerShell gebruiken om automatische schaalaanpassing in te schakelen en automatisch schalen van knooppuntgroepen in uw doelclusters te beheren in AKS die door Arc zijn ingeschakeld. U kunt PowerShell ook gebruiken om automatische schaalaanpassing van clusters te configureren en te beheren.

Een nieuw AksHciAutoScalerConfig-object maken

Als u een nieuw AksHciAutoScalerConfig-object wilt maken dat moet worden doorgegeven aan de New-AksHciCluster of Set-AksHciCluster opdracht, gebruikt u deze opdracht:

New-AksHciAutoScalerProfile -Name asp1 -AutoScalerProfileConfig @{ "min-node-count"=2; "max-node-count"=7; 'scale-down-unneeded-time'='1m'}

U kunt het object voor automatische schaalaanpassing opgeven bij het maken van uw cluster. Het object bevat de parameters voor uw automatische schaalaanpassing. Zie De profielen voor automatische schaalaanpassing gebruiken voor informatie over parameters.

Een bestaand AksHciAutoScalerConfig-profielobject wijzigen

Wanneer u een bestaand AksHciAutoScalerConfig-profielobject bijwerkt, worden clusters met dat object bijgewerkt om de nieuwe parameters te gebruiken:

Set-AksHciAutoScalerProfile -name myProfile -autoScalerProfileConfig @{ "max-node-count"=5; "min-node-count"=2 }

U kunt het object autoscalerconfig bijwerken, dat de parameters voor uw automatische schaalaanpassing bevat. Zie De profielen voor automatische schaalaanpassing gebruiken voor informatie over parameters.

Automatisch schalen inschakelen voor nieuwe clusters

Als u automatisch schalen wilt inschakelen voor alle nieuw gemaakte knooppuntgroepen, gebruikt u de volgende parameters met de New-AksHciCluster opdracht:

New-AksHciCluster -name mycluster -enableAutoScaler -autoScalerProfileName myAutoScalerProfile

Automatisch schalen inschakelen op een bestaand cluster

Als u automatisch schalen wilt inschakelen voor elke zojuist gemaakte knooppuntgroep in een bestaand cluster, gebruikt u de enableAutoScaler parameter met de Set-AksHciCluster opdracht:

Set-AksHciCluster -Name <string> [-enableAutoScaler <boolean>] [-autoScalerProfileName <String>] 

Automatisch schalen inschakelen voor een bestaande knooppuntgroep

Als u automatische schaalaanpassing wilt inschakelen voor een bestaande knooppuntgroep, gebruikt u de autoScaler parameter met de Set-AksHciNodePool opdracht:

Set-AksHciNodePool -clusterName <Your-Cluster-Name> -name <Your-NodePool-Name> -autoScaler $true

Automatische schaalaanpassing uitschakelen

Als u automatische schaalaanpassing wilt uitschakelen voor alle bestaande en nieuw gemaakte knooppuntgroepen in een bestaand cluster, stelt u deze in enableAutoScaler op onwaar met behulp van de Set-AksHciCluster opdracht:

Set-AksHciCluster -Name <string> -enableAutoScaler $false

Effectief gebruik maken van de horizontale automatische schaalaanpassing

Nu de cluster- en knooppuntgroep zijn geconfigureerd om automatisch te schalen, kunt u een workload configureren om ook te schalen op een manier die gebruikmaakt van de horizontale mogelijkheden voor automatisch schalen.

Er zijn twee methoden beschikbaar voor het schalen van werkbelastingen:

  • Automatische schaalaanpassing van horizontale kubernetes-pods: op basis van belastingskenmerken schaalt de horizontale automatische schaalaanpassing van pods (ook wel de horizontale automatische schaalaanpassing genoemd) de pods van een toepassingsimplementatie naar beschikbare knooppunten in het Kubernetes-cluster. Als er geen knooppunten meer beschikbaar zijn om te worden gepland, wordt met de horizontale automatische schaalaanpassing een nieuw knooppunt geïnstitueert waarnaar de pods moeten worden gepland. Als de belasting van de toepassing uitvalt, worden de knooppunten weer terug geschaald.
  • Antiaffiniteitsregels voor Kubernetes-knooppunten: Regels voor antiaffiniteit voor een Kubernetes-implementatie kunnen opgeven dat een set pods niet kan worden geschaald op hetzelfde knooppunt en een ander knooppunt is vereist om de werkbelasting te schalen. In combinatie met belastingskenmerken of het aantal doelpods voor de toepassingsexemplaren, instanteert de horizontale automatische schaalaanpassing nieuwe knooppunten in de knooppuntgroep om te voldoen aan aanvragen. Als de vraag naar toepassingen afvalt, schaalt de horizontale automatische schaalaanpassing opnieuw omlaag in de knooppuntgroep.

Deze sectie bevat enkele voorbeelden.

Horizontale automatische schaalaanpassing van pods

Vereisten:

  • AKS ingeschakeld door Arc is geïnstalleerd.
  • Het doelcluster is geïnstalleerd en verbonden met Azure.
  • Er wordt één Linux-knooppuntgroep geïmplementeerd, met ten minste één actief Linux-werkknooppunt.
  • Automatische schaalaanpassing van horizontale knooppunten is ingeschakeld op het doelcluster en de Linux-knooppuntgroep, zoals eerder beschreven.

We maken gebruik van het stapsgewijze voorbeeld van automatische schaalaanpassing van Kubernetes-pods om te laten zien hoe de horizontale automatische schaalaanpassing van pods werkt.

De horizontale automatische schaalaanpassing van pods werkt alleen als u het onderdeel Metrics Server in uw doelcluster implementeert.

Voer de volgende opdrachten uit om de metrische server te implementeren in een doelcluster met de naam mycluster:

Get-AksHciCredential -name mycluster
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

Nadat de Kubernetes Metrics Server is geïmplementeerd, kunt u een toepassing implementeren in de knooppuntgroep, die u gebruikt om te schalen. We gebruiken een testtoepassing van de Kubernetes-communitywebsite voor dit voorbeeld:

kubectl apply -f https://k8s.io/examples/application/php-apache.yaml
deployment.apps/php-apache created
service/php-apache created

Met deze opdracht maakt u een implementatie van een OP een Apache-webserver gebaseerde PHP-toepassing die een 'OK'-bericht retourneert naar een aanroepende client.

Configureer vervolgens de horizontale automatische schaalaanpassing van pods om een nieuwe pod te plannen wanneer het CPU-gebruik van de huidige pod 50 procent bereikt en schaalt van 1 tot 50 pods:

kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
horizontalpodautoscaler.autoscaling/php-apache autoscaled

U kunt de huidige status van de zojuist gemaakte horizontale pod automatisch schalen controleren door de volgende opdracht uit te voeren:

kubectl get hpa
NAME         REFERENCE                     TARGET    MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache/scale   0% / 50%  1         10        1          18s

Verhoog ten slotte de belasting op de webserver om deze uit te schalen. Open een nieuw PowerShell-venster en voer de volgende opdracht uit:

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"

Als u teruggaat naar het vorige PowerShell-venster en de volgende opdracht uitvoert, ziet u het aantal pods binnen een korte periode:

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

In dit voorbeeld wordt het aantal pods gewijzigd van 1 tot 7, zoals hier wordt weergegeven:

NAME         REFERENCE                     TARGET      MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache/scale   305% / 50%  1         10        7          3m

Als dit niet voldoende is om de automatische schaalaanpassing van knooppunten te activeren omdat alle pods op één knooppunt passen, opent u meer PowerShell-vensters en voert u meer load generator-opdrachten uit. Zorg ervoor dat u de naam wijzigt van de pod die u maakt telkens wanneer u de opdracht uitvoert. Gebruik bijvoorbeeld load-generator-2 in plaats van load-generator, zoals wordt weergegeven in de volgende opdracht.

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"

Controleer vervolgens het aantal knooppunten dat is geïnstantieerd met de volgende opdracht:

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

Als u een schaal omlaag wilt bekijken, drukt u op Ctrl-C om de load generator-pods te beëindigen en sluit u de PowerShell-vensters die eraan zijn gekoppeld. Na ongeveer 30 minuten ziet u dat het aantal pods omlaag gaat. Ongeveer 30 minuten later worden de inrichting van de knooppunten ongedaan gemaakt.

Zie Horizontale schaalaanpassing van pods voor meer informatie over de automatische schaalaanpassing van horizontale pods in Kubernetes.

Regels voor knooppuntaffiniteit

U kunt regels voor knooppuntaffiniteit gebruiken om kubernetes scheduler in staat te stellen pods alleen uit te voeren op een specifieke set knooppunten in een cluster of knooppuntgroep op basis van bepaalde kenmerken van het knooppunt. Als u de functie van de automatische schaalaanpassing van horizontale knooppunten wilt weergeven, kunt u dezelfde regels gebruiken om ervoor te zorgen dat slechts één exemplaar van een bepaalde pod op elk knooppunt wordt uitgevoerd.

Vereisten:

  • AKS Arc is geïnstalleerd.
  • Het doelcluster is geïnstalleerd en verbonden met Azure.
  • Er wordt één Linux-knooppuntgroep geïmplementeerd, met ten minste één actief Linux Worker-knooppunt.
  • Horizontale schaalaanpassing van knooppunten is ingeschakeld op het doelcluster en de Linux-knooppuntgroep, zoals eerder beschreven.

Maak een YAML-bestand met de volgende inhoud en sla het op als node-anti-affinity.yaml in een lokale map.

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

Open een PowerShell-venster en laad de referenties voor uw doelcluster. In dit voorbeeld heeft het cluster de naam mycluster:

Get-AksHciCredential -name mycluster

Pas nu het YAML-bestand toe op het doelcluster:

kubectl apply -f node-anti-affinity.yaml

Na enkele minuten kunt u de volgende opdracht gebruiken om te controleren of de nieuwe knooppunten online zijn gekomen:

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

Als u het knooppunt wilt verwijderen, verwijdert u de implementatie van de redis-server met deze opdracht:

kubectl delete -f node-anti-affinity.yaml

Zie Pods toewijzen aan knooppunten voor meer informatie over kubernetes-affiniteitsregels voor pods.

Problemen met horizontale automatische schaalaanpassing oplossen

Wanneer automatische schaalaanpassing voor horizontale pods is ingeschakeld voor een doelcluster, wordt er een nieuwe Kubernetes-implementatie <cluster_name>-cluster-autoscaler gemaakt in het beheercluster. Deze implementatie bewaakt het doelcluster om ervoor te zorgen dat er voldoende werkknooppunten zijn om pods te plannen.

Hier volgen enkele verschillende manieren om problemen op te sporen met betrekking tot de automatische schaalaanpassing:

  • De pods voor automatische schaalaanpassing van clusters die op het beheercluster worden uitgevoerd, verzamelen nuttige informatie over hoe het schaalaanpassingsbeslissingen neemt, het aantal knooppunten dat moet worden opgehaald of verwijderd en eventuele algemene fouten die het kan ondervinden. De automatische schaalaanpassing slaat deze informatie op in logboeken. Voer de volgende opdracht uit om toegang te krijgen tot de logboeken:

    kubectl --kubeconfig $(Get-AksHciConfig).Kva.kubeconfig logs -l app=<cluster_name>-cluster-autoscaler
    
  • Cloudoperator registreert Kubernetes-gebeurtenissen in het beheercluster. Dit kan handig zijn om te begrijpen wanneer de automatische schaalaanpassing is ingeschakeld of uitgeschakeld voor een cluster en een knooppuntgroep. Deze kunnen worden weergegeven door de volgende opdracht uit te voeren:

    kubectl --kubeconfig $(Get-AksHciConfig).Kva.kubeconfig get events
    
  • De implementatie van automatische schaalaanpassing van clusters maakt een configmap in het doelcluster dat wordt beheerd. Dit configmap bevat informatie over het statusclusterniveau van de automatische schaalaanpassing en per knooppuntgroep. Voer de volgende opdracht uit op het doelcluster om de status weer te geven:

    Notitie

    Zorg ervoor dat u de Get-AksHciCredentials -Name <clustername> informatie hebt opgehaald kubeconfig voor toegang tot het betreffende doelcluster.

    kubectl --kubeconfig ~\.kube\config get configmap cluster-autoscaler-status -o yaml
    
  • De automatische schaalaanpassing van clusters registreert gebeurtenissen in de status configmap van de automatische schaalaanpassing van clusters wanneer de knooppuntgroep van een cluster wordt geschaald. U kunt deze logboeken weergeven door deze opdracht uit te voeren op het doelcluster:

    kubectl --kubeconfig ~\.kube\config describe configmap cluster-autoscaler-status
    
  • De automatische schaalaanpassing van clusters verzendt gebeurtenissen op pods in het doelcluster wanneer er een schaalbeslissing wordt genomen als de pod niet kan worden gepland. Voer deze opdracht uit om de gebeurtenissen op een pod weer te geven:

    kubectl --kubeconfig ~\.kube\config describe pod <pod_name>
    

PowerShell-referentie

Zie de volgende referentiepagina's voor de PowerShell-cmdlets die automatische schaalaanpassing van clusters ondersteunen:

Volgende stappen