omówienie skalowania Azure Kubernetes Service (AKS) — HPA, VPA, Cluster Autoscaler i KEDA

Po uruchomieniu aplikacji w Azure Kubernetes Service (AKS) można skalować zasobniki, zasoby zasobnika, węzły lub obciążenia sterowane zdarzeniami, aby dopasować je do zmian zapotrzebowania. Usługa AKS obsługuje skalowanie ręczne, automatyczne skalowanie zasobników w poziomie (HPA), automatyczne skalowanie zasobników w pionie (VPA), automatyczne skalowanie klastra, automatyczne skalowanie oparte na zdarzeniach Kubernetes (KEDA), automatyczne aprowizowanie węzłów oraz skalowanie impulsowe przy użyciu Azure Container Instances (ACI).

Wybieranie właściwej metody skalowania

Metoda skalowania Najlepsze dla Metryka klucza Przewodnik
Narzędzie do automatycznego skalowania zasobników w poziomie (HPA) Obciążenia bezstanowe lub podzielne o zmiennym obciążeniu Wykorzystanie procesora CPU, RPS, głębokość kolejki Kiedy należy używać narzędzia Horizontal Pod Autoscaling (HPA) na platformie Kubernetes?
Automatyczne skalowanie pionowe Podów (VPA) Zadania niepoddające się równolegleniu; właściwe dostosowanie żądań zasobów poda Użycie zasobów procesora CPU/pamięci Korzystanie z Vertical Pod Autoscaler w usłudze AKS
Cluster Autoscaler Pojemność na poziomie węzła, gdy zasobniki pozostają oczekujące Oczekujące pody Używanie funkcji Cluster Autoscaler w usłudze AKS
Automatyczne aprowizowanie węzłów (NAP) Oczekujące obciążenia wymagające pojemności maszyny wirtualnej o odpowiednim rozmiarze Wymagania dotyczące zasobów oczekującego zasobnika Omówienie automatycznego aprowizowania węzłów
KEDA Obciążenia sterowane zdarzeniami; wymagane skalowanie do zera Długość kolejki, zaległe zdarzenia Omówienie dodatku KEDA
Skalowanie skokowe ACI Obciążenia Linux z okresowymi skokami zapotrzebowania, które mieszczą się w ograniczeniach węzłów wirtualnych Skokowe zapotrzebowanie Tworzenie węzłów wirtualnych przy użyciu Azure Container Instances

Kiedy należy używać każdej metody skalowania

  • Użyj HPA, gdy Twoje obciążenie robocze może działać w wielu identycznych replikach, a zapotrzebowanie zmienia się w zależności od użycia procesora, pamięci lub szybkości żądań.
  • Użyj VPA, gdy Twojego obciążenia roboczego nie da się skalować w poziomie (nie można go zrównoleglić) lub gdy musisz odpowiednio dobrać żądania zasobów, aby usprawnić planowanie.
  • Użyj narzędzia Cluster Autoscaler, jeśli masz zdefiniowane pule węzłów i musisz dodawać lub usuwać węzły w zależności od liczby oczekujących podów.
  • Użyj NAP, jeśli chcesz automatycznie wybierać jednostkę SKU maszyny wirtualnej i aprowizować węzły bez konieczności ręcznego konfigurowania pul węzłów.
  • Użyj KEDA , gdy skalowanie powinno odpowiadać na zdarzenia zewnętrzne (kolejki, strumienie, komunikaty) lub potrzebujesz możliwości skalowania do zera.
  • Użyj skalowania skokowego ACI, gdy potrzebujesz szybkiego zwiększenia pojemności dla obciążeń systemu Linux bez oczekiwania na udostępnienie maszyny wirtualnej (zazwyczaj 2–5 minut).

Szybkie zalecenie

W przypadku większości obciążeń produkcyjnych warto zacząć od AKS Automatic, które wstępnie konfiguruje NAP, VPA i KEDA. W usłudze AKS Standard włączasz i konfigurujesz te funkcje jawnie.

Ręczne skalowanie zasobników lub węzłów

Repliki podów i węzły można ręcznie skalować, aby sprawdzić, jak aplikacja reaguje na zmiany w dostępnych zasobach, lub utrzymać stały poziom dostępnych zasobów. Aby przeprowadzić skalowanie ręcznie, zdefiniuj wymaganą liczbę replik lub węzłów. Następnie platforma Kubernetes tworzy lub usuwa zasobniki, a usługa AKS dodaje lub usuwa węzły z odpowiedniej puli węzłów.

Gdy zmniejszasz liczbę węzłów, usługa AKS wywołuje odpowiedni interfejs API usługi Azure Compute dla typu obliczeniowego klastra. W przypadku klastrów opartych na Virtual Machine Scale Sets interfejs API Virtual Machine Scale Sets określa węzły do usunięcia. Aby uzyskać więcej informacji, zobacz często zadawane pytania dotyczące Virtual Machine Scale Sets.

Aby rozpocząć pracę, zobacz:

Narzędzie do automatycznego skalowania zasobników w poziomie

Użyj HPA, gdy Twoje obciążenie może działać w wielu identycznych replikach, a zapotrzebowanie się waha. Skaluje się w oparciu o użycie procesora lub pamięci, metryki aplikacji (żądania na sekundę, latencję) albo zewnętrzne metryki kolejki i zaległości. Jeśli repliki mogą przekroczyć istniejącą pojemność węzłów, użyj wstępnie skonfigurowanej funkcji NAP w AKS Automatic lub skonfiguruj funkcję Cluster Autoscaler albo NAP w AKS Standard.

Nie używaj HPA i VPA dla tych samych metryk CPU lub pamięci. Aby użyć obu narzędzi do automatycznego skalowania, użyj funkcji VPA w trybie rekomendacji lub skonfiguruj narzędzie HPA do używania odrębnych metryk niestandardowych.

Zrzut ekranu diagramu przedstawiającego sposób działania funkcji Horizontal Pod Autoscaler w usłudze AKS.

Dowiedz się więcej: Kiedy należy używać narzędzia Horizontal Pod Autoscaling (HPA) na platformie Kubernetes?

Zobacz również: Korzystanie z automatycznego skalowania pionowego zasobników w usłudze AKS, aby odpowiednio dobrać żądania dotyczące procesora CPU i pamięci dla zasobników.

Pionowy autoskalator poda

Vertical Pod Autoscaler analizuje użycie procesora i pamięci przez pod oraz zaleca lub stosuje odpowiednie żądania zasobów. Użyj VPA, aby dostosować rozmiar zasobów dla obciążeń, których nie można efektywnie skalować przez dodawanie replik, lub aby usprawnić harmonogramowanie i wykorzystanie zasobów.

W zależności od trybu aktualizacji VPA może stosować zalecenia podczas tworzenia podów albo eksmitować i odtwarzać pody ze zaktualizowanymi żądaniami zasobów. Przed zezwoleniem VPA na automatyczne stosowanie zmian zapoznaj się z wymaganiami dotyczącymi dostępności obciążeń roboczych.

Aby rozpocząć, zobacz Korzystanie z funkcji Vertical Pod Autoscaler w usłudze AKS.

Autoskalowanie klastra

Narzędzie do automatycznego skalowania klastra dostosowuje liczbę węzłów w puli węzłów zgodnie z wymaganiami dotyczącymi planowania zasobników. Dodaje węzły, gdy nie można zaplanować zasobników z powodu niewystarczającej pojemności węzła i usuwa nie w pełni wykorzystywane węzły, gdy ich obciążenia mogą być uruchamiane w innym miejscu.

Zrzut ekranu diagramu pokazującego, jak Autoskalator klastra współpracuje z usługą AKS.

Narzędzie do automatycznego skalowania klastra jest często używane z rozwiązaniem HPA. HPA dostosowuje liczbę replik zasobników w zależności od obciążenia, podczas gdy Cluster Autoscaler dostosowuje zasoby węzłów, aby pomieścić te zasobniki.

Aby rozpocząć, zobacz Używanie narzędzia Cluster Autoscaler w usłudze AKS.

Zdarzenia skalowania poziomego

Jeśli pula węzłów nie ma wystarczających zasobów obliczeniowych dla zasobnika, zasobnik pozostanie oczekujący. Gdy Cluster Autoscaler wykryje pody, których nie można przydzielić z powodu ograniczeń zasobów w puli węzłów, zwiększa liczbę węzłów w tej puli. Kubernetes przydziela oczekujące pody po aprowizacji nowych węzłów i gdy będą one gotowe.

Aprowizowanie węzłów opartych na maszynie wirtualnej może potrwać kilka minut. W przypadku obciążeń z nagłym wzrostem zapotrzebowania rozważ użycie węzłów wirtualnych i Azure Container Instances.

Zdarzenia zmniejszania skali

Cluster Autoscaler monitoruje węzły pod kątem niewystarczającego wykorzystania i określa, czy ich pody mogą działać na innych węzłach. Gdy węzeł nie jest już wymagany, platforma Kubernetes ponownie wysyła zasobniki, a usługa AKS usuwa węzeł z puli węzłów.

Operacje skalowania w dół mogą zakłócać obciążenia robocze, gdy zasobniki przemieszczają się między węzłami. Uruchom wiele replik zasobników i skonfiguruj odpowiednie mechanizmy zapewniania dostępności, aby zminimalizować zakłócenia w działaniu.

Skalowanie automatyczne oparte na zdarzeniach w Kubernetes

Rozwiązanie Kubernetes Event-driven Autoscaling (KEDA) to składnik typu open source, który skaluje obciążenia na podstawie zdarzeń. KEDA rozszerza platformę Kubernetes na zasoby niestandardowe, w tym ScaledObject, opisujące sposób reagowania obciążenia na źródło zdarzenia lub metrykę.

KEDA jest przydatna w przypadku obciążeń roboczych przetwarzających kolejki, strumienie, komunikaty lub inne zaległe zdarzenia. Może skalować obsługiwane obciążenia robocze do zera, gdy nie ma żadnych zdarzeń, oraz zwiększać liczbę replik wraz ze wzrostem zaległości.

Nie łącz KEDA ScaledObject z oddzielnym HPA dla tego samego obciążenia roboczego. KEDA wewnętrznie tworzy i używa obiektu HPA, więc autoskalery będą ze sobą konkurować.

Aby rozpocząć, zobacz omówienie dodatku KEDA.

Automatyczne provisionowanie węzłów

Automatyczne aprowizowanie węzłów (NAP) używa projektu Firmy Karpenter typu open source do aprowizowania węzłów i zarządzania nimi zgodnie z oczekiwaniami dotyczącymi wymagań zasobników. NAP wybiera odpowiedni typ SKU maszyny wirtualnej i liczbę węzłów, aby sprostać zapotrzebowaniu na obciążenia w czasie rzeczywistym.

NAP zaczyna od dozwolonego zestawu jednostek SKU maszyn wirtualnych i wybiera zasoby dla oczekujących obciążeń. Możesz zdefiniować limity zasobów i preferencje planowania, aby kontrolować sposób, w jaki są aprowizowane węzły i rozdzielane obciążenia.

Skalowanie i zabezpieczenia płaszczyzny sterowania

Usługa AKS automatycznie skaluje składniki płaszczyzny sterowania na podstawie rozmiaru klastra i wykorzystania zasobów serwera interfejsu API. Te wskazówki dotyczą usługi AKS Automatic i AKS Standard. Używaj warstwy cenowej Standard lub Premium w przypadku obciążeń produkcyjnych lub działających na dużą skalę.

Kubernetes ma wielowymiarowy zakres skalowalności, w którym każdy typ zasobu stawia odmienne wymagania warstwie sterowania. Na przykład obiekty Secret są często śledzone przez wiele kontrolerów i podów, które wykonują początkowe wywołanie LIST, co powoduje większe obciążenie płaszczyzny sterowania niż w przypadku zasobów śledzonych rzadziej. Intensywne skalowanie w jednym wymiarze może zmniejszyć wydajność w innych. Na przykład uruchamianie setek tysięcy zasobników może zmniejszyć szybkość mutacji zasobnika obsługiwanego przez płaszczyznę sterowania. Aby zapoznać się z zaleceniami, zobacz Najlepsze praktyki klienta Kubernetes dla klastrów usługi AKS o dużej skali.

Aby sprawdzić, czy płaszczyzna sterowania została skalowana w górę, sprawdź obiekt ConfigMap large-cluster-control-plane-scaling-status:

kubectl describe configmap large-cluster-control-plane-scaling-status -n kube-system

Obecność tego obiektu ConfigMap potwierdza, że usługa AKS skaluje warstwę sterowania.

Zabezpieczenia płaszczyzny sterowania

Jeśli automatyczne skalowanie serwera interfejsu API nie stabilizuje go przy dużym obciążeniu, usługa AKS może wdrożyć zarządzany mechanizm ochrony serwera interfejsu API. To zabezpieczenie ostatniej instancji ogranicza tempo żądań od klientów niesystemowych, aby zapobiec sytuacji, w której płaszczyzna sterowania przestaje odpowiadać. Wywołania serwera API o krytycznym znaczeniu dla systemu z komponentów takich jak kubelet nadal działają.

Aby ustalić, czy zastosowano zabezpieczenie zarządzanego serwera interfejsu API, sprawdź aks-managed-apiserver-guardFlowSchema i PriorityLevelConfiguration:

kubectl get flowschemas
kubectl get prioritylevelconfigurations

Zabezpieczenie jest aktywne, gdy aks-managed-apiserver-guard pojawia się w danych wyjściowych obu poleceń.

Jeśli te zasoby są obecne, zapoznaj się z przewodnikiem rozwiązywania problemów z serwerem interfejsu API i itp. , aby uzyskać wskazówki dotyczące ograniczania ryzyka.

Przenoszenie do usługi Azure Container Instances (ACI)

Usługę AKS można zintegrować z Azure Container Instances w celu obsługi szybkiego wzrostu zapotrzebowania. Automatyczne skalowanie podów może utworzyć więcej replik, niż jest w stanie obsłużyć istniejąca pula węzłów, a udostępnienie dodatkowych węzłów bazujących na maszynach wirtualnych może potrwać kilka minut. Usługa ACI zapewnia pojemność obliczeniową bez konieczności stosowania dodatkowych węzłów maszyny wirtualnej.

Węzły wirtualne (wirtualne węzły Kubernetes obsługiwane przez ACI) obsługują pody i węzły z systemem Linux oraz wymagają klastra AKS korzystającego z sieci Azure CNI. Nie obsługują niektórych typowych scenariuszy, w tym zakresów autoryzowanych adresów IP serwera API, trwałych woluminów i żądań trwałych woluminów, protokołu IPv6 oraz tożsamości zarządzanych przypisanych do węzłów wirtualnych. Zapoznaj się z ograniczeniami węzła wirtualnego przed użyciem skalowania skokowego w ACI.

Zrzut ekranu przedstawiający diagram przedstawiający sposób działania Azure Container Instances z usługą AKS.

Składnik usługi AKS węzły wirtualne jest oparty na Virtual Kubelet i przedstawia ACI jako wirtualny węzeł Kubernetes. Platforma Kubernetes może uruchamiać kwalifikujące się pody przez węzeł wirtualny tak, aby działały jako wystąpienia kontenerów w usłudze ACI zamiast bezpośrednio na węzłach maszyn wirtualnych AKS.

Węzły wirtualne korzystają z innej podsieci w tej samej sieci wirtualnej co klaster AKS. Ta konfiguracja zapewnia łączność sieci prywatnej między usługą AKS i usługą ACI, umożliwiając usłudze ACI działanie jako logiczne rozszerzenie klastra.

Użyj następujących zasobów, aby zaimplementować metodę skalowania pasującą do obciążenia:

Aby uzyskać więcej informacji na temat podstawowych pojęć związanych z platformą Kubernetes i usługą AKS, zobacz: