Použití automatického škálování clusteru ve službě Azure Kubernetes Service (AKS)

Abyste udrželi krok s požadavky aplikací v AKS, možná budete muset upravit počet uzlů, na kterých běží vaše úlohy. Komponenta automatického škálování clusteru sleduje pody v clusteru, které nelze naplánovat kvůli omezením prostředků. Když automatické škálování clusteru zjistí problémy, škáluje počet uzlů ve fondu uzlů tak, aby splňoval požadavky aplikace. Také pravidelně kontroluje, jestli uzly nemají spuštěné pody, a podle potřeby vertikálně navyšuje kapacitu počtu uzlů.

V tomto článku se dozvíte, jak povolit a spravovat automatické škálování clusteru v AKS, což je založené na opensourcové verzi Kubernetes.

Než začnete

Tento článek vyžaduje Azure CLI verze 2.0.76 nebo novější. Verzi zjistíte spuštěním příkazu az --version. Pokud potřebujete instalaci nebo upgrade, přečtěte si téma Instalace Azure CLI.

Použití automatického škálování clusteru v clusteru AKS

Důležité

Automatické škálování clusteru je komponenta Kubernetes. I když cluster AKS používá pro uzly škálovací sadu virtuálních počítačů, nepovolujte ani neupravujte nastavení automatického škálování škálovací sady. Nechte automatické škálování clusteru Kubernetes spravovat požadovaná nastavení škálování. Další informace najdete v tématu Můžu upravit prostředky AKS ve skupině prostředků uzlu?

Povolení automatického škálování clusteru v novém clusteru

  1. Pomocí příkazu vytvořte skupinu az group create prostředků.

    az group create --name myResourceGroup --location eastus
    
  2. Vytvořte cluster AKS pomocí az aks create příkazu a povolte a nakonfigurujte automatické škálování clusteru ve fondu uzlů pro cluster pomocí parametru --enable-cluster-autoscaler a určení uzlu --min-count a --max-count. Následující ukázkový příkaz vytvoří cluster s jedním uzlem zálohovaným škálovací sadou virtuálních počítačů, umožní automatické škálování clusteru, nastaví minimálně jeden a maximálně tři uzly:

    az aks create \
    --resource-group myResourceGroup \
    --name myAKSCluster \
    --node-count 1 \
    --vm-set-type VirtualMachineScaleSets \
    --load-balancer-sku standard \
    --enable-cluster-autoscaler \
    --min-count 1 \
    --max-count 3
    

    Vytvoření clusteru a konfigurace nastavení automatického škálování clusteru trvá několik minut.

Povolení automatického škálování clusteru v existujícím clusteru

  • Pomocí příkazu aktualizujte existující cluster az aks update a povolte a nakonfigurujte automatické škálování clusteru ve fondu uzlů pomocí parametru --enable-cluster-autoscaler a určení uzlu --min-count a --max-count. Následující ukázkový příkaz aktualizuje existující cluster AKS, aby povolil automatické škálování clusteru ve fondu uzlů pro cluster a nastaví minimálně jeden a maximálně tři uzly:

    az aks update \
      --resource-group myResourceGroup \
      --name myAKSCluster \
      --enable-cluster-autoscaler \
      --min-count 1 \
      --max-count 3
    

    Aktualizace clusteru a konfigurace nastavení automatického škálování clusteru trvá několik minut.

Zakázání automatického škálování clusteru v clusteru

  • Pomocí příkazu a parametru zakažte automatické škálování az aks update clusteru --disable-cluster-autoscaler .

    az aks update \
      --resource-group myResourceGroup \
      --name myAKSCluster \
      --disable-cluster-autoscaler
    

    Uzly se neodeberou, když je automatické škálování clusteru zakázané.

Poznámka:

Po zakázání automatického škálování az aks scale clusteru pomocí příkazu můžete cluster ručně škálovat. Pokud použijete horizontální automatické škálování podů, bude i nadále spuštěn s zakázaným automatickým škálováním clusteru, ale pody se nemusí naplánovat, pokud se používají všechny prostředky uzlu.

Opětovné povolení automatického škálování clusteru v clusteru

Automatické škálování clusteru můžete znovu povolit v existujícím clusteru pomocí az aks update příkazu a zadáním parametru --enable-cluster-autoscaler, --min-counta --max-count parametrů.

Použití automatického škálování clusteru ve fondech uzlů

Použití automatického škálování clusteru ve více fondech uzlů

Automatické škálování clusteru můžete použít s více fondy uzlů a povolit automatické škálování clusteru v každém fondu uzlů a předat jim jedinečná pravidla automatického škálování.

  • Pomocí příkazu aktualizujte nastavení existujícího fondu az aks nodepool update uzlů.

    az aks nodepool update \
      --resource-group myResourceGroup \
      --cluster-name myAKSCluster \
      --name nodepool1 \
      --update-cluster-autoscaler \
      --min-count 1 \
      --max-count 5
    

Zakázání automatického škálování clusteru ve fondu uzlů

  • Pomocí příkazu a parametru zakažte automatické škálování clusteru --disable-cluster-autoscaler ve fondu az aks nodepool update uzlů.

    az aks nodepool update \
      --resource-group myResourceGroup \
      --cluster-name myAKSCluster \
      --name nodepool1 \
      --disable-cluster-autoscaler
    

Opětovné povolení automatického škálování clusteru ve fondu uzlů

Automatické škálování clusteru ve fondu uzlů můžete znovu povolit pomocí az aks nodepool update příkazu a zadat --enable-cluster-autoscaler--min-count, a --max-count parametry.

Poznámka:

Pokud plánujete používat automatické škálování clusteru s fondy uzlů, které zahrnují více zón, a využíváte funkce plánování související s zónami, jako je například topologické plánování svazků, doporučujeme mít jeden fond uzlů pro každou zónu a povolit --balance-similar-node-groups prostřednictvím profilu automatického škálování. Tím zajistíte, že automatické škálování dokáže úspěšně vertikálně navýšit kapacitu a zachovat vyváženou velikost fondů uzlů.

Aktualizace nastavení automatického škálování clusteru

S tím, jak vaše aplikace vyžaduje změnu, může být potřeba upravit počet uzlů automatického škálování clusteru tak, aby se škálovat efektivně.

  • Pomocí příkazu změňte počet az aks update uzlů a pomocí parametru aktualizujte automatické škálování clusteru --update-cluster-autoscaler a zadejte aktualizovaný uzel --min-count a --max-count.

    az aks update \
      --resource-group myResourceGroup \
      --name myAKSCluster \
      --update-cluster-autoscaler \
      --min-count 1 \
      --max-count 5
    

Poznámka:

Automatické škálování clusteru vynucuje minimální počet v případech, kdy skutečný počet klesne pod minimum kvůli externím faktorům, například při vyřazení místa nebo při změně minimální hodnoty počtu z rozhraní API AKS.

Použití profilu automatického škálování clusteru

Podrobnější podrobnosti automatického škálování clusteru můžete nakonfigurovat změnou výchozích hodnot v profilu automatického škálování v rámci celého clusteru. Například událost vertikálního snížení kapacity se stane, když se uzly po 10 minutách nevyužívají. Pokud máte úlohy, které běží každých 15 minut, možná budete chtít změnit profil automatického škálování tak, aby po 15 nebo 20 minutách vertikálně snížil kapacitu nevyužitých uzlů. Pokud povolíte automatické škálování clusteru, použije se výchozí profil, pokud nezadáte jiná nastavení.

Důležité

Profil automatického škálování clusteru má vliv na všechny fondy uzlů, které používají automatické škálování clusteru. Profil automatického škálování není možné nastavit na fond uzlů. Po nastavení profilu se okamžitě začnou používat všechny existující fondy uzlů s povoleným automatickým škálováním clusteru.

Nastavení profilu automatického škálování clusteru

Následující tabulka uvádí dostupná nastavení pro profil automatického škálování clusteru:

Nastavení Popis Default value
scan-interval Jak často se cluster znovu vyhodnocuje pro vertikální navýšení nebo snížení kapacity. 10 sekund
scale-down-delay-after-add Jak dlouho po vertikálním navýšení kapacity se hodnocení obnoví. 10 minut
scale-down-delay-after-delete Jak dlouho po odstranění uzlu se obnoví vyhodnocení vertikálního snížení kapacity. scan-interval
scale-down-delay-after-failure Jak dlouho po selhání vertikálního snížení kapacity se obnoví vyhodnocení vertikálního snížení kapacity. Tři minuty
scale-down-unneeded-time Jak dlouho by měl být uzel nepotřebný, než bude mít nárok na vertikální snížení kapacity. 10 minut
scale-down-unready-time Jak dlouho by měl být nepřečtený uzel nepotřebný, než bude mít nárok na vertikální snížení kapacity. 20 minut
ignore-daemonsets-utilization (Preview) Jestli budou pody DaemonSet při výpočtu využití prostředků pro vertikální snížení kapacity ignorovány. false
daemonset-eviction-for-empty-nodes (Preview) Zda budou pody DaemonSet řádně ukončeny z prázdných uzlů. false
daemonset-eviction-for-occupied-nodes (Preview) Zda budou pody daemonSet řádně ukončeny z neprázdných uzlů. true
scale-down-utilization-threshold Úroveň využití uzlu definovaná jako součet požadovaných prostředků rozdělených kapacitou, ve které se uzel dá zvážit pro vertikální snížení kapacity. 0.5
max-graceful-termination-sec Maximální počet sekund, po které automatické škálování clusteru čeká na ukončení podu při pokusu o vertikální snížení kapacity uzlu 600 s
balance-similar-node-groups Detekuje podobné fondy uzlů a vyrovnává počet uzlů mezi nimi. false
expander Typ rozšíření fondu uzlů se používá při vertikálním navýšení kapacity. Možné hodnoty zahrnují most-pods, random, least-wastea priority. random
skip-nodes-with-local-storage Pokud trueautomatické škálování clusteru neodstraní uzly s pody s místním úložištěm, například EmptyDir nebo HostPath. false
skip-nodes-with-system-pods Pokud trueautomatické škálování clusteru neodstraní uzly s pody ze systému kube-system (s výjimkou daemonSet nebo zrcadlových podů). true
max-empty-bulk-delete Maximální počet prázdných uzlů, které lze odstranit současně. 10 uzlů
new-pod-scale-up-delay Ve scénářích, jako je nárazové nebo dávkové škálování, kdy nechcete, aby certifikační autorita fungovala před tím, než plánovač Kubernetes může naplánovat všechny pody, můžete certifikační autoritě říct, aby ignorovala neplánované pody, než dosáhnou určitého věku. 0 sekund
max-total-unready-percentage Maximální procento nepřečtených uzlů v clusteru Po překročení tohoto procenta certifikační autorita zastaví operace. 45 %
max-node-provision-time Maximální doba čekání automatického škálování na zřízení uzlu 15 minut
ok-total-unready-count Počet povolených nepřečtených uzlů bez ohledu na maximální celkové nepřečtené procento. Tři uzly

Nastavení profilu automatického škálování clusteru v novém clusteru

  • Pomocí příkazu vytvořte cluster az aks create AKS a pomocí parametru nastavte profil automatického škálování clusteru cluster-autoscaler-profile .

    az aks create \
      --resource-group myResourceGroup \
      --name myAKSCluster \
      --node-count 1 \
      --enable-cluster-autoscaler \
      --min-count 1 \
      --max-count 3 \
      --cluster-autoscaler-profile scan-interval=30s
    

Nastavení profilu automatického škálování clusteru v existujícím clusteru

  • Pomocí příkazu a parametru nastavte automatické škálování clusteru v existujícím clusteru az aks updatecluster-autoscaler-profile . Následující příklad nakonfiguruje nastavení intervalu kontroly jako 30s:

    az aks update \
      --resource-group myResourceGroup \
      --name myAKSCluster \
      --cluster-autoscaler-profile scan-interval=30s
    

Konfigurace profilu automatického škálování clusteru pro agresivní vertikální snížení kapacity

Poznámka:

Horizontální snížení kapacity agresivně se nedoporučuje u clusterů, u kterých dochází k častým horizontálním navýšením kapacity a horizontálním navýšením kapacity v krátkých intervalech, protože by za těchto okolností mohlo dojít k prodloužení doby zřizování uzlů. Zvýšení scale-down-delay-after-add může v těchto případech pomoct tím, že nechá uzel kolem delší dobu, aby zvládl příchozí úlohy.

 az aks update \
     --resource-group myResourceGroup \
     --name myAKSCluster \
     --cluster-autoscaler-profile scan-interval=30s, scale-down-delay-after-add=0s,scale-down-delay-after-failure=30s,scale-down-unneeded-time=3m,scale-down-unready-time=3m,max-graceful-termination-sec=30,skip-nodes-with-local-storage=false,max-empty-bulk-delete=1000,max-total-unready-percentage=100,ok-total-unready-count=1000,max-node-provision-time=15m

Konfigurace profilu automatického škálování clusteru pro úlohy s nárazy

 az aks update \   
     --resource-group "myResourceGroup" \
     --name myAKSCluster \ 
     --cluster-autoscaler-profile scan-interval=20s,scale-down-delay-after-add=10m,scale-down-delay-after-failure=1m,scale-down-unneeded-time=5m,scale-down-unready-time=5m,max-graceful-termination-sec=30,skip-nodes-with-local-storage=false,max-empty-bulk-delete=100,max-total-unready-percentage=100,ok-total-unready-count=1000,max-node-provision-time=15m

Resetování profilu automatického škálování clusteru na výchozí hodnoty

  • Pomocí příkazu resetujte profil automatického škálování clusteru az aks update .

    az aks update \
      --resource-group myResourceGroup \
      --name myAKSCluster \
      --cluster-autoscaler-profile ""
    

Načtení protokolů a stavu automatického škálování clusteru

Z automatického škálování clusteru můžete načíst protokoly a aktualizace stavu, které vám pomůžou diagnostikovat a ladit události automatického škálování. AKS spravuje automatické škálování clusteru vaším jménem a spouští ho ve spravované řídicí rovině. Uzel řídicí roviny umožňuje zobrazit protokoly a operace z automatického škálování clusteru.

  1. Pomocí zde uvedených pokynů nastavte pravidlo pro protokoly prostředků pro nabízení protokolů automatického škálování clusteru do Log Analytics. Nezapomeňte zaškrtnout políčko cluster-autoscaler při výběru možností pro protokoly.

  2. Vyberte oddíl Protokol ve vašem clusteru.

  3. Do Log Analytics zadejte následující příklad dotazu:

    AzureDiagnostics
    | where Category == "cluster-autoscaler"
    

    Pokud se načítají protokoly, měli byste vidět protokoly podobné následujícím protokolům:

    Snímek obrazovky s protokoly Log Analytics

  4. Zobrazení událostí automatického škálování clusteru, které neaktivují události v rozhraní příkazového řádku

    kubectl get events --field-selector source=cluster-autoscaler,reason=NotTriggerScaleUp
    
  5. Zobrazení událostí upozornění automatického škálování clusteru v rozhraní příkazového řádku

    kubectl get events --field-selector source=cluster-autoscaler,type=Warning
    
  6. Automatické škálování clusteru také zapíše stav do pojmenovaného configmapcluster-autoscaler-status. Tyto protokoly můžete načíst pomocí následujícího kubectl příkazu:

    kubectl get configmap -n kube-system cluster-autoscaler-status -o yaml
    

Další informace najdete v nejčastějších dotazech k projektu GitHubu Kubernetes/autoscaler.

Metriky automatického škálování clusteru

Můžete povolit metriky řídicí roviny (Preview) a zobrazit protokoly a operace z automatického škálování clusteru pomocí spravované služby Azure Monitor pro doplněk Prometheus.

Další kroky

Tento článek vám ukázal, jak automaticky škálovat počet uzlů AKS. Horizontální automatické škálování podů můžete také použít k automatické úpravě počtu podů, které spouští vaši aplikaci. Postup použití horizontálního automatického škálování podů najdete v tématu Škálování aplikací v AKS.

Další pomoc s vylepšením využití prostředků clusteru a uvolněním procesoru a paměti pro ostatní pody najdete v tématu Vertikální automatické škálování podů.