Używanie narzędzia do automatycznego skalowania klastra w usłudze Azure Kubernetes Service (AKS)

Aby nadążyć za wymaganiami aplikacji w AKS, może być konieczne dostosowanie liczby węzłów obsługujących obciążenia robocze. Składnik automatycznego skalowania klastra monitoruje pody w klastrze, których nie można zaplanować z powodu ograniczeń zasobów. Gdy narzędzie do automatycznego skalowania klastra wykryje problemy, skaluje w górę liczbę węzłów w puli węzłów w celu spełnienia wymagań aplikacji. Regularnie sprawdza również niedostatecznie wykorzystywane węzły i usuwa je, gdy zadania można bezpiecznie przenieść oraz gdy spełnione są warunki zmniejszenia skali.

W tym artykule pokazano, jak włączyć narzędzie do automatycznego skalowania klastra i zarządzać nim w usłudze AKS, która jest oparta na wersji rozwiązania Kubernetes typu open source.

Zanim rozpoczniesz

Ten artykuł wymaga interfejsu wiersza polecenia platformy Azure w wersji 2.0.76 lub nowszej. Uruchom polecenie az --version, aby dowiedzieć się, jaka wersja jest używana. Jeśli konieczna będzie instalacja lub uaktualnienie, zobacz Instalowanie interfejsu wiersza polecenia platformy Azure.

Włączanie lub wyłączanie narzędzia do automatycznego skalowania klastra w klastrze

Ważne

Narzędzie do automatycznego skalowania klastra jest składnikiem Kubernetes. Mimo że klaster usługi AKS używa usługi Virtual Machine Scale Sets dla swoich węzłów, nie należy ręcznie włączać ani edytować ustawień automatycznego skalowania zestawu skalowania. Pozwól klastrowi Kubernetes automatycznie zarządzać wymaganymi ustawieniami skalowania. Aby uzyskać więcej informacji, zobacz Czy mogę zmodyfikować zasoby usługi AKS w grupie zasobów węzła?

Włącz automatyczne skalowanie klastra w nowym klastrze

  1. Utwórz grupę zasobów przy użyciu az group create polecenia .

    az group create --name myResourceGroup --location eastus
    
  2. Utwórz klaster AKS za pomocą polecenia az aks create oraz włącz i skonfiguruj autoskalowanie klastra w puli węzłów klastra za pomocą parametru --enable-cluster-autoscaler, określając wartości --min-count i --max-count dla liczby węzłów. Następujące przykładowe polecenie tworzy klaster z jednym węzłem wspieranym przez zestaw skalowania maszyn wirtualnych, włącza narzędzie do automatycznego skalowania klastra, ustawia co najmniej jeden i maksymalnie trzy węzły:

    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
    

    Utworzenie klastra i skonfigurowanie ustawień automatycznego skalowania klastra trwa kilka minut.

Włączanie automatycznego skalowania klastra w istniejącym klastrze

Zaktualizuj istniejący klaster przy użyciu az aks update polecenia i włącz i skonfiguruj narzędzie do automatycznego skalowania klastra w puli węzłów przy użyciu parametru --enable-cluster-autoscaler i określenia węzła --min-count i --max-count. Poniższe przykładowe polecenie aktualizuje istniejący klaster AKS, aby włączyć automatyczne skalowanie klastra w puli węzłów klastra oraz ustawić minimalną liczbę węzłów na jeden, a maksymalną na trzy:

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

Zaktualizowanie klastra i skonfigurowanie ustawień automatycznego skalowania klastra zajmuje kilka minut.

Wyłączanie narzędzia do automatycznego skalowania klastra w klastrze

Wyłącz funkcję automatycznego skalowania klastra przy użyciu az aks update polecenia i parametru --disable-cluster-autoscaler .

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

Węzły nie są usuwane, gdy funkcja automatycznego skalowania klastra jest wyłączona.

Uwaga

Klaster można skalować ręcznie po wyłączeniu narzędzia do automatycznego skalowania klastra az aks scale przy użyciu polecenia . Jeśli używasz mechanizmu horyzontalnego autoskalowania podów, będzie on nadal działał przy wyłączonej funkcji automatycznego skalowania klastra, ale może się okazać, że podów nie da się przydzielić do węzłów, jeśli wszystkie zasoby węzłów są już wykorzystane.

Ponowne włączanie automatycznego skalowania klastra w klastrze

Możesz ponownie włączyć automatyczne skalowanie klastra w istniejącym klastrze za pomocą polecenia az aks update, określając parametry --enable-cluster-autoscaler, --min-count i --max-count.

Włącz lub wyłącz automatyczne skalowanie klastra w pulach węzłów

Używanie automatycznego skalowania klastra w wielu pulach węzłów

Możesz użyć narzędzia do automatycznego skalowania klastra z wieloma pulami węzłów i włączyć skalowanie automatyczne klastra w każdej puli węzłów i przekazać do nich unikatowe reguły skalowania automatycznego.

Zaktualizuj ustawienia dla istniejącej puli węzłów za pomocą polecenia az aks nodepool update.

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

Wyłącz automatyczne skalowanie klastra w puli węzłów

Wyłącz automatyczne skalowanie klastra dla puli węzłów za pomocą polecenia az aks nodepool update i parametru --disable-cluster-autoscaler.

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

Włącz ponownie autoskalowanie klastra w puli węzłów

Możesz ponownie włączyć autoskalowanie klastra dla puli węzłów za pomocą polecenia az aks nodepool update i podając parametry --enable-cluster-autoscaler, --min-count i --max-count.

Uwaga

Jeśli planujesz korzystanie z narzędzia do automatycznego skalowania klastra z pulami węzłów, które obejmują wiele stref i korzystasz z funkcji planowania związanych ze strefami, takimi jak planowanie topologiczne woluminów, zalecamy posiadanie jednej puli węzłów na strefę i włączenie --balance-similar-node-groups za pośrednictwem profilu narzędzia do skalowania automatycznego. Dzięki temu narzędzie do automatycznego skalowania może pomyślnie skalować w górę i zachować zrównoważony rozmiar pul węzłów.

Zaktualizuj ustawienia automatycznego skalowania klastra

W miarę zmiany wymagań aplikacji może być konieczne dostosowanie liczby węzłów automatycznego skalowania klastra w celu wydajnego skalowania.

Zmień liczbę węzłów przy użyciu az aks update polecenia i zaktualizuj narzędzie do automatycznego skalowania klastra przy użyciu parametru --update-cluster-autoscaler i określ zaktualizowany węzeł --min-count i --max-count.

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

Uwaga

Funkcja automatycznego skalowania klastra wymusza minimalną liczbę przypadków, w których rzeczywista liczba spadnie poniżej minimum z powodu czynników zewnętrznych, takich jak podczas eksmisji typu spot lub podczas zmiany wartości minimalnej liczby z interfejsu API usługi AKS.

Użyj profilu autoskalatora klastra

Bardziej szczegółowe informacje o autoskalatorze klastra można skonfigurować, zmieniając wartości domyślne w profilu automatycznego skalowania w całym klastrze. Na przykład operacja skalowania w dół następuje, gdy węzły są niedostatecznie obciążone przez 10 minut. Jeśli masz obciążenia robocze uruchamiane co 15 minut, możesz zmienić profil autoskalera, aby zmniejszać liczbę niedostatecznie wykorzystywanych węzłów po 15 lub 20 minutach. Po włączeniu automatycznego skalowania klastra zostanie użyty domyślny profil, chyba że określisz inne ustawienia.

Ważne

Profil narzędzia do automatycznego skalowania klastra ma wpływ na wszystkie pule węzłów korzystające z narzędzia do automatycznego skalowania klastra. Nie można ustawić profilu skalowania automatycznego dla puli węzłów. Po ustawieniu profilu wszystkie istniejące pule węzłów z włączonym funkcją automatycznego skalowania klastra natychmiast zaczynają korzystać z profilu.

Ustawienia profilu autoskalera klastra

W poniższej tabeli wymieniono dostępne ustawienia profilu skalowania automatycznego klastra:

Ustawienie opis Domyślna wartość
scan-interval Częstotliwość ponownego oceny klastra na potrzeby skalowania w górę lub w dół. 10 sekund
scale-down-delay-after-add Po jakim czasie od skalowania w górę wznawiana jest ocena skalowania w dół. 10 min
scale-down-delay-after-delete Jak długo po usunięciu węzła ponownie rozpoczyna się ocena skalowania w dół. scan-interval
scale-down-delay-after-failure Po jakim czasie od niepowodzenia skalowania w dół ponownie rozpoczyna się ocena skalowania w dół. Trzy minuty
scale-down-unneeded-time Jak długo węzeł powinien pozostawać niepotrzebny, zanim będzie można zmniejszyć liczbę węzłów. 10 min
scale-down-unready-time Jak długo węzeł niegotowy powinien pozostawać niepotrzebny, zanim będzie kwalifikował się do zmniejszenia skali. 20 minut
ignore-daemonsets-utilization Czy zasobniki daemonSet zostaną zignorowane podczas obliczania wykorzystania zasobów na potrzeby skalowania w dół. false
daemonset-eviction-for-empty-nodes Czy zasobniki DaemonSet będą bezpiecznie przerywane z pustych węzłów. false
daemonset-eviction-for-occupied-nodes Czy zasobniki DaemonSet będą bezpiecznie przerywane z węzłów niepustych. true
scale-down-utilization-threshold Maksymalna wartość pomiędzy sumą żądań CPU a sumą żądań pamięci wszystkich zasobników uruchomionych na węźle, podzielona przez odpowiedni alokowalny zasób węzła, poniżej której można rozważyć zmniejszenie skali węzła. 0,5
max-graceful-termination-sec Maksymalna liczba sekund, przez które autoskalator klastra czeka na zakończenie działania poda podczas próby zmniejszenia skali węzła. 600 sekund
balance-similar-node-groups Wykrywa podobne pule węzłów i równoważy liczbę węzłów między nimi. false
expander Typ ekspandera puli węzłów używanego podczas skalowania w górę. Możliwe wartości to most-pods, , randomleast-wastei priority. random
skip-nodes-with-local-storage Jeśli true, narzędzie do automatycznego skalowania klastra nie usuwa węzłów z zasobnikami korzystającymi z pamięci lokalnej, na przykład EmptyDir lub HostPath. false
skip-nodes-with-system-pods Jeśli true, narzędzie do automatycznego skalowania klastra nie usuwa węzłów z podami z kube-system (z wyjątkiem podów DaemonSet lub podów lustrzanych). true
max-empty-bulk-delete Maksymalna liczba pustych węzłów, które można usunąć w tym samym czasie. 10 węzłów
new-pod-scale-up-delay W scenariuszach takich jak skalowanie wsadowe lub skokowe, gdy nie chcesz, aby Cluster Autoscaler (CA) zareagował, zanim harmonogram Kubernetes będzie mógł zaplanować wszystkie pody, możesz skonfigurować CA tak, aby ignorował niezaplanowane pody, dopóki nie osiągną określonego wieku. 0 sekund
max-total-unready-percentage Maksymalny procent niegotowych węzłów w klastrze. Po przekroczeniu tej wartości procentowej urząd certyfikacji zatrzymuje operacje. 45%
max-node-provision-time Maksymalny czas oczekiwania autoskalatora na aprowizowanie węzła. 15 minut
ok-total-unready-count Liczba dozwolonych nieprzeczytanych węzłów niezależnie od maksymalnej liczby nieprzeczytanych wartości procentowych. Trzy węzły

Uwaga

Parametry ignore-daemonsets-utilization, daemonset-eviction-for-empty-nodes i daemonset-eviction-for-occupied-nodes mają status ogólnej dostępności od wersji interfejsu API 2024-05-01.

Ustawianie profilu automatycznego skalowania klastra w nowym klastrze

Utwórz klaster usługi AKS przy użyciu az aks create polecenia i ustaw profil narzędzia do automatycznego skalowania klastra przy użyciu parametru 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 \
    --generate-ssh-keys

Ustawianie profilu automatycznego skalowania klastra w istniejącym klastrze

Ustaw funkcję automatycznego skalowania klastra w istniejącym klastrze przy użyciu az aks update polecenia i parametru cluster-autoscaler-profile . Poniższy przykład konfiguruje ustawienie interwału skanowania jako 30s:

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

Konfigurowanie profilu automatycznego skalowania klastra dla agresywnego skalowania w dół

Uwaga

Agresywne skalowanie w dół nie jest zalecane w przypadku klastrów, w których w krótkich odstępach czasu często dochodzi do skalowania w górę i w dół, ponieważ w takich sytuacjach może to prowadzić do wydłużenia czasu aprowizacji węzłów. Zwiększenie scale-down-delay-after-add może pomóc w takich sytuacjach, ponieważ pozwala utrzymać węzeł dłużej, aby obsługiwał napływające obciążenia.

Następujące polecenie konfiguruje agresywny profil skalowania w dół. Skanuje klaster co 30 sekund, wznawia ocenę skalowania w dół natychmiast po dodaniu węzła oraz minutę po awarii, sprawia, że niepotrzebne i niegotowe węzły kwalifikują się do skalowania w dół po trzech minutach, ogranicza łagodne zakończenie do 30 sekund, zezwala na jednoczesne usunięcie maksymalnie 1000 pustych węzłów oraz zwiększa limity dla niegotowych węzłów do 100 procent lub 1000 węzłów. Ponadto wyraźnie pozostawia domyślne działanie polegające na niepomijaniu węzłów z pamięcią lokalną oraz oczekiwaniu do 15 minut na udostępnienie węzła.

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

Skonfiguruj profil automatycznego skalowania klastra na potrzeby obciążeń skokowych

Następujące polecenie konfiguruje profil dla obciążeń skokowych. Skanuje klaster co 20 sekund, wstrzymuje ocenę skalowania w dół na 10 minut po dodaniu węzła, aby zachować zasoby na potrzeby nadchodzących nagłych skoków obciążenia, wznawia ocenę po minucie od awarii, sprawia, że niepotrzebne i niegotowe węzły kwalifikują się do skalowania w dół po pięciu minutach, ogranicza łagodne zamykanie do 30 sekund, pozwala na jednoczesne usunięcie maksymalnie 100 pustych węzłów i podnosi limity dla niegotowych węzłów do 100 procent lub 1 000 węzłów. Ponadto wyraźnie pozostawia domyślne zachowanie polegające na niepomijaniu węzłów z pamięcią lokalną oraz na oczekiwaniu do 15 minut na udostępnienie węzła.

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

Resetowanie profilu automatycznego skalowania klastra do wartości domyślnych

Zresetuj profil automatycznego skalowania klastra za pomocą polecenia az aks update.

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

Użyj ProvisioningRequest z autoskalerem klastra

ProvisioningRequest to zasób niestandardowy, którego można użyć do żądania zasobów dla grupy powiązanych zasobników. Narzędzie do automatycznego skalowania klastra traktuje te zasobniki jako pojedynczą jednostkę. Na podstawie podanej klasy aprowizacji narzędzie do automatycznego skalowania klastra może zarezerwować istniejące zasoby dla zasobników lub zwiększyć skalę klastra.

Uwaga

  • ProvisioningRequest Obsługa wymaga klastra usługi AKS z uruchomioną platformą Kubernetes w wersji 1.33 lub nowszej.
  • Rozważ użycie agresywnego profilu szybkiego skalowania w dół podczas korzystania z ProvisioningRequest, aby nieużywane węzły z częściowych lub niezrealizowanych operacji skalowania w górę były szybko usuwane.
Klasa udostępniania opis
check-capacity.autoscaling.x-k8s.io Sprawdza, czy klaster ma wystarczającą ilość zasobów dla określonych zasobników. Jeśli zasoby są dostępne, autoskalator klastra rezerwuje je dla ProvisioningRequest na 10 minut, aby uniemożliwić innym ProvisioningRequests zarezerwowanie tych samych zasobów.
best-effort-atomic-scale-up.autoscaling.x-k8s.io Mechanizm automatycznego skalowania klastra dokłada wszelkich starań, aby w ramach jednej operacji zwiększenia skali przydzielić całość żądanych zasobów. Jeśli nie może udostępnić wszystkich wymaganych zasobów, operacja ProvisioningRequest kończy się niepowodzeniem, a narzędzie do automatycznego skalowania klastra ponawia próbę po okresie wstrzymania.

Aby zapoznać się z kompleksowym przykładem, który pokazuje integrację usługi Kueue z autoskalatorem klastra i ProvisioningRequest, zobacz Konfigurowanie usługi Kueue za pomocą autoskalatora klastra w usłudze AKS.

Pobieranie dzienników i stanu automatycznego skalowania klastra

Możesz pobrać dzienniki i aktualizacje stanu z narzędzia do automatycznego skalowania klastra, aby ułatwić diagnozowanie i debugowanie zdarzeń automatycznego skalowania. Usługa AKS zarządza narzędziem do automatycznego skalowania klastra w Twoim imieniu i uruchamia go na zarządzanej płaszczyźnie sterowania. Aby zbierać dzienniki płaszczyzny sterowania, utwórz ustawienie diagnostyczne usługi Azure Monitor dla klastra AKS w witrynie Azure Portal lub użyj polecenia az monitor diagnostic-settings create i włącz kategorię dzienników cluster-autoscaler.

  1. Skonfiguruj regułę dla dzienników zasobów, aby przesyłać dzienniki autoskalatora klastra do usługi Log Analytics zgodnie z instrukcjami Konfigurowanie zbierania dzienników zasobów dla płaszczyzny sterowania usługi AKS. Upewnij się, że zaznaczysz pole wyboru cluster-autoscaler przy wybieraniu opcji dla Logów.

  2. Wybierz sekcję Dzienniki w klastrze.

  3. Jeśli ustawienia diagnostyczne używają trybu diagnostyki Azure, wprowadź następujące zapytanie w Log Analytics:

    AzureDiagnostics
    | where Category == "cluster-autoscaler"
    

    Jeśli ustawienia diagnostyczne używają trybu specyficznego dla zasobu, wprowadź następujące zapytanie:

    AKSControlPlane
    | where Category == "cluster-autoscaler"
    
  4. Wyświetl zdarzenia skalowania automatycznego klastra w górę, które nie zostały wyzwolone w interfejsie wiersza polecenia.

    kubectl get events --field-selector source=cluster-autoscaler,reason=NotTriggerScaleUp
    
  5. Wyświetlanie zdarzeń ostrzegawczych automatycznego skalowania klastra w interfejsie wiersza polecenia.

    kubectl get events --field-selector source=cluster-autoscaler,type=Warning
    
  6. Funkcja automatycznego skalowania klastra zapisuje również stan kondycji na configmap nazwie cluster-autoscaler-status. Ten stan można pobrać przy użyciu następującego kubectl polecenia:

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

Aby uzyskać więcej informacji, zobacz Często zadawane pytania dotyczące projektu Kubernetes/autoscaler w usłudze GitHub.

Metryki automatycznego skalowania klastra

Metryki płaszczyzny sterowania (wersja zapoznawcza) można używać z usługą zarządzaną Azure Monitor dla rozwiązania Prometheus w celu zbierania metryk automatycznego skalowania klastra. Element docelowy controlplane-cluster-autoscaler do scrapowania jest domyślnie wyłączony, więc musisz go włączyć, aby zbierać te metryki.

Dostępne metryki to cluster_autoscaler_unschedulable_pods_count i cluster_autoscaler_unneeded_nodes_count, które pokazują liczbę zasobników, których nie można przydzielić, oraz węzłów oznaczonych jako kandydaci do usunięcia. Możesz również monitorować, czy klaster można bezpiecznie automatycznie skalować za pomocą polecenia cluster_autoscaler_cluster_safe_to_autoscale, oraz czy skalowanie w dół jest objęte okresem wstrzymania za pomocą polecenia cluster_autoscaler_scale_down_in_cooldown.

W tym artykule pokazano, jak automatycznie skalować liczbę węzłów usługi AKS. Możesz również użyć mechanizmu automatycznego skalowania zasobników w poziomie, aby dostosować liczbę zasobników, w których działa aplikacja. Aby uzyskać instrukcje dotyczące korzystania z narzędzia do automatycznego skalowania zasobników poziomych, zobacz Skalowanie aplikacji w usłudze AKS.

Aby dodatkowo zwiększyć wykorzystanie zasobów klastra i zwolnić procesor i pamięć dla innych zasobników, zobacz Pionowy moduł skalowania zasobników.