Použití PowerShellu pro automatické škálování clusteru v AKS povoleném službou Azure Arc
Platí pro: AKS v Azure Stack HCI 22H2, AKS na Windows Serveru
Pomocí PowerShellu můžete povolit automatické škálování a spravovat automatické škálování fondů uzlů v cílových clusterech ve službě AKS povolené službou Arc. Můžete také použít PowerShell ke konfiguraci a správě automatického škálování clusteru.
Vytvoření nového objektu AksHciAutoScalerConfig
Pokud chcete vytvořit nový objekt AksHciAutoScalerConfig , který se má předat do New-AksHciCluster
příkazu nebo Set-AksHciCluster
příkazu, použijte tento příkaz:
New-AksHciAutoScalerProfile -Name asp1 -AutoScalerProfileConfig @{ "min-node-count"=2; "max-node-count"=7; 'scale-down-unneeded-time'='1m'}
Při vytváření clusteru můžete poskytnout objekt autoscalerconfig . Objekt obsahuje parametry pro automatické škálování. Informace o parametrech najdete v tématu Použití profilů automatického škálování.
Změna existujícího objektu profilu AksHciAutoScalerConfig
Při aktualizaci existujícího objektu profilu AksHciAutoScalerConfig se clustery používající tento objekt aktualizují tak, aby používaly nové parametry:
Set-AksHciAutoScalerProfile -name myProfile -autoScalerProfileConfig @{ "max-node-count"=5; "min-node-count"=2 }
Můžete aktualizovat objekt autoscalerconfig , který obsahuje parametry pro automatické škálování. Informace o parametrech najdete v tématu Použití profilů automatického škálování.
Povolení automatického škálování pro nové clustery
Pokud chcete povolit automatické škálování automaticky u všech nově vytvořených fondů uzlů, použijte následující parametry s příkazem New-AksHciCluster
:
New-AksHciCluster -name mycluster -enableAutoScaler -autoScalerProfileName myAutoScalerProfile
Povolení automatického škálování v existujícím clusteru
Pokud chcete povolit automatické škálování automaticky u každého nově vytvořeného fondu uzlů v existujícím clusteru, použijte enableAutoScaler
parametr s příkazem Set-AksHciCluster
:
Set-AksHciCluster -Name <string> [-enableAutoScaler <boolean>] [-autoScalerProfileName <String>]
Povolení automatického škálování ve stávajícím fondu uzlů
Pokud chcete povolit automatické škálování ve stávajícím fondu uzlů, použijte autoScaler
parametr s příkazem Set-AksHciNodePool
:
Set-AksHciNodePool -clusterName <Your-Cluster-Name> -name <Your-NodePool-Name> -autoScaler $true
Zákaz automatického škálování
Pokud chcete zakázat automatické škálování u všech existujících a nově vytvořených fondů uzlů v existujícím clusteru, nastavte enableAutoScaler
hodnotu false pomocí Set-AksHciCluster
příkazu:
Set-AksHciCluster -Name <string> -enableAutoScaler $false
Efektivní využívání horizontálního automatického škálování
Teď, když je cluster a fond uzlů nakonfigurovaný tak, aby se automaticky škálovaly, můžete nakonfigurovat úlohu tak, aby se škálovala také způsobem, který využívá funkce horizontálního automatického škálování.
Pro škálování úloh jsou k dispozici dvě metody:
- Horizontální škálování podů Kubernetes: Horizontální automatické škálování podů (označované také jako horizontální automatické škálování) na základě charakteristik zatížení škáluje pody nasazení aplikace na dostupné uzly v clusteru Kubernetes. Pokud není možné naplánovat žádné další uzly, vytvoří horizontální automatické škálování instanci nového uzlu, do kterého se mají pody naplánovat. Pokud dojde k výpadku zatížení aplikace, uzly se znovu škálují.
- Pravidla ochrany proti spřažení uzlů Kubernetes: Pravidla spřažení pro nasazení Kubernetes můžou určovat, že sadu podů nejde škálovat na stejném uzlu a ke škálování úlohy se vyžaduje jiný uzel. V kombinaci s charakteristikou zatížení nebo počtem cílových podů pro instance aplikace vytvoří horizontální automatické škálování instance nových uzlů ve fondu uzlů, aby uspokojily požadavky. Pokud poptávka po aplikaci poklesá, horizontální automatické škálování znovu horizontálně snížit kapacitu fondu uzlů.
Tato část obsahuje několik příkladů.
Horizontální automatické škálování podů
Požadavky:
- Je nainstalována služba AKS povolená službou Arc.
- Cílový cluster je nainstalovaný a připojený k Azure.
- Nasadí se jeden fond uzlů Linuxu s alespoň jedním aktivním pracovním uzlem Linuxu.
- Horizontální automatické škálování uzlů je povolené v cílovém clusteru a ve fondu uzlů s Linuxem, jak je popsáno výše.
K zobrazení fungování horizontálního automatického škálování podů Kubernetes používáme příklad průvodce horizontálním škálováním podů.
Aby horizontální automatické škálování podů fungovalo, musíte do cílového clusteru nasadit komponentu Server metrik.
Pokud chcete nasadit server metrik do cílového clusteru s názvem mycluster
, spusťte následující příkazy:
Get-AksHciCredential -name mycluster
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
Po nasazení serveru metrik Kubernetes můžete nasadit aplikaci do fondu uzlů, který použijete ke škálování. V tomto příkladu používáme testovací aplikaci z webu komunity Kubernetes:
kubectl apply -f https://k8s.io/examples/application/php-apache.yaml
deployment.apps/php-apache created
service/php-apache created
Tento příkaz vytvoří nasazení webové aplikace PHP založené na apache serveru, která vrátí volajícímu klientovi zprávu OK.
Dále nakonfigurujte horizontální automatické škálování podů tak, aby naplánoval nový pod, když využití procesoru aktuálního podu dosáhne 50 procent a škáluje se od 1 do 50 podů:
kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
horizontalpodautoscaler.autoscaling/php-apache autoscaled
Aktuální stav nově vytvořeného automatického škálování podů můžete zkontrolovat spuštěním následujícího příkazu:
kubectl get hpa
NAME REFERENCE TARGET MINPODS MAXPODS REPLICAS AGE
php-apache Deployment/php-apache/scale 0% / 50% 1 10 1 18s
Nakonec zvyšte zatížení webového serveru, abyste viděli horizontální navýšení kapacity. Otevřete nové okno PowerShellu a spusťte následující příkaz:
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"
Pokud se vrátíte do předchozího okna PowerShellu a spustíte následující příkaz, měli byste vidět změnu počtu podů za krátkou dobu:
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
V tomto příkladu se počet podů změní z 1 na 7, jak je znázorněno tady:
NAME REFERENCE TARGET MINPODS MAXPODS REPLICAS AGE
php-apache Deployment/php-apache/scale 305% / 50% 1 10 7 3m
Pokud to nestačí k aktivaci automatického škálování uzlu, protože všechny pody se vejdou na jeden uzel, otevřete více oken PowerShellu a spusťte další příkazy generátoru zatížení. Při každém spuštění příkazu nezapomeňte změnit název podu, který vytváříte. Použijte load-generator-2
například místo load-generator
, jak je znázorněno v následujícím příkazu.
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"
Potom pomocí následujícího příkazu zkontrolujte počet uzlů, které se vytvoří instance:
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
Pokud chcete sledovat vertikální snížení kapacity, stisknutím kombinace kláves CTRL-C ukončete pody generátoru zatížení a zavřete okna PowerShellu přidružená k nim. Po přibližně 30 minutách by se měl zobrazit počet podů, které se zpomalí. Přibližně o 30 minut později se uzly zruší.
Další informace o horizontálním automatickém škálování podů Kubernetes najdete v tématu Horizontální automatické škálování podů.
Pravidla spřažení uzlů
Pomocí pravidel spřažení uzlů můžete plánovači Kubernetes povolit spouštění podů pouze na konkrétní sadě uzlů v clusteru nebo fondu uzlů na základě určitých charakteristik uzlu. Pokud chcete zobrazit funkci automatického škálování horizontálního uzlu, můžete použít stejná pravidla, abyste zajistili, že na každém uzlu běží jenom jedna instance daného podu.
Požadavky:
- Nainstaluje se AKS Arc.
- Cílový cluster je nainstalovaný a připojený k Azure.
- Jeden fond uzlů s Linuxem se nasadí aspoň jeden aktivní pracovní uzel Linuxu.
- Horizontální automatické škálování uzlů je povolené v cílovém clusteru a ve fondu uzlů s Linuxem, jak je popsáno výše.
Vytvořte soubor YAML s následujícím obsahem a uložte ho jako soubor s příponou node-anti-affinity.yaml do místní složky.
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
Otevřete okno PowerShellu a načtěte přihlašovací údaje pro cílový cluster. V tomto příkladu má cluster název mycluster
:
Get-AksHciCredential -name mycluster
Teď použijte soubor YAML na cílový cluster:
kubectl apply -f node-anti-affinity.yaml
Po několika minutách můžete pomocí následujícího příkazu zkontrolovat, jestli jsou nové uzly 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
Pokud chcete uzel odebrat, odstraňte nasazení serveru Redis tímto příkazem:
kubectl delete -f node-anti-affinity.yaml
Další informace o pravidlech spřažení podů Kubernetes najdete v tématu Přiřazení podů k uzlům.
Řešení potíží s horizontálním automatickým škálováním
Pokud je pro cílový cluster povolený horizontální automatické škálování podů, vytvoří se v clusteru pro správu nové nasazení <cluster_name>-cluster-autoscaler
Kubernetes. Toto nasazení monitoruje cílový cluster, aby zajistilo, že je k naplánování podů dostatek pracovních uzlů.
Tady je několik různých způsobů ladění problémů souvisejících s automatickým škálováním:
Pody automatického škálování clusteru spuštěné v clusteru pro správu shromažďují užitečné informace o tom, jak provádí rozhodnutí o škálování, počet uzlů, které potřebuje k vyvolání nebo odebrání, a všechny obecné chyby, ke kterým může docházet. Automatické škálování uloží tyto informace do protokolů. Spuštěním následujícího příkazu získejte přístup k protokolům:
kubectl --kubeconfig $(Get-AksHciConfig).Kva.kubeconfig logs -l app=<cluster_name>-cluster-autoscaler
Operátor cloudu zaznamenává události Kubernetes v clusteru pro správu, což může být užitečné, když je automatické škálování povolené nebo zakázané pro cluster a fond uzlů. Můžete je zobrazit spuštěním následujícího příkazu:
kubectl --kubeconfig $(Get-AksHciConfig).Kva.kubeconfig get events
Nasazení automatického škálování clusteru vytvoří v cílovém
configmap
clusteru, který spravuje. Obsahujeconfigmap
informace o úrovni clusteru se stavem automatického škálování a fondu uzlů. Spuštěním následujícího příkazu na cílovém clusteru zobrazte stav:Poznámka:
Ujistěte se, že jste spustili načtení
Get-AksHciCredentials -Name <clustername>
kubeconfig
informací pro přístup k příslušnému cílovému clusteru.kubectl --kubeconfig ~\.kube\config get configmap cluster-autoscaler-status -o yaml
Automatické škálování clusteru zaznamenává události ve stavu
configmap
automatického škálování clusteru při škálování fondu uzlů clusteru. Tyto protokoly můžete zobrazit spuštěním tohoto příkazu pro cílový cluster:kubectl --kubeconfig ~\.kube\config describe configmap cluster-autoscaler-status
Automatické škálování clusteru generuje události na podech v cílovém clusteru, když provede rozhodnutí o škálování, pokud se pod nedá naplánovat. Spuštěním tohoto příkazu zobrazte události v podu:
kubectl --kubeconfig ~\.kube\config describe pod <pod_name>
Referenční informace prostředí
Projděte si následující referenční stránky pro rutiny PowerShellu, které podporují automatické škálování clusteru:
- Get-AksHciAutoScalerProfile
- Get-AksHciCluster pro AKS
- Get-AksHciNodePool pro AKS
- New-AksHciAutoScalerProfile
- New-AksHciCluster
- New-AksHciNodePool
- Remove-AksHciAutoScalerProfile
- Set-AksHciAutoScalerProfile
- Set-AksHciCluster
- Set-AksHciNodePool