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. Přestože cluster AKS používá pro uzly škálovací sadu virtuálních počítačů, ručně nepovolujte ani neupravujte nastavení automatického škálování. 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
Pomocí příkazu vytvořte skupinu
az group create
prostředků.az group create --name myResourceGroup --location eastus
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 \ --generate-ssh-keys
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-count
a --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 fonduaz 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 |
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 |
Zda budou pody DaemonSet řádně ukončeny z prázdných uzlů. | false |
daemonset-eviction-for-occupied-nodes |
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-waste a priority . |
random |
skip-nodes-with-local-storage |
Pokud true automatické š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 true automatické š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 |
Poznámka:
Parametry ignore-daemonsets-utilization, daemonset-eviction-for-empty-nodes a daemonset-eviction-for-occupied-nodes jsou ga z rozhraní API verze 2024-05-01. Pokud k aktualizaci těchto příznaků používáte rozhraní příkazového řádku, ujistěte se, že používáte verzi 2.63 nebo novější.
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í clusterucluster-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 \ --generate-ssh-keys
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 update
cluster-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=0m,scale-down-delay-after-failure=1m,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.
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.Vyberte oddíl Protokol ve vašem clusteru.
Do Log Analytics zadejte následující příklad dotazu:
AzureDiagnostics | where Category == "cluster-autoscaler"
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
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
Automatické škálování clusteru také zapíše stav do pojmenovaného
configmap
cluster-autoscaler-status
. Tyto protokoly můžete načíst pomocí následujícíhokubectl
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ů.
Azure Kubernetes Service