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 informacjeconfigmap
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 wkubeconfig
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:
- Get-AksHciAutoScalerProfile
- Get-AksHciCluster dla usługi AKS
- Get-AksHciNodePool dla usługi AKS
- New-AksHciAutoScalerProfile
- New-AksHciCluster
- New-AksHciNodePool
- Remove-AksHciAutoScalerProfile
- Set-AksHciAutoScalerProfile
- Set-AksHciCluster
- Set-AksHciNodePool