Konfigurowanie wielu pul węzłów przy użyciu pul węzłów typu spot usługi AKS za pomocą narzędzia do automatycznego skalowania klastrów

Ukończone

Platforma Azure udostępnia wystąpienia maszyn wirtualnych platformy Azure, które oferują skalowalność przy jednoczesnym zmniejszeniu kosztów i są idealne dla obciążeń, które mogą zostać przerwane. Jednak te maszyny wirtualne mają dostęp do nieużywanej pojemności obliczeniowej platformy Azure przy niższych cenach, ale nadal obsługują scenariusze obliczeniowe o wysokiej wydajności.

Rozwiązanie Twojej firmy do śledzenia dronów jest wdrażane w usłudze Azure Kubernetes Service (AKS) jako wiele konteneryzowanych aplikacji i usług. Jedna z tych usług to usługa przetwarzania wsadowego, która planuje ścieżki lotu dronów. Szybkie rozszerzenie bazy klientów powoduje, że usługa przetwarzania wsadowego jest zalewana żądaniami i tworzy coraz większą listę prac dostaw. Taka sytuacja powoduje opóźnienia i frustrację klientów.

Automatyczne skalowanie liczby replik usługi przetwarzania wsadowego zapewnia terminowe przetwarzanie zamówień. Jednak wymaga to również wdrożenia większej liczby węzłów, aby spełnić wymagania zasobów obliczeniowych. Analizując trendy użycia w usłudze Azure Monitor, zauważasz, że te węzły są używane tylko w określonych porach i nie odbywa się to w sposób ekonomiczny. Usługa przetwarzania wsadowego jest bezstanowa i nie zapisuje żadnych danych dotyczących sesji klienta. Uświadamiasz sobie, że możesz zaoszczędzić w następujący sposób:

  • Korzystanie z tańszych wystąpień węzłów.
  • Automatyczne skalowanie liczby węzłów w puli węzłów, która jest skonfigurowana do przetwarzania wsadowego.

Przyjrzyjmy się infrastrukturze, która umożliwia zastosowanie tego ekonomicznego rozwiązania w usłudze AKS.

Co to jest maszyna wirtualna typu spot na platformie Azure?

Maszyna wirtualna typu spot umożliwia dostęp do nieużywanej pojemności obliczeniowej platformy Azure w dużo niższej cenie. Maszyny wirtualne typu spot zastępują na platformie Azure istniejące maszyny wirtualne o niskim priorytecie. Maszyn wirtualnych typu spot można używać do uruchamiania między innymi następujących obciążeń:

  • scenariusze obliczeniowe o wysokiej wydajności, przetwarzanie wsadowe lub aplikacje do renderowania wizualnego;

  • aplikacje bezstanowe na dużą skalę;

  • środowiska deweloperskie/testowe, w tym obciążenia związane z ciągłą integracją (CI) i ciągłym dostarczaniem (CD).

Dostępność maszyn wirtualnych typu spot

Dostępność maszyny wirtualnej typu spot jest zależna od takich czynników, jak rozmiar pojemności, region i pora dnia. Platforma Azure przydziela maszyny wirtualne tylko wtedy, gdy jest dostępna pojemność. W związku z tym nie ma umowy dotyczącej poziomu usług (SLA) dla tych typów maszyn wirtualnych i nie oferują żadnych gwarancji wysokiej dostępności.

Zasady eksmisji maszyny wirtualnej typu spot

Domyślną zasadą eksmisji maszyny wirtualnej typu spot jest Cofnięcie przydziału. Eksmituje maszyny wirtualne platformy Azure z powiadomieniem o 30 sekundach, gdy pojemność w regionie stanie się ograniczona. Maszyna wirtualna, dla której ustawiono zasadę Cofnięcie przydziału, po eksmisji przechodzi w stan zatrzymano-cofnięto przydział. Eksmitowaną maszynę wirtualną można wdrożyć ponownie, gdy pojemność typu spot będzie znów dostępna. Maszyna wirtualna, której cofnięto przydział, nadal wlicza się do limitu przydziału procesora wirtualnego typu spot, a opłaty za przydzielone dyski są nadal naliczane.

Co to jest zestaw skalowania maszyn wirtualnych typu spot?

Zestaw skalowania maszyn wirtualnych typu spot to zestaw skalowania maszyn wirtualnych, który obsługuje maszyny wirtualne typu spot na platformie Azure. Te maszyny wirtualne działają w taki sam sposób jak zwykłe maszyny wirtualne typu spot, ale z jedną różnicą: w przypadku korzystania z obsługi zestawu skalowania maszyn wirtualnych na potrzeby maszyn wirtualnych typu sport na platformie Azure należy wybrać jedną z dwóch zasad eksmisji:

  • Cofanie przydziału: zasady cofania przydziału pełnią dokładnie funkcję zgodnie z wcześniejszym opisem.

  • Usuń: zasady Usuwania umożliwiają uniknięcie kosztów dysków i osiąganie limitów przydziału. W przypadku zasady eksmisji Usuwanie eksmitowane maszyny wirtualne są usuwane wraz z ich dyskami bazowymi. Funkcja automatycznego skalowania zestawu skalowania może teraz automatycznie próbować zrekompensować eksmisję maszyn wirtualnych, tworząc nowe maszyny wirtualne. Tworzenie maszyn wirtualnych nie jest gwarantowane, jednak eksmitowane maszyny wirtualne nie są wliczane do limitu przydziału procesora wirtualnego ani nie powodują zwiększenia kosztów dysków bazowych.

    Najlepszym rozwiązaniem jest używanie funkcji automatycznego skalowania tylko wtedy, gdy zasady eksmisji dla zestawu skalowania są ustawione na Usuwanie.

Co to jest pula węzłów typu spot w usłudze Azure Kubernetes Service (AKS)?

Pula węzłów typu spot to pula węzłów użytkownika, która korzysta z zestawu skalowania maszyn wirtualnych typu spot. Usługa AKS obsługuje maszyny wirtualne typu spot, gdy:

  • Chcesz utworzyć pule węzłów użytkownika.
  • Zależy Ci na oszczędności dzięki obsłudze zestawu skalowania maszyn wirtualnych na potrzeby maszyn wirtualnych typu spot platformy Azure.

Powody użycia pul węzłów typu spot:

  • Wykorzystanie nieużywanej pojemności na platformie Azure.
  • Korzystanie z funkcji zestawu skalowania z zasadami eksmisji Usuwanie.
  • Definiowanie maksymalnej ceny, którą chcesz płacić za godzinę.
  • Włączanie polecanego narzędzia do automatycznego skalowania klastra Kubernetes usługi AKS w przypadku używania pul węzłów typu spot.

Na przykład w celu obsługi usługi przetwarzania wsadowego aplikacji do śledzenia dronów można utworzyć pulę węzłów użytkownika typu spot i włączyć narzędzie do automatycznego skalowania klastra. Następnie można skonfigurować poziomy moduł skalowania zasobników w celu wdrożenia większej liczby usług przetwarzania wsadowego w celu dopasowania ich do wymagań dotyczących zasobów.

W miarę wzrostu zapotrzebowania na węzły funkcja automatycznego skalowania klastra może skalować liczbę węzłów w puli węzłów typu spot w górę i w dół. Jeśli wystąpi eksmisje węzłów, narzędzie do automatycznego skalowania klastra nadal próbuje skalować liczbę węzłów w górę, jeśli dodatkowe węzły są nadal potrzebne.

Ograniczenia puli węzłów typu spot

Przed podjęciem decyzji o dodaniu puli węzłów użytkownika typu spot do klastra usługi AKS należy wziąć pod uwagę następujące ograniczenia:

  • Podstawowy zestaw skalowania typu spot jest wdrażany tylko w jednej domenie błędów i nie daje gwarancji wysokiej dostępności.
  • Klaster AKS wymaga włączenia obsługi wielu pul węzłów.
  • Pul węzłów typu spot można używać tylko jako pul węzłów użytkownika.
  • Nie można uaktualnić pul węzłów typu spot.
  • Utworzenie maszyn wirtualnych typu spot nie jest gwarantowane. Tworzenie węzłów typu spot zależy od dostępności pojemności i limitów przydziałów we wdrożonym regionie platformy Azure klastra.

Należy pamiętać, że pule węzłów typu spot powinny być używane tylko w przypadku obciążeń, które mogą zostać przerwane.

Ważne

W przypadku niektórych subskrypcji, takich jak subskrypcje dostępu sponsorowanego, możliwość tworzenia maszyn wirtualnych typu spot i pul węzłów typu spot jest ograniczona. Utworzenie puli węzłów typu spot dla klastra może być niemożliwe.

Dodawanie puli węzłów typu spot do klastra usługi AKS

Pula węzłów typu spot nie może być pulą węzłów systemu dla klastra usługi AKS. Najpierw należy utworzyć klaster, a następnie użyć az aks nodepool add polecenia , aby dodać nową pulę węzłów użytkownika.

Aby skonfigurować nową pulę węzłów jako pulę węzłów typu spot, należy ustawić kilka parametrów.

Priorytet

Parametr --priority nowej puli węzłów ma domyślnie ustawioną wartość Regular. Ustaw wartość Spot, aby wskazać, że nowo utworzona pula jest pulą węzłów typu spot. Tej wartości nie można zmienić po utworzeniu.

Zasady eksmisji

Pula węzłów typu spot musi korzystać z zestawu skalowania maszyn wirtualnych. Jak pamiętasz wcześniej, pula węzłów typu spot używa zestawu skalowania typu spot. Ustaw --eviction-policy wartość , aby Delete umożliwić zestawowi skalowania usunięcie zarówno węzła, jak i bazowego, przydzielonego dysku używanego przez węzeł. Nie można zmienić tej wartości po utworzeniu.

Zasady eksmisji można ustawić na Deallocate, ale gdy te węzły są eksmitowane, nadal są one liczone względem limitu przydziału obliczeniowego w celu skalowania lub uaktualniania klastra.

Maksymalna cena węzła typu spot

Pule węzłów typu spot optymalizują koszty, ograniczając maksymalną kwotę, jaką chcesz zapłacić za węzeł typu spot na godzinę. Aby ustawić bezpieczną kwotę, użyj parametru --spot-max-price. Po osiągnięciu tej wartości nowo utworzone węzły typu spot są eksmitowane.

Tę wartość można ustawić na dowolną dodatnią kwotę do pięciu miejsc dziesiętnych lub ustawić na -1wartość . --spot-max-price Ustawienie wartości na wartość wpływa na -1 pulę węzłów w następujący sposób:

  • Węzły nie są eksmitowane na podstawie ceny węzła.
  • Koszt nowych węzłów zależy od bieżącej ceny węzłów typu spot lub ceny dla węzła standardowego przy użyciu tego, co jest niższe.

Jeśli na przykład ustawisz wartość 0,98765, maksymalna cena węzła w USD wynosi 0,98765 za godzinę. Gdy użycie węzła przekroczy tę wartość, zostanie on eksmitowany.

Włączanie narzędzia do automatycznego skalowania klastra

Zalecamy włączenie narzędzia do automatycznego skalowania klastra przy użyciu parametru --enable-cluster-autoscaler. Jeśli nie skorzystasz z automatycznego skalowania klastra, narażasz się na ryzyko, że liczba węzłów w puli węzłów spadnie do zera ze względu na eksmisję węzłów z powodu ograniczeń pojemności platformy Azure.

Minimalna liczba węzłów

Ustaw minimalną liczbę węzłów na wartość z zakresu od 1 do 100 przy użyciu parametru --min-count. Minimalna liczba węzłów jest wymagana, jeśli jest włączone narzędzie do automatycznego skalowania klastra.

Maksymalna liczba węzłów

Ustaw maksymalną liczbę węzłów na wartość z zakresu od 1 do 100 przy użyciu parametru --max-count. Maksymalna liczba węzłów jest wymagana, jeśli jest włączone narzędzie do automatycznego skalowania klastra.

Przykładowa konfiguracja

Oto przykładowe az aks nodepool add polecenie, które dodaje pulę węzłów typu spot z maksymalną liczbą 3 i minimalną liczbą 1. Zwróć uwagę na użycie polecenia --enable-cluster-autoscaler , aby włączyć funkcje węzła typu spot.

az aks nodepool add \
    --resource-group resourceGroup \
    --cluster-name aksCluster \
    --name spotpool01 \
    --enable-cluster-autoscaler \
    --max-count 3 \
    --min-count 1 \
    --priority Spot \
    --eviction-policy Delete \
    --spot-max-price -1 \
    --no-wait

Wdrażanie zasobników w pulach węzłów typu spot

Podczas wdrażania obciążeń na platformie Kubernetes można przekazać informacje do harmonogramu, aby określić, na których węzłach obciążenia mogą, a na których nie mogą być uruchamiane. Harmonogram obciążeń można kontrolować, konfigurując defekty, tolerancję i koligację węzłów. Węzły typu spot są konfigurowane z określoną etykietą i z określonym defektem.

Co to jest defekt?

Defekty są stosowane do węzłów po to, aby wskazać, że można na nich zaplanować tylko określone zasobniki. Węzły typu spot są konfigurowane z etykietą kubernetes.azure.com/scalesetpriority:spot.

Co to jest tolerancja?

Tolerancja to specyfikacja stosowana do zasobnika w celu zezwolenia, ale nie wymaga, zasobnika, który ma być zaplanowany w węźle z odpowiednim defektem. Węzły typu spot są konfigurowane z defektem węzła kubernetes.azure.com/scalesetpriority=spot:NoSchedule.

Uwaga

Defekty i tolerancje nie gwarantują, że zasobnik zostanie umieszczony w określonym węźle. Jeśli na przykład węzeł nie ma defektu, możliwe jest, że zasobnik z tolerancją może być zaplanowany na nieoznaczonym węźle. Określenie koligacji z defektami i tolerancjami może rozwiązać ten problem.

Co to jest koligacja węzłów?

Koligacja węzłów służy do opisania, które zasobniki są zaplanowane na węźle. Koligacja jest określana przy użyciu etykiet zdefiniowanych na węźle. Na przykład w usłudze AKS zasobniki systemowe dla węzłów typu spot są konfigurowane z antykoligacją, aby zapobiec ich planowaniu na tych węzłach.

Definiowanie tolerancji w pliku manifestu zasobnika

Tolerancja węzła jest określana przez utworzenie wpisu słownika tolerations w pliku manifestu obciążenia. W tym słowniku należy ustawić następujące właściwości dla każdego defektu węzła, który ma być tolerowany przez obciążenie w tej sekcji:

Właściwości opis
key Identyfikuje parę klucz defektu węzła-wartość, która jest określona na węźle. Na przykład dla puli węzłów typu spot para klucz-wartość to kubernetes.azure.com/scalesetpriority:spot. Klucz to kubernetes.azure.com/scalesetpriority.
operator Zezwala, aby tolerancja była zgodna z defektem. Domyślnym operatorem jest Equal. Możesz również określić operator Exists, aby dopasować tolerancję. Jednak w przypadku użycia Exists nie jest określana następująca właściwość (value).
value Reprezentuje część wartości pary node-taint key-value, która jest określona w węźle. Na przykład w puli węzła typu spot z parą klucz-wartość równą kubernetes.azure.com/scalesetpriority:spot wartość to spot.
effect Wskazuje, w jaki sposób w systemie jest obsługiwane planowanie zasobników. Dostępne są trzy opcje: NoSchedule, PreferNoSchedule i NoExecute. NoSchedule zapewnia, że system nie może zaplanować zasobnika. PreferNoSchedule umożliwia systemowi podjęcie próby niezaplanowania zasobnika. NoExecute wyklucza zasobniki, które są już uruchomione w zanieczyszczonym węźle, lub wcale nie planuje zasobnika.

Definiowanie koligacji węzła w pliku manifestu zasobnika

Koligacja jest określana przez utworzenie affinity wpisu w pliku manifestu obciążenia. W tym wpisie ustawisz następujące właściwości dla każdej etykiety węzła, która musi być zgodna z obciążeniem:

Właściwości opis
nodeAffinity Opisuje reguły planowania koligacji węzłów dla zasobnika.
requiredDuringSchedulingIgnoredDuringExecution Jeśli wymagania dotyczące koligacji określone przez to pole nie są spełnione w czasie planowania, zasobnik nie może być zaplanowany na węźle. Jeśli wymagania dotyczące koligacji określone przez to pole przestaną być spełnione w pewnym momencie podczas wykonywania zasobnika (na przykład z powodu aktualizacji), system może zdecydować się na próbę eksmitowania zasobnika z węzła.
nodeSelectorTerms Lista terminów selektora węzłów. Zwracane terminy pasują do dowolnego filtru, a nie wszystkich filtrów.
matchExpressions Lista wymagań selektora węzłów według etykiet węzła.
key Klucz etykiety, do którego ma zastosowanie selektor. Kluczem jest kubernetes.azure.com/scalesetpriority
operator Reprezentuje relację klucza z zestawem wartości. Prawidłowe operatory to In, , NotInExists, DoesNotExist GtiLt
values Reprezentuje część wartości pary klucz-wartość etykiety węzła, która jest określona w węźle. W puli węzłów typu spot z parą kubernetes.azure.com/scalesetpriority:spotklucz-wartość , wartość to spot.

Oto przykład obciążenia, które ma tolerancję i koligację dodaną dla pul węzłów typu spot.

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    env: test
spec:
  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
  tolerations:
  - key: "kubernetes.azure.com/scalesetpriority"
    operator: "Equal"
    value: "spot"
    effect: "NoSchedule"
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: "kubernetes.azure.com/scalesetpriority"
            operator: In
            values:
            - "spot"

Sprawdź swoją wiedzę

1.

Załóżmy, że korzystasz z usługi bezstanowej, która przetwarza zamówienia internetowe i działa w klastrze usługi Azure Kubernetes Service (AKS). Aby zoptymalizować koszty obliczeń w klastrze, decydujesz się na użycie puli węzłów typu spot w klastrze AKS. Jak dodaje się pule węzłów typu spot do klastra usługi AKS?

2.

W przypadku usługi opisanej w poprzednim pytaniu, które zasady eksmisji są najbardziej ekonomicznym rozwiązaniem konfigurowania puli węzłów typu spot?

3.

W przypadku usługi opisanej w poprzednich pytaniach, jak upewnić się, że obciążenia są planowane na węzłach puli węzłów użytkownika typu spot?