Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für: AKS unter Windows Server
Sie können PowerShell verwenden, um den Autoscaler zu aktivieren und die automatische Skalierung von Knotenpools in Ihren Zielclustern in AKS auf Windows Server zu verwalten. Sie können auch PowerShell verwenden, um die automatische Skalierung von Clustern zu konfigurieren und zu verwalten.
Erstellen eines neuen AksHciAutoScalerConfig-Objekts
Um ein neues AksHciAutoScalerConfig -Objekt zu erstellen, das Sie an den New-AksHciCluster
- oder Set-AksHciCluster
-Befehl übergeben, verwenden Sie diesen Befehl:
New-AksHciAutoScalerProfile -Name asp1 -AutoScalerProfileConfig @{ "min-node-count"=2; "max-node-count"=7; 'scale-down-unneeded-time'='1m'}
Sie können das autoscalerconfig-Objekt beim Erstellen Ihres Clusters bereitstellen. Das Objekt enthält die Parameter für Ihre Autoskalierung. Informationen zu den Parametern finden Sie unter Wie Sie die Autoscaler-Profile verwenden.
Ändern eines vorhandenen AksHciAutoScalerConfig-Profilobjekts
Wenn Sie ein bestehendes AksHciAutoScalerConfig-Profil -Objekt aktualisieren, werden Cluster, die dieses Objekt verwenden, so aktualisiert, dass sie die neuen Parameter verwenden:
Set-AksHciAutoScalerProfile -name myProfile -autoScalerProfileConfig @{ "max-node-count"=5; "min-node-count"=2 }
Sie können das Objekt autoscalerconfig aktualisieren, das die Parameter für Ihren Autoscaler enthält. Informationen zu den Parametern finden Sie unter Wie Sie die Autoscaler-Profile verwenden.
Aktivieren der automatischen Skalierung für neue Cluster
Um die automatische Skalierung für alle neu erstellten Knotenpools zu aktivieren, verwenden Sie die folgenden Parameter mit dem Befehl New-AksHciCluster
:
New-AksHciCluster -name mycluster -enableAutoScaler -autoScalerProfileName myAutoScalerProfile
Aktivieren der automatischen Skalierung für einen vorhandenen Cluster
Um die automatische Skalierung für jeden neu erstellten Knotenpool in einem bestehenden Cluster zu aktivieren, verwenden Sie den Parameter enableAutoScaler
mit dem Befehl Set-AksHciCluster
:
Set-AksHciCluster -Name <string> [-enableAutoScaler <boolean>] [-autoScalerProfileName <String>]
Aktivieren Sie die automatische Skalierung für einen bestehenden Knotenpool
Um die automatische Skalierung für einen bestehenden Knotenpool zu aktivieren, verwenden Sie den Parameter autoScaler
mit dem Befehl Set-AksHciNodePool
:
Set-AksHciNodePool -clusterName <Your-Cluster-Name> -name <Your-NodePool-Name> -autoScaler $true
Deaktivieren der automatischen Skalierung
Um die automatische Skalierung für alle bestehenden und neu erstellten Knotenpools in einem bestehenden Cluster zu deaktivieren, setzen Sie enableAutoScaler
mit dem Befehl Set-AksHciCluster
auf false:
Set-AksHciCluster -Name <string> -enableAutoScaler $false
Effektive Nutzung der horizontalen Autoskalierung
Nun, da der Cluster und der Knotenpool für die automatische Skalierung konfiguriert sind, können Sie eine Arbeitslast so konfigurieren, dass sie ebenfalls skaliert und die horizontalen Autoscaler-Funktionen nutzt.
Es gibt zwei Methoden zur Skalierung der Arbeitslast:
- Kubernetes Horizontal Pod Autoscaler: Der horizontale Pod-Autoscaler (auch bekannt als horizontaler Autoscaler) skaliert die Pods einer Anwendungsbereitstellung auf der Grundlage von Lastmerkmalen auf die verfügbaren Knoten im Kubernetes-Cluster. Wenn keine weiteren Knoten für die Planung verfügbar sind, instanziiert der horizontale Autoscaler einen neuen Knoten, für den die Pods geplant werden. Wenn die Anwendungslast sinkt, werden die Knotenpunkte wieder verkleinert.
- Kubernetes Knoten-Anti-Affinitätsregeln: Anti-Affinitätsregeln für eine Kubernetes-Bereitstellung können festlegen, dass eine Gruppe von Pods nicht auf demselben Knoten skaliert werden kann und ein anderer Knoten für die Skalierung der Arbeitslast erforderlich ist. In Kombination mit den Lastmerkmalen oder der Anzahl der Ziel-Pods für die Anwendungsinstanzen instanziiert der horizontale Autoscaler neue Knoten im Knotenpool, um Anforderungen zu erfüllen. Wenn die Anwendungsnachfrage nachlässt, skaliert der horizontale Autoscaler den Knotenpool wieder herunter.
Dieser Abschnitt enthält einige Beispiele.
Horizontale automatische Podskalierung
Voraussetzungen:
- AKS auf Windows Server ist installiert.
- Der Zielcluster ist installiert und mit Azure verbunden.
- Es wird ein Linux-Knotenpool mit mindestens einem aktiven Linux-Arbeitsknoten bereitgestellt.
- Der horizontale Node-Autoscaler ist auf dem Zielcluster und dem Linux-Node-Pool aktiviert, wie zuvor beschrieben.
Wir verwenden das Kubernetes Horizontal Pod Autoscaler Walkthrough Beispiel , um zu zeigen, wie der Horizontal Pod Autoscaler funktioniert.
Damit der Horizontal Pod Autoscaler funktioniert, müssen Sie die Komponente Metrics Server in Ihrem Zielcluster einsetzen.
Um den Metrics Server auf einem Zielcluster namens mycluster
einzusetzen, führen Sie die folgenden Befehle aus:
Get-AksHciCredential -name mycluster
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
Nachdem der Kubernetes Metrics Server bereitgestellt wurde, können Sie eine Anwendung auf dem Node Pool bereitstellen, den Sie zur Skalierung verwenden. Wir verwenden für dieses Beispiel eine Testanwendung von der Kubernetes-Community-Website:
kubectl apply -f https://k8s.io/examples/application/php-apache.yaml
deployment.apps/php-apache created
service/php-apache created
Mit diesem Befehl wird eine Apache-Webserver-basierte PHP-Anwendung eingerichtet, die eine "OK"-Meldung an einen aufrufenden Client zurückgibt.
Als nächstes konfigurieren Sie den horizontalen Pod-Autoscaler so, dass ein neuer Pod geplant wird, wenn die CPU-Auslastung des aktuellen Pods 50 Prozent erreicht, und skalieren Sie von 1 bis 50 Pods:
kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
horizontalpodautoscaler.autoscaling/php-apache autoscaled
Sie können den aktuellen Status des neu erstellten Horizontalen Pod-Autoscalers überprüfen, indem Sie den folgenden Befehl ausführen:
kubectl get hpa
NAME REFERENCE TARGET MINPODS MAXPODS REPLICAS AGE
php-apache Deployment/php-apache/scale 0% / 50% 1 10 1 18s
Erhöhen Sie schließlich die Last auf dem Webserver, um zu sehen, wie er sich vergrößert. Öffnen Sie ein neues PowerShell-Fenster, und führen Sie den folgenden Befehl aus:
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"
Wenn Sie zum vorherigen PowerShell-Fenster zurückkehren und den folgenden Befehl ausführen, sollten Sie sehen, dass sich die Anzahl der Pods innerhalb einer kurzen Zeitspanne ändert:
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 diesem Beispiel ändert sich die Anzahl der Pods von 1 auf 7, wie hier gezeigt:
NAME REFERENCE TARGET MINPODS MAXPODS REPLICAS AGE
php-apache Deployment/php-apache/scale 305% / 50% 1 10 7 3m
Wenn dies nicht ausreicht, um den Node-Autoscaler auszulösen, weil alle Pods auf einen Node passen, öffnen Sie weitere PowerShell-Fenster und führen Sie weitere Lastgeneratorbefehle aus. Stellen Sie sicher, dass Sie den Namen des Pods, den Sie erstellen, jedes Mal ändern, wenn Sie den Befehl ausführen. Verwenden Sie beispielsweise load-generator-2
anstelle von load-generator
, wie im folgenden Befehl gezeigt.
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"
Prüfen Sie dann die Anzahl der instanziierten Knoten mit dem folgenden Befehl:
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
Um einen Scale-Down zu beobachten, drücken Sie STRG-C, um die Lastgenerator-Pods zu beenden und die mit ihnen verbundenen PowerShell-Fenster zu schließen. Nach etwa 30 Minuten sollten Sie sehen, dass die Anzahl der Schoten abnimmt. Etwa 30 Minuten später werden die Knoten deprovisioniert.
Weitere Informationen über den Kubernetes Horizontal Pod Autoscaler finden Sie unter Horizontal Pod Autoscaling.
Knotenaffinitätsregeln
Mit Hilfe von Knotenaffinitätsregeln können Sie den Kubernetes-Scheduler in die Lage versetzen, Pods nur auf einer bestimmten Gruppe von Knoten in einem Cluster oder Knotenpool auf der Grundlage bestimmter Eigenschaften des Knotens auszuführen. Um die Funktion des horizontalen Knoten-Autoscalers zu veranschaulichen, können Sie dieselben Regeln verwenden, um sicherzustellen, dass nur eine Instanz eines bestimmten Pods auf jedem Knoten läuft.
Voraussetzungen:
- AKS Arc ist installiert.
- Der Zielcluster ist installiert und mit Azure verbunden.
- Es wird ein Linux-Knotenpool mit mindestens einem aktiven Linux-Worker-Knoten bereitgestellt.
- Horizontal Node Autoscaler ist auf dem Zielcluster und dem Linux-Knotenpool aktiviert, wie zuvor beschrieben.
Erstellen Sie eine YAML-Datei mit dem folgenden Inhalt und speichern Sie sie als node-anti-affinity.yaml in einem lokalen Ordner.
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
Öffnen Sie ein PowerShell-Fenster und laden Sie die Anmeldedaten für Ihren Zielcluster. In diesem Beispiel lautet der Name des Clusters mycluster
:
Get-AksHciCredential -name mycluster
Übertragen Sie nun die YAML-Datei auf den Zielcluster:
kubectl apply -f node-anti-affinity.yaml
Nach ein paar Minuten können Sie mit dem folgenden Befehl überprüfen, ob die neuen Knoten online sind:
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
Um den Knoten zu entfernen, löschen Sie die Bereitstellung des Redis-Servers mit diesem Befehl:
kubectl delete -f node-anti-affinity.yaml
Weitere Informationen über Kubernetes Pod-Affinitätsregeln finden Sie unter Zuweisung von Pods zu Knoten.
Problembehandlung bei der horizontalen Autoskalierung
Wenn der horizontale Pod-Autoscaler für einen Zielcluster aktiviert wird, wird eine neue Kubernetes-Bereitstellung mit dem Namen <cluster_name>-cluster-autoscaler
im Verwaltungscluster erstellt. Diese Bereitstellung überwacht den Zielcluster, um sicherzustellen, dass genügend Workerknoten vorhanden sind, um Pods zu planen.
Hier finden Sie einige Möglichkeiten, Probleme im Zusammenhang mit dem Autoscaler zu beheben:
Die auf dem Verwaltungscluster laufenden Autoscaler-Pods sammeln nützliche Informationen darüber, wie sie Skalierungsentscheidungen treffen, die Anzahl der Knoten, die sie hochfahren oder entfernen müssen, sowie allgemeine Fehler, die auftreten können. Der AutoScaler speichert diese Informationen in Protokollen. Führen Sie den folgenden Befehl aus, um auf die Protokolle zuzugreifen:
kubectl --kubeconfig $(Get-AksHciConfig).Kva.kubeconfig logs -l app=<cluster_name>-cluster-autoscaler
In den Protokollen des Cloud-Betreibers werden Kubernetes-Ereignisse im Verwaltungscluster aufgezeichnet, was hilfreich sein kann, um zu verstehen, wann der Autoscaler für einen Cluster und einen Knotenpool aktiviert oder deaktiviert wurde. Diese können Sie anzeigen, indem Sie den folgenden Befehl ausführen:
kubectl --kubeconfig $(Get-AksHciConfig).Kva.kubeconfig get events
Die Bereitstellung der Autoskalierung für Cluster erstellt ein
configmap
-Element im Zielcluster, den sie verwaltet. Dieseconfigmap
enthält Informationen über den Status des Autoscalers auf Cluster-Ebene und pro Knotenpool. Führen Sie den folgenden Befehl auf dem Zielcluster aus, um den Status anzuzeigen:Hinweis
Vergewissern Sie sich, dass Sie
Get-AksHciCredentials -Name <clustername>
ausgeführt haben, um diekubeconfig
-Informationen für den Zugriff auf den entsprechenden Zielcluster abzurufen.kubectl --kubeconfig ~\.kube\config get configmap cluster-autoscaler-status -o yaml
Der Cluster-Autoscaler protokolliert Ereignisse im Cluster-Autoscaler-Status
configmap
, wenn er den Knotenpool eines Clusters skaliert. Sie können diese Protokolle einsehen, indem Sie diesen Befehl auf dem Zielcluster ausführen:kubectl --kubeconfig ~\.kube\config describe configmap cluster-autoscaler-status
Die Autoskalierung eines Clusters gibt Ereignisse in Pods im Zielcluster aus, wenn eine Skalierungsentscheidung getroffen wird, wenn der Pod nicht geplant werden kann. Führen Sie diesen Befehl aus, um die Ereignisse in einem Pod anzuzeigen:
kubectl --kubeconfig ~\.kube\config describe pod <pod_name>
PowerShell-Referenz
Auf den folgenden Referenzseiten finden Sie die PowerShell-Cmdlets, die die automatische Skalierung von Clustern unterstützen:
- Get-AksHciAutoScalerProfile
- Get-AksHciCluster for AKS
- Get-AksHciNodePool for AKS
- New-AksHciAutoScalerProfile
- New-AksHciCluster
- New-AksHciNodePool
- Remove-AksHciAutoScalerProfile
- Set-AksHciAutoScalerProfile
- Set-AksHciCluster
- Set-AksHciNodePool