Sdílet prostřednictvím


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. Obsahuje configmap 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:

Další kroky