Udostępnij za pośrednictwem


Używanie programu PowerShell do automatycznego skalowania klastra w usłudze AKS włączonej przez usługę Azure Arc

Dotyczy: usługa AKS w usłudze Azure Stack HCI 22H2, AKS w systemie Windows Server

Program PowerShell umożliwia automatyczne skalowanie i zarządzanie automatycznym skalowaniem pul węzłów w klastrach docelowych w usłudze AKS z włączoną usługą Arc. Program PowerShell umożliwia również konfigurowanie skalowania automatycznego klastra i zarządzanie nim.

Tworzenie nowego obiektu AksHciAutoScalerConfig

Aby utworzyć nowy obiekt AksHciAutoScalerConfig w celu przekazania do New-AksHciCluster polecenia lub Set-AksHciCluster , użyj następującego polecenia:

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

Obiekt autoscalerconfig można podać podczas tworzenia klastra. Obiekt zawiera parametry autoskalatora. Aby uzyskać informacje o parametrach, zobacz How to use the autoscaler profiles (Jak używać profilów skalowania automatycznego).

Zmienianie istniejącego obiektu profilu AksHciAutoScalerConfig

Podczas aktualizowania istniejącego obiektu profilu AksHciAutoScalerConfig klastry używające tego obiektu są aktualizowane w celu używania nowych parametrów:

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

Możesz zaktualizować obiekt autoscalerconfig , który zawiera parametry autoskalatora. Aby uzyskać informacje o parametrach, zobacz How to use the autoscaler profiles (Jak używać profilów skalowania automatycznego).

Włączanie skalowania automatycznego dla nowych klastrów

Aby włączyć automatyczne skalowanie we wszystkich nowo utworzonych pulach węzłów, użyj następujących parametrów za New-AksHciCluster pomocą polecenia :

New-AksHciCluster -name mycluster -enableAutoScaler -autoScalerProfileName myAutoScalerProfile

Włączanie skalowania automatycznego w istniejącym klastrze

Aby włączyć automatyczne skalowanie w każdej nowo utworzonej puli węzłów w istniejącym klastrze, użyj parametru enableAutoScaler z poleceniem Set-AksHciCluster :

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

Włączanie skalowania automatycznego w istniejącej puli węzłów

Aby włączyć skalowanie automatyczne w istniejącej puli węzłów, użyj parametru autoScaler z poleceniem Set-AksHciNodePool :

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

Wyłączanie autoskalowania

Aby wyłączyć skalowanie automatyczne we wszystkich istniejących i nowo utworzonych pulach węzłów w istniejącym klastrze, ustaw enableAutoScaler wartość false przy użyciu Set-AksHciCluster polecenia :

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

Efektywne korzystanie z narzędzia do automatycznego skalowania poziomego

Teraz, gdy klaster i pula węzłów są skonfigurowane do automatycznego skalowania, można skonfigurować obciążenie w taki sposób, aby korzystał z możliwości skalowania automatycznego w poziomie.

Dostępne są dwie metody skalowania obciążeń:

  • Rozwiązanie Kubernetes Horizontal Pod Autoscaler: na podstawie właściwości obciążenia narzędzie Horizontal Pod Autoscaler (znane również jako narzędzie do automatycznego skalowania poziomego) skaluje zasobniki wdrożenia aplikacji do dostępnych węzłów w klastrze Kubernetes. Jeśli nie ma więcej węzłów do zaplanowania, narzędzie do automatycznego skalowania poziomego tworzy wystąpienie nowego węzła, do którego mają być zaplanowane zasobniki. Jeśli obciążenie aplikacji spadnie, węzły zostaną ponownie przeskalowane ponownie.
  • Reguły anty-koligacji węzła Kubernetes: Reguły ochrony przed koligacją dla wdrożenia platformy Kubernetes mogą określać, że zestaw zasobników nie może być skalowany w tym samym węźle, a inny węzeł jest wymagany do skalowania obciążenia. W połączeniu z charakterystyką obciążenia lub liczbą zasobników docelowych dla wystąpień aplikacji narzędzie do automatycznego skalowania poziomego tworzy wystąpienie nowych węzłów w puli węzłów w celu spełnienia żądań. Jeśli zapotrzebowanie na aplikację ustąpi, narzędzie skalowania automatycznego w poziomie ponownie skaluje pulę węzłów w dół.

Ta sekcja zawiera kilka przykładów.

Narzędzie do automatycznego skalowania zasobników w poziomie

Wymagania wstępne:

  • Usługa AKS włączona przez usługę Arc jest zainstalowana.
  • Klaster docelowy jest zainstalowany i połączony z platformą Azure.
  • Wdrożono jedną pulę węzłów systemu Linux z co najmniej jednym aktywnym węzłem roboczym systemu Linux.
  • Narzędzie do automatycznego skalowania węzłów w poziomie jest włączone w klastrze docelowym i puli węzłów systemu Linux, zgodnie z wcześniejszym opisem.

Używamy przykładu rozwiązania Kubernetes Horizontal Pod Autoscaler, aby pokazać, jak działa narzędzie Horizontal Pod Autoscaler.

Aby narzędzie Horizontal Pod Autoscaler działało, należy wdrożyć składnik Serwera metryk w klastrze docelowym.

Aby wdrożyć serwer metryk w klastrze docelowym o nazwie mycluster, uruchom następujące polecenia:

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

Po wdrożeniu serwera metryk platformy Kubernetes można wdrożyć aplikację w puli węzłów, która służy do skalowania. W tym przykładzie używamy aplikacji testowej z witryny internetowej społeczności Platformy Kubernetes:

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

To polecenie tworzy wdrożenie aplikacji PHP opartej na serwerze internetowym Apache, która zwróci komunikat "OK" do wywołującego klienta.

Następnie skonfiguruj narzędzie Horizontal Pod Autoscaler tak, aby planować nowy zasobnik, gdy użycie procesora CPU bieżącego zasobnika osiągnie 50% i skaluj z 1 do 50 zasobników:

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

Bieżący stan nowo utworzonego narzędzia Horizontal Pod Autoscaler można sprawdzić, uruchamiając następujące polecenie:

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

Na koniec zwiększ obciążenie serwera internetowego, aby zobaczyć skalowanie w poziomie. Otwórz nowe okno programu PowerShell i uruchom następujące polecenie:

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"

Jeśli wrócisz do poprzedniego okna programu PowerShell i uruchom następujące polecenie, w krótkim czasie powinna zostać wyświetlona liczba zasobników:

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

W tym przykładzie liczba zasobników zmienia się z 1 na 7, jak pokazano poniżej:

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

Jeśli nie wystarczy, aby wyzwolić narzędzie do automatycznego skalowania węzła, ponieważ wszystkie zasobniki mieszczą się w jednym węźle, otwórz więcej okien programu PowerShell i uruchom więcej poleceń generatora obciążenia. Pamiętaj, aby zmienić nazwę tworzonego zasobnika za każdym razem, gdy uruchamiasz polecenie. Na przykład użyj polecenia load-generator-2 zamiast load-generator, jak pokazano w poniższym poleceniu.

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"

Następnie sprawdź liczbę węzłów, których wystąpienie jest tworzone za pomocą następującego polecenia:

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

Aby obejrzeć skalowanie w dół, naciśnij CTRL-C, aby zakończyć zasobniki generatora obciążenia i zamknąć skojarzone z nimi okna programu PowerShell. Po około 30 minutach powinna zostać wyświetlona liczba zasobników. Około 30 minut później węzły zostaną anulowane.

Aby uzyskać więcej informacji na temat narzędzia Kubernetes Horizontal Pod Autoscaler, zobacz Horizontal Pod Autoscaling (Skalowanie w poziomie zasobnika).

Reguły koligacji węzła

Możesz użyć reguł koligacji węzłów, aby umożliwić harmonogramowi Kubernetes uruchamianie zasobników tylko na określonym zestawie węzłów w klastrze lub puli węzłów na podstawie określonych cech węzłów. Aby wyświetlić funkcję narzędzia do automatycznego skalowania węzłów poziomych, możesz użyć tych samych reguł, aby upewnić się, że tylko jedno wystąpienie danego zasobnika jest uruchamiane w każdym węźle.

Wymagania wstępne:

  • Usługa AKS Arc jest zainstalowana.
  • Klaster docelowy jest zainstalowany i połączony z platformą Azure.
  • Wdrożono jedną pulę węzłów systemu Linux z co najmniej jednym aktywnym węzłem procesu roboczego systemu Linux.
  • Narzędzie do automatycznego skalowania węzłów w poziomie jest włączone w klastrze docelowym i puli węzłów systemu Linux, zgodnie z wcześniejszym opisem.

Utwórz plik YAML z następującą zawartością i zapisz go jako plik node-anti-affinity.yaml w folderze lokalnym.

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

Otwórz okno programu PowerShell i załaduj poświadczenia dla klastra docelowego. W tym przykładzie klaster ma nazwę mycluster:

Get-AksHciCredential -name mycluster

Teraz zastosuj plik YAML do klastra docelowego:

kubectl apply -f node-anti-affinity.yaml

Po kilku minutach możesz użyć następującego polecenia, aby sprawdzić, czy nowe węzły są dostępne w trybie 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

Aby usunąć węzeł, usuń wdrożenie serwera redis za pomocą następującego polecenia:

kubectl delete -f node-anti-affinity.yaml

Aby uzyskać więcej informacji na temat reguł koligacji zasobników platformy Kubernetes, zobacz Przypisywanie zasobników do węzłów.

Rozwiązywanie problemów z skalowaniem automatycznym w poziomie

Po włączeniu narzędzia Horizontal Pod Autoscaler dla klastra docelowego w klastrze zarządzania zostanie utworzone nowe wdrożenie Kubernetes o nazwie <cluster_name>-cluster-autoscaler . To wdrożenie monitoruje klaster docelowy, aby upewnić się, że do planowania zasobników jest wystarczająca liczba węzłów roboczych.

Poniżej przedstawiono kilka różnych sposobów debugowania problemów związanych z skalowaniem automatycznym:

  • Zasobniki automatycznego skalowania klastra uruchomione w klastrze zarządzania zbierają przydatne informacje na temat sposobu podejmowania decyzji dotyczących skalowania, liczby węzłów, które muszą zostać wyświetlone lub usunięte, oraz wszelkich ogólnych błędów, które mogą wystąpić. Autoskalator zapisuje te informacje w dziennikach. Uruchom następujące polecenie, aby uzyskać dostęp do dzienników:

    kubectl --kubeconfig $(Get-AksHciConfig).Kva.kubeconfig logs -l app=<cluster_name>-cluster-autoscaler
    
  • Dzienniki operatorów chmury rejestrują zdarzenia Kubernetes w klastrze zarządzania, co może być przydatne do zrozumienia, kiedy narzędzie do automatycznego skalowania zostało włączone lub wyłączone dla klastra i puli węzłów. Można je wyświetlić, uruchamiając następujące polecenie:

    kubectl --kubeconfig $(Get-AksHciConfig).Kva.kubeconfig get events
    
  • Wdrożenie skalowania automatycznego klastra tworzy configmap klaster docelowy, który zarządza. Zawiera informacje configmap o poziomie całego klastra stanu narzędzia do automatycznego skalowania i puli węzłów. Uruchom następujące polecenie względem klastra docelowego, aby wyświetlić stan:

    Uwaga

    Upewnij się, że uruchomiono polecenie Get-AksHciCredentials -Name <clustername> , aby pobrać informacje w kubeconfig celu uzyskania dostępu do danego klastra docelowego.

    kubectl --kubeconfig ~\.kube\config get configmap cluster-autoscaler-status -o yaml
    
  • Narzędzie do automatycznego skalowania klastra rejestruje zdarzenia w stanie configmap automatycznego skalowania klastra podczas skalowania puli węzłów klastra. Te dzienniki można wyświetlić, uruchamiając to polecenie względem klastra docelowego:

    kubectl --kubeconfig ~\.kube\config describe configmap cluster-autoscaler-status
    
  • Narzędzie do automatycznego skalowania klastra emituje zdarzenia na zasobnikach w klastrze docelowym, gdy podejmuje decyzję o skalowaniu, jeśli nie można zaplanować zasobnika. Uruchom to polecenie, aby wyświetlić zdarzenia na zasobniku:

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

Informacje dotyczące programu PowerShell

Zobacz następujące strony referencyjne poleceń cmdlet programu PowerShell, które obsługują skalowanie automatyczne klastra:

Następne kroki