Przypisywanie grup rezerwacji pojemności do pul węzłów usługi Azure Kubernetes Service (AKS)

W miarę zmiany wymagań dotyczących obciążeń można skojarzyć istniejące grupy rezerwacji pojemności (CRG) z pulami węzłów usługi Azure Kubernetes Service (AKS), aby zagwarantować przydzieloną pojemność. Grupy rezerwacji pojemności umożliwiają rezerwę pojemności obliczeniowej w regionie platformy Azure lub strefie dostępności przez dowolny czas. Ta funkcja jest przydatna w przypadku obciążeń wymagających gwarantowanej pojemności, takich jak te z przewidywalnymi wzorcami ruchu lub tymi, które muszą spełniać określone wymagania dotyczące wydajności.

Z tego artykułu dowiesz się, jak używać grup rezerwacji wydajności ze standardowymi pulami węzłów w usłudze AKS. W przypadku węzłów zarządzanych przez automatyczne aprowizowanie węzłów (NAP) zobacz Używanie grup rezerwacji pojemności z automatycznym aprowizowaniem węzłów.

Ważna

Skojarzenie CRG nie gwarantuje, że każdy skojarzony węzeł zajmuje zarezerwowaną pojemność. Azure może przydzielić maszyny wirtualne ponad liczbę objętą rezerwacją. Te nadmiarowe maszyny wirtualne korzystają ze standardowej pojemności dostępnej na żądanie, powodują naliczenie dodatkowych opłat za moc obliczeniową i nie są objęte gwarancją SLA dotyczącą rezerwacji pojemności. Zarezerwowana moc jest rozliczana niezależnie od tego, czy jest używana przez maszynę wirtualną.

Uwaga / Notatka

Usunięcie puli węzłów automatycznie usuwa skojarzenie tej puli z wszelkimi powiązanymi grupami rezerwacji pojemności przed usunięciem samej puli węzłów. Usunięcie klastra powoduje automatyczne odłączenie wszystkich pul węzłów w tym klastrze od powiązanych z nimi grup rezerwacji pojemności.

Wymagania wstępne dotyczące używania grup rezerwacji pojemności obliczeniowej ze standardowymi pulami węzłów usługi AKS

  • Musisz zainstalować i skonfigurować interfejs wiersza polecenia platformy Azure w wersji 2.56 lub nowszej. Uruchom az --version, aby znaleźć wersję. Jeśli konieczna będzie instalacja lub uaktualnienie, zobacz Instalowanie interfejsu wiersza polecenia platformy Azure.
  • Potrzebna jest istniejąca grupa rezerwacji pojemności z co najmniej jedną rezerwacją pojemności. W przypadku pul węzłów zarządzanych za pomocą az aks nodepool, pusta grupa powoduje ostrzeżenie i brak skojarzenia. W przypadku NAP pusta grupa uniemożliwia AKSNodeClass uzyskanie stanu gotowości.
  • Musisz utworzyć przypisaną przez użytkownika tożsamość zarządzaną z rolą Contributor dla grupy zasobów, która zawiera grupę rezerwacji pojemności, i przypisać tę tożsamość do klastra AKS. Tożsamości zarządzane przypisane przez system nie działają dla tej funkcji.

Ważna

W przypadku pul węzłów zarządzanych za pośrednictwem interfejsu API usługi AKS lub Azure CLI udostępnione lub obejmujące wiele subskrypcji grupy rezerwacji pojemności wymagają, aby użytkownik lub jednostka usługi uruchamiający polecenie AKS mieli uprawnienie Microsoft.Compute/capacityReservationGroups/write do połączonej grupy rezerwacji pojemności. Szczegółowe uprawnienia odbiorcy dla grupy współdzielonej rezerwacji pojemności używane przez maszyny wirtualne, takie jak Microsoft.Compute/capacityReservationGroups/deploy/action, nie są obecnie wystarczające do skojarzenia puli węzłów usługi AKS z grupą rezerwacji pojemności. NAP nie obsługuje grup udostępnionych ani grup między subskrypcjami.

Uprawnienia przypisane do tożsamości zarządzanej klastra AKS nie zastępują tej weryfikacji autoryzacji podmiotu wywołującego. Tożsamość zarządzana klastra musi nadal mieć wymagane uprawnienia do grupy zasobów, która zawiera grupę rezerwacji pojemności, jak opisano w tym artykule.

Tworzenie tożsamości zarządzanej przypisanej przez użytkownika i przypisywanie jej do klastra usługi AKS

  1. Utwórz tożsamość zarządzaną przypisaną przez użytkownika przy użyciu az identity create polecenia .

    az identity create --name <identity-name> --resource-group <resource-group-name> --location <location>
    
  2. Pobierz identyfikator zasobu i identyfikator podmiotu zabezpieczeń tożsamości zarządzanej przypisanej przez użytkownika za pomocą polecenia az identity show i zapisz je w zmiennych środowiskowych.

    IDENTITY_ID=$(az identity show --name <identity-name> --resource-group <resource-group-name> --query id --output tsv)
    IDENTITY_PRINCIPAL_ID=$(az identity show --name <identity-name> --resource-group <resource-group-name> --query principalId --output tsv)
    
  3. Przy użyciu polecenia Contributor, przypisz rolę do tożsamości przypisanej przez użytkownika az role assignment create.

    az role assignment create \
        --assignee-object-id "$IDENTITY_PRINCIPAL_ID" \
        --assignee-principal-type ServicePrincipal \
        --role Contributor \
        --scope /subscriptions/<subscription-id>/resourceGroups/<resource-group-name> \
        --output json
    

    Propagacja przypisania roli może potrwać do 60 minut.

  4. Przypisz przypisaną tożsamość zarządzaną przez użytkownika do nowego lub istniejącego klastra usługi AKS za pomocą flagi --assign-identity z poleceniem az aks create lub az aks update .

    # Create a new AKS cluster with the user-assigned managed identity
    az aks create \
        --resource-group <resource-group-name> \
        --name <cluster-name> \
        --location <location> \
        --node-vm-size <vm-size> --node-count <node-count> \
        --assign-identity $IDENTITY_ID \
        --generate-ssh-keys
    
    # Update an existing AKS cluster to use the user-assigned managed identity
    az aks update \
        --resource-group <resource-group-name> \
        --name <cluster-name> \
        --location <location> \
        --node-vm-size <vm-size> \
        --node-count <node-count> \
        --enable-managed-identity \
        --assign-identity $IDENTITY_ID         
    

Pobierz identyfikator istniejącej grupy rezerwacji pojemności

Pobierz identyfikator istniejącej grupy rezerwacji pojemności przy użyciu az capacity reservation group show polecenia i ustaw go na zmienną środowiskową.

CRG_ID=$(az capacity reservation group show --capacity-reservation-group <crg-name> --resource-group <resource-group-name> --query id -o tsv)

Skojarz istniejącą grupę rezerwacji pojemności z nowym klastrem

Skojarz istniejącą grupę rezerwacji pojemności z domyślną pulą węzłów systemowych podczas tworzenia klastra, uruchamiając polecenie az aks create z flagami --assign-identity i --crg-id.

az aks create \
    --resource-group <resource-group-name> \
    --name <cluster-name> \
    --location <location> \
    --node-vm-size <vm-size> \
    --node-count <node-count> \
    --assign-identity $IDENTITY_ID \
    --crg-id $CRG_ID \
    --generate-ssh-keys

Kojarzenie istniejącej grupy rezerwacji pojemności z nową pulą węzłów

Skojarz istniejącą grupę rezerwacji pojemności z nową pulą węzłów użytkownika przy użyciu az aks nodepool add polecenia z flagą --crg-id .

az aks nodepool add --resource-group <resource-group-name> --cluster-name <cluster-name> --name <node-pool-name> --crg-id $CRG_ID

Aby skojarzyć istniejącą grupę rezerwacji pojemności z nową pulą węzłów systemowych, utwórz pulę węzłów za pomocą flag --mode System i --crg-id. W przypadku klastrów produkcyjnych użyj co najmniej trzech węzłów dla pul węzłów systemowych.

az aks nodepool add \
    --resource-group <resource-group-name> \
    --cluster-name <cluster-name> \
    --name <system-node-pool-name> \
    --mode System \
    --node-count 3 \
    --node-taints CriticalAddonsOnly=true:NoSchedule \
    --crg-id $CRG_ID

Skojarzenie istniejącej grupy rezerwacji mocy z istniejącą pulą węzłów (wersja zapoznawcza)

Powiąż istniejącą grupę rezerwacji pojemności z istniejącą pulą węzłów za pomocą polecenia az aks nodepool update z flagą --crg-id.

  • W przypadku pul węzłów strefowych ta operacja inicjuje aktualizację stopniowej puli węzłów docelowych. Proces aktualizacji obejmuje stopniowe kordono­wanie i drenowanie wszystkich węzłów, a następnie ponowne uruchomienie, aby zastosować tę zmianę.
  • W przypadku pul węzłów użytkowników innych niż strefowe (regionalne) w wersji zapoznawczej najpierw przeskaluj pulę węzłów do zera, a następnie zastosuj grupę rezerwacji zasobów.
  • W przypadku niestrefowych (regionalnych) pul węzłów systemowych nie skaluj puli węzłów systemowych do zera. Zamiast tego utwórz nową pulę węzłów systemowych skojarzoną z grupą rezerwacji pojemności, sprawdź, czy nowa pula węzłów jest gotowa, a następnie usuń starą pulę węzłów systemowych. Usługa AKS wymaga co najmniej jednej puli węzłów systemowych przez cały czas.

Prerequisites

  • Przed uruchomieniem aks-preview tego polecenia zainstaluj wersję 20.0.0b7 rozszerzenia Azure CLI lub nowszą.

  • Upewnij się, że grupa rezerwacji zasobów ma wystarczające zasoby dla strategii uaktualniania puli węzłów. W przypadku maxSurge > 0, zarezerwuj dodatkowe zasoby na potrzeby wartości max surge. Na przykład pula 10-węzłowa z parametrem maxSurge ustawionym na 2 może podczas aktualizacji uruchamiać maksymalnie 12 węzłów. Ta dodatkowa pojemność nie jest wymagana w przypadku wdrożeń wykorzystujących wyłącznie maxUnavailable ani regionalnych ścieżek skalowanych do zera.

    az aks nodepool update --resource-group <resource-group-name> --cluster-name <cluster-name> --name <node-pool-name> --crg-id $CRG_ID
    

    Jeśli polecenie zakończy się niepowodzeniem z komunikatem LinkedAuthorizationFailed i będzie zawierać odwołanie do Microsoft.Compute/capacityReservationGroups/write, nadaj to uprawnienie zalogowanemu użytkownikowi lub jednostce usługi uruchamiającej to polecenie w docelowej grupie rezerwacji pojemności.

Używanie grup rezerwacji pojemności z automatycznym aprowizowaniem węzłów

W przypadku NAP ustaw spec.capacityReservation.groupID w elemencie AKSNodeClass i odwołaj się do tej klasy z obiektu Kubernetes NodePool. Opcja --crg-id w Azure CLI dotyczy standardowych pul węzłów w AKS, a nie węzłów zarządzanych przez NAP.

NAP wymaga grupy Targeted w tej samej subskrypcji i w tym samym regionie co klaster, z co najmniej jedną pomyślnie aprowizowaną, zgodną rezerwacją członkowską. W przeciwieństwie do pul węzłów zarządzanych przez usługę AKS NAP nie obsługuje grup udostępnionych ani grup obejmujących wiele subskrypcji. Pusta lub bezużyteczna grupa uniemożliwia przygotowanie klasy; NAP nie przełącza się awaryjnie na uruchamianie nieprzypisanych węzłów.

Użyj przypisanej przez użytkownika tożsamości zarządzanej klastra i Contributor przypisania opisanych wcześniej, aby usługa AKS mogła skojarzyć maszyny wirtualne z grupą. Tożsamość używana przez NAP do odnajdywania grupy również musi mieć następujące uprawnienia do odczytu:

  • Microsoft.Compute/capacityReservationGroups/read.
  • Microsoft.Compute/capacityReservationGroups/capacityReservations/read.

Reader w grupie zapewnia oba uprawnienia. Jeśli NAP używa tożsamości klastra, która ma już Contributor w zawierającej grupie zasobów, nie jest wymagane żadne dodatkowe przypisanie uprawnień do odczytu. Sam dostęp do odczytu nie autoryzuje skojarzenia maszyny wirtualnej.

Przykłady konfiguracji, weryfikacja i rozwiązywanie problemów można znaleźć w temacie Konfiguracja grupy rezerwacji pojemności dla klasy AKSNodeClass.

Następne kroki: Zarządzanie pulami węzłów w usłudze AKS

Aby dowiedzieć się więcej na temat zarządzania pulami węzłów w usłudze AKS, zobacz Zarządzanie pulami węzłów w usłudze Azure Kubernetes Service (AKS). Aby dowiedzieć się, jak dodawać, aktualizować lub usuwać pule węzłów systemowych, zobacz Używanie pul węzłów systemowych w Azure Kubernetes Service (AKS).