Omówienie skalowania automatycznego klastra w usłudze Azure Kubernetes Service (AKS)

Aby nadążyć za wymaganiami aplikacji w usłudze Azure Kubernetes Service (AKS), może być konieczne dostosowanie liczby węzłów, które uruchamiają obciążenia. Składnik automatycznego skalowania klastra obserwuje pody w klastrze, których nie można zaplanować z powodu ograniczeń zasobowych. Gdy narzędzie do automatycznego skalowania klastra wykryje nieplanowane zasobniki, skaluje w górę liczbę węzłów w puli węzłów, aby zaspokoić zapotrzebowanie aplikacji. Sprawdza również węzły niedostatecznie wykorzystywane i skaluje w dół kwalifikujące się węzły, gdy ich obciążenia można bezpiecznie ponownie zaplanować.

Ten artykuł pomaga zrozumieć, jak działa narzędzie do automatycznego skalowania klastra w usłudze AKS. Zawiera również wskazówki, najlepsze praktyki i kwestie do rozważenia przy konfigurowaniu narzędzia do automatycznego skalowania klastra dla obciążeń usługi AKS. Jeśli chcesz włączyć, wyłączyć lub zaktualizować automatyczne skalowanie klastra dla obciążeń usługi AKS, zobacz Używanie narzędzia do automatycznego skalowania klastra w usłudze AKS.

Informacje o autoskalatorze klastra

Klastry często wymagają sposobu automatycznego skalowania w celu dostosowania się do zmieniających się wymagań aplikacji, takich jak między dni roboczymi a wieczorami lub weekendami. Klastry usługi AKS mogą być skalowane w następujący sposób:

  • Narzędzie do automatycznego skalowania klastra okresowo sprawdza zasobniki, których nie można umieścić na węzłach z powodu ograniczeń zasobów. Następnie klaster automatycznie zwiększa liczbę węzłów. Skalowanie ręczne jest wyłączone w przypadku korzystania z narzędzia do automatycznego skalowania klastra. Aby uzyskać więcej informacji, zobacz Jak działa skalowanie w górę?
  • Narzędzie Horizontal Pod Autoscaler używa serwera Metrics w klastrze Kubernetes do monitorowania zapotrzebowania na zasoby podów. Jeśli aplikacja potrzebuje większej ilości zasobów, liczba zasobników zostanie automatycznie zwiększona, aby zaspokoić zapotrzebowanie.
  • Narzędzie Pionowe Automatyczne Skalowanie Zasobników automatycznie ustawia żądania zasobów i limity na kontenerach dla każdego typu obciążenia na podstawie wcześniejszego użycia, aby upewnić się, że zasobniki są umieszczane na węzłach z wymaganymi zasobami procesora CPU i pamięci.

Zrzut ekranu przedstawiający sposób, w jaki narzędzie do automatycznego skalowania klastra i narzędzia do automatycznego skalowania zasobników poziomych często współpracują ze sobą w celu obsługi wymaganych wymagań aplikacji.

Typowym rozwiązaniem jest włączenie autoskalowania klastra dla węzłów oraz skalowania pionowego lub poziomego zasobników. Po włączeniu automatycznego skalowania klastra stosuje określone reguły skalowania, gdy rozmiar puli węzłów jest niższy niż minimalna liczba węzłów, aż do osiągnięcia maksymalnej liczby węzłów. Narzędzie do automatycznego skalowania klastra czeka, aż nowy węzeł będzie potrzebny w puli węzłów lub aż węzeł będzie można bezpiecznie usunąć z obecnej puli węzłów. Aby uzyskać więcej informacji, zobacz Jak działa skalowanie w dół?

Najlepsze rozwiązania i zagadnienia

  • Podczas implementowania stref dostępności za pomocą narzędzia do automatycznego skalowania klastra należy użyć pojedynczej puli węzłów dla każdej strefy. Ustaw parametr --balance-similar-node-groups na True, aby zachować zrównoważone rozmieszczenie węzłów między strefami dla Twoich obciążeń roboczych podczas operacji zwiększania skali. Jeśli nie używasz tego podejścia, operacje skalowania w dół mogą zakłócić równowagę węzłów między strefami. W przypadku wielozonowych pul węzłów można również pozwolić usłudze AKS dynamicznie wybierać strefy za pomocą automatycznego rozmieszczania w strefach (--zones auto), które umieszcza węzły w strefach dysponujących dostępną pojemnością, przy czym maksymalny udział instancji w każdej strefie wynosi 50%. Automatyczne umieszczanie stref można użyć podczas tworzenia puli węzłów lub aktualizowania istniejącej puli węzłów.

    Uwaga / Notatka

    Autoskalator klastra nie jest świadomy stref, a bazowe zestawy skalowania maszyn wirtualnych obsługują przydział do stref. Powyższa najlepsza praktyka staje się jeszcze bardziej istotna, gdy używasz opartych na strefach ograniczeń rozproszenia topologii zasobników w pojedynczej wielostrefowej puli węzłów, ponieważ restrykcyjne ograniczenia mogą sprawić, że zasobniki utkną w stanie oczekiwania, zwłaszcza w regionach z ograniczoną dostępnością zasobów lub w przypadku awarii strefy.

  • W przypadku klastrów z ponad 400 węzłami użyj Azure CNI lub Azure CNI Overlay.

  • Aby efektywnie uruchamiać obciążenia jednocześnie w pulach węzłów typu spot i na żądanie, rozważ użycie rozszerzeń priorytetów. Ekspander priorytetów używa priorytetów i wzorców nazw puli węzłów zdefiniowanych w obiekcie ConfigMap cluster-autoscaler-priority-expander, aby wybrać pulę węzłów podczas skalowania w górę. Poniższa konfiguracja ilustruje tę konfigurację.

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: cluster-autoscaler-priority-expander
      namespace: kube-system
    data:
      priorities: |-
        10:
          - .*spotpool1.*
          - .*spotpool2.*
        50:
          - .*ondemandpool1.*
    
  • Zachowaj ostrożność podczas przypisywania żądań dotyczących procesora i pamięci dla podów. Autoskaler klastra zwiększa skalę na podstawie oczekujących zasobników, a nie obciążenia procesora ani pamięci na węzłach.

  • W przypadku klastrów, w których jednocześnie działają zarówno długotrwałe obciążenia robocze, takie jak aplikacje internetowe, jak i krótkotrwałe lub skokowe obciążenia zadań, rozdziel je między odrębne pule węzłów za pomocą reguł afiniczności lub ekspanderów.

  • Użyj obiektu PodDisruptionBudget, aby zapobiec niepotrzebnemu drenowaniu węzłów lub operacjom zmniejszania skali. Dodanie adnotacji cluster-autoscaler.kubernetes.io/safe-to-evict: "false" w specyfikacji Poda także zapobiega usuwaniu Podów. Użyj tej adnotacji z ostrożnością, ponieważ może to spowodować, że narzędzie do automatycznego skalowania klastra napotka problemy podczas opróżniania węzła z uruchomionym zasobnikem zawierającym tę adnotację.

  • W puli węzłów z obsługą skalowania automatycznego nie należy ręcznie zmieniać bieżącej liczby węzłów. Aby zmienić dozwolony zakres skalowania, zaktualizuj minimalną i maksymalną liczbę węzłów klastra po ocenie wymagań dotyczących obciążenia i pojemności.

  • Węzły nie są skalowane w górę, jeśli zasobniki mają wartość PriorityClass mniejszą niż -10. Priorytet -10 jest zarezerwowany dla podów z nadmiernymi zasobami. Aby uzyskać więcej informacji, zobacz Using the cluster autoscaler with Pod Priority and Preemption (Używanie narzędzia do automatycznego skalowania klastra z priorytetem zasobnika i wywłaszczeniem).

  • Nie łącz innych mechanizmów skalowania automatycznego węzłów, takich jak autoskalatory zestawu skalowania maszyn wirtualnych, z funkcją automatycznego skalowania klastra.

  • Narzędzie do automatycznego skalowania klastra może nie być w stanie skalować w dół, jeśli zasobniki nie mogą się przenosić, na przykład w następujących sytuacjach:

Ważne

Nie wprowadzaj zmian w poszczególnych węzłach w pulach węzłów skalowanych automatycznie. Wszystkie węzły w tej samej grupie węzłów powinny mieć jednolitą pojemność, etykiety, tainty i pody systemowe działające na nich.

  • Narzędzie do automatycznego skalowania klastra nie jest odpowiedzialne za wymuszanie "maksymalnej liczby węzłów" w puli węzłów klastra niezależnie od kwestii związanych z planowaniem podów. Jeśli jakikolwiek aktor niezwiązany z automatycznym skalowaniem klastra ustawia liczbę pul węzłów na wartość przekraczającą skonfigurowane maksimum dla automatycznego skalowania klastra, autoskalowanie klastra nie usuwa automatycznie węzłów. Zachowanie skalowania automatycznego klastra w dół pozostaje ograniczone do usuwania nie w pełni wykorzystanych węzłów. Jedynym celem konfiguracji maksymalnej liczby węzłów automatycznego skalera klastra jest wymuszenie górnego limitu operacji skalowania w górę. Nie ma to żadnego wpływu na zagadnienia dotyczące skalowania w dół.

Profil skalowania automatycznego klastra

Profil narzędzia do automatycznego skalowania klastra to zestaw parametrów, które kontrolują zachowanie narzędzia do automatycznego skalowania klastra. Profil automatycznego skalowania klastra można skonfigurować podczas tworzenia klastra lub aktualizowania istniejącego klastra.

Optymalizowanie profilu skalowania automatycznego klastra

Ustawienia profilu automatycznego skalowania klastra należy dostosować zgodnie z konkretnymi scenariuszami obciążenia, a jednocześnie rozważyć kompromisy między wydajnością a kosztami. Ta sekcja zawiera przykłady, które pokazują te kompromisy.

Należy pamiętać, że ustawienia profilu automatycznego skalowania klastra są stosowane na poziomie całego klastra i dotyczą wszystkich pul węzłów z włączoną funkcją automatycznego skalowania. Wszelkie akcje skalowania, które mają miejsce w jednej puli węzłów, mogą mieć wpływ na zachowanie skalowania automatycznego innych pul węzłów, co może prowadzić do nieoczekiwanych wyników. Upewnij się, że stosujesz spójne i zsynchronizowane konfiguracje profilów we wszystkich odpowiednich pulach węzłów, aby upewnić się, że uzyskasz żądane wyniki.

Przykład 1. Optymalizowanie pod kątem wydajności

W przypadku klastrów, które obsługują znaczne i pękające obciążenia z głównym naciskiem na wydajność, należy użyć krótkiej wartości scan-interval , aby funkcja automatycznego skalowania klastra często przeszacowywała klaster. Zwiększenie tego interwału zmniejsza częstotliwość ponownej oceny i powiązane działanie interfejsu API, ale zwiększa czas, zanim funkcja automatycznego skalowania klastra reaguje. Zmniejsz scale-down-utilization-threshold, aby ograniczyć kwalifikowanie się niewykorzystanych w pełni węzłów do skalowania w dół. Ponadto zwiększ wartość ok-total-unready-count i max-total-unready-percentage.

W przypadku klastrów z zasobnikami DaemonSet ustaw wartość ignore-daemonsets-utilization na true , aby żądania zasobników DaemonSet nie były uwzględniane, gdy narzędzie do automatycznego skalowania klastra oblicza wykorzystanie węzłów w dół. To ustawienie może sprawić, że węzły będą bardziej prawdopodobne, aby spadły poniżej scale-down-utilization-threshold i kwalifikowały się do skalowania w dół. Zobacz Skonfiguruj profil automatycznego skalowania klastra dla obciążeń o nagłym wzroście.

Przykład 2. Optymalizowanie pod kątem kosztów

Jeśli chcesz mieć profil zoptymalizowany pod kątem kosztów, zalecamy ustawienie następujących konfiguracji parametrów:

  • Zmniejsz scale-down-unneeded-time wartość, która określa czas, przez jaki węzeł powinien być niepotrzebny, zanim zakwalifikuje się do skalowania w dół.
  • Zmniejsz wartość scale-down-delay-after-add, czyli czas oczekiwania po dodaniu węzła przed rozważeniem go pod kątem skalowania w dół.
  • Zwiększ scale-down-utilization-threshold, który jest progiem wykorzystania do usuwania węzłów.
  • Zwiększ max-empty-bulk-delete, maksymalną liczbę węzłów, które można usunąć w jednym wywołaniu.
  • Ustaw skip-nodes-with-local-storage wartość false.
  • Zwiększ ok-total-unready-count i max-total-unready-percentage.

Typowe problemy i zalecenia dotyczące ograniczania ryzyka

Wyświetlaj niepowodzenia skalowania oraz zdarzenia, które nie zostały zapoczątkowane, za pomocą interfejsu wiersza polecenia lub portalu.

Nie uruchamianie operacji skalowania w górę

Typowe przyczyny Zalecenia dotyczące ograniczania ryzyka
Konflikty koligacji węzłów PersistentVolume, które mogą wystąpić podczas korzystania z automatycznego skalera klastra w środowisku z wieloma strefami dostępności, lub gdy strefa zasobnika lub trwałego woluminu różni się od strefy węzła. Użyj jednej puli węzłów na strefę dostępności i włącz --balance-similar-node-groups. Można również ustawić volumeBindingMode pole na WaitForFirstConsumer w specyfikacji podu, aby zapobiec powiązaniu woluminu z węzłem do momentu utworzenia podu przy użyciu woluminu.
Taints i Tolerations/Konflikty koligacji węzła Oceń zabrudzenia przypisane do węzłów i przejrzyj tolerancje zdefiniowane w podach. W razie potrzeby wprowadź zmiany w zanieczyszczeniach i tolerancjach, aby upewnić się, że pody mogą być efektywnie zaplanowane na węzłach.
Restrykcyjne ograniczenia rozprzestrzeniania topologii Podów Narzędzie do automatycznego skalowania klastra uruchamia symulacje planowania przed zainicjowanie operacji skalowania w górę. Jeśli ustali, że zasobnik nie może być zaplanowany na nowym węźle z powodu restrykcyjnych ograniczeń rozprzestrzeniania topologii, nie będzie podejmować próby skalowania w górę. Aby temu zapobiec, rozważ złagodzenie ograniczeń rozprzestrzeniania się topologii.

Niepowodzenia operacji skalowania w górę

Typowe przyczyny Zalecenia dotyczące ograniczania ryzyka
Wyczerpanie adresów IP w podsieci Dodaj kolejną podsieć w tej samej sieci wirtualnej i dodaj kolejną pulę węzłów do nowej podsieci.
Wyczerpanie limitu przydziału rdzeni Zatwierdzony limit przydziału rdzeni został wyczerpany. Zażądaj zwiększenia limitu przydziału. Narzędzie do automatycznego skalowania klastra wprowadza stan wycofywania wykładniczego w ramach określonej grupy węzłów, gdy wystąpi wiele nieudanych prób skalowania w górę.
Maksymalny rozmiar puli węzłów Zwiększ maksymalną liczbę węzłów w puli węzłów lub utwórz nową pulę węzłów.
Żądania/wywołania przekraczają limit szybkości Zobacz błędy 429 Zbyt wiele żądań.

Niepowodzenia operacji zmniejszania skali

Typowe przyczyny Zalecenia dotyczące ograniczania ryzyka
Pod blokujący opróżnianie węzła/Nie można usunąć poda • Wyświetl typy zasobników, które mogą zapobiegać skalowaniu w dół.
• W przypadku zasobników korzystających z magazynu lokalnego, takiego jak hostPath i emptyDir, ustaw flagę profilu automatycznego skalowania klastra na skip-nodes-with-local-storagefalse.
• W specyfikacji poda ustaw adnotację cluster-autoscaler.kubernetes.io/safe-to-evict na true.
• Sprawdź plik PDB, ponieważ może być restrykcyjny.
Minimalny rozmiar puli węzłów Zmniejsz minimalny rozmiar puli węzłów.
Żądania/wywołania przekraczają limit szybkości Zobacz błędy 429 Zbyt wiele żądań.
Zablokowane operacje zapisu Nie wprowadzaj żadnych zmian w w pełni zarządzanej grupie zasobów usługi AKS (zobacz zasady pomocy technicznej usługi AKS). Usuń lub zresetuj wszystkie blokady zasobów, które zostały wcześniej zastosowane do grupy zasobów.

Inne problemy

Typowe przyczyny Zalecenia dotyczące ograniczania ryzyka
GrupaNiezgodnaZMapąKonfiguracjiPriorytetów Upewnij się, że każda grupa węzłów, która wymaga skalowania automatycznego, pasuje do co najmniej jednego wzorca nazwy puli węzłów w priorities danych cluster-autoscaler-priority-expander ConfigMap. Aby uzyskać ogólne zachowanie ekspandera, zobacz Co to są rozszerzenia?

Pula węzłów w wycofywaniu

Pula węzłów w trybie odstąpienia została wprowadzona w wersji 0.6.2 i powoduje, że narzędzie Cluster Autoscaler odstępuje od skalowania puli węzłów po awarii.

W zależności od tego, jak długo występują błędy operacji skalowania, autoskalator może poczekać do 30 minut przed podjęciem kolejnej próby. Stan wycofywania puli węzłów można zresetować, wyłączając i ponownie włączając skalowanie automatyczne.