Udostępnij przez


Konfigurowanie pul węzłów na potrzeby automatycznej aprowizacji węzłów (NAP) w usłudze Azure Kubernetes Service (AKS)

W tym artykule wyjaśniono, jak skonfigurować pule węzłów dla automatycznej aprowizacji węzłów (NAP) w usłudze Azure Kubernetes Service (AKS), w tym selektory SKU, limity zasobów i wagi priorytetów. Zawiera również przykłady ułatwiające rozpoczęcie pracy.

Omówienie pul węzłów w NAP

NAP używa wymagań SKU maszyn wirtualnych, aby wybrać najlepsze maszyny wirtualne dla oczekujących obciążeń. Można skonfigurować:

  • Rodziny jednostek SKU i określone typy wystąpień.
  • Limity zasobów i priorytety.
  • Wystąpienia typu spot lub na żądanie.
  • Wymagania dotyczące architektury i możliwości.

Zasób NodePool ustawia ograniczenia dotyczące węzłów tworzonych przez NAP oraz zasobników (pods) uruchamianych na tych węzłach. Podczas pierwszej instalacji NAP zostanie utworzone domyślne NodePool ustawienie. Tę pulę węzłów można zmodyfikować lub utworzyć dodatkowe pule węzłów zgodnie z wymaganiami dotyczącymi obciążenia.

Kluczowe zachowania NodePools w ramach NAP

Podczas konfigurowania NodePools dla NAP, należy pamiętać o następujących zachowaniach:

  • System NAP wymaga co najmniej jednego NodePool do działania.
  • NAP ocenia każdą skonfigurowaną NodePool.
  • NAP pomija NodePools z skażeniami, które nie są akceptowane przez zasobnik.
  • Funkcjonalność NAP stosuje startowe 'tainty' do zaaprowizowanych węzłów, ale nie wymaga 'toleracji' dla podów.
  • Ochrona dostępu do sieci działa najlepiej z wzajemnie wykluczającymi się NodePools. Kiedy występuje wiele dopasowań NodePools, wykorzystuje to z największą wagą.

Przejrzyj domyślną konfigurację puli węzłów

Konfiguracja domyślnego Karpentera NodePool o nazwie default utworzonej przez NAP jest następująca:

apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
  name: default
spec:
  disruption:
    consolidationPolicy: WhenEmptyOrUnderutilized
    expireAfter: Never
  template:
    spec:
      nodeClassRef:
        name: default

      # Requirements that constrain the parameters of provisioned nodes.
      # These requirements are combined with pod.spec.affinity.nodeAffinity rules.
      # Operators { In, NotIn, Exists, DoesNotExist, Gt, and Lt } are supported.
      # https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#operators
      requirements:
      - key: kubernetes.io/arch
        operator: In
        values:
        - amd64
      - key: kubernetes.io/os
        operator: In
        values:
        - linux
      - key: karpenter.sh/capacity-type
        operator: In
        values:
        - on-demand
      - key: karpenter.azure.com/sku-family
        operator: In
        values:
        - D

Tworzy również pulę węzłów system-surge, która ułatwia automatyczne skalowanie węzłów puli systemowej.

Kontrolowanie konfiguracji domyślnej puli węzłów podczas tworzenia klastra

Podczas tworzenia nowego klastra AKS z włączoną funkcją NAP przy użyciu interfejsu wiersza polecenia Azure, można dołączyć flagę --node-provisioning-default-pools do kontrolowania konfiguracji domyślnej funkcji NAP NodePool.

Flaga --node-provisioning-default-pools steruje domyślną konfiguracją NAP NodePool i akceptuje następujące wartości:

  • Auto (ustawienie domyślne): tworzy dwa standardy NodePools do natychmiastowego użycia.
  • None: nie tworzy żadnego elementu NodePools. Musisz zdefiniować własne.

Ostrzeżenie

Zmiana wartości z Auto na None: jeśli zmienisz ustawienie z Auto na None w istniejącym klastrze, domyślne NodePools nie zostaną automatycznie usunięte. Należy je usunąć ręcznie, jeśli nie są już potrzebne.

Opcje konfiguracji puli węzłów

W poniższych sekcjach opisano różne opcje konfiguracji dla NodePools w NAP, w tym powszechnie znane etykiety i selektory SKU, a także limity puli węzłów i wagi puli węzłów.

Dobrze znane etykiety i selektory SKU

Kubernetes określa dobrze znane etykiety, które są implementowane przez Azure. Te etykiety można zdefiniować w spec.requirements sekcji interfejsu NodePool API. NAP obsługuje także etykiety specyficzne dla Azure do bardziej zaawansowanego planowania.

karpenter.azure.com Selektory jednostek SKU

W poniższej tabeli wymieniono selektory SKU, których można użyć w sekcji karpenter.azure.com API, aby zdefiniować charakterystykę maszyn wirtualnych dla węzłów:

Selector Description Example
karpenter.azure.com/sku-family Rodzina jednostek SKU maszyny wirtualnej D, F, L itp.
karpenter.azure.com/sku-name Jawna nazwa jednostki SKU Standard_A1_v2
karpenter.azure.com/sku-version Wersja SKU (bez użycia "v", można użyć 1) 1, 2
karpenter.sh/capacity-type Typ alokacji maszyny wirtualnej (spot/na żądanie) Punkt
karpenter.azure.com/sku-cpu Liczba procesorów w maszynie wirtualnej 16
karpenter.azure.com/sku-memory Pamięć w maszynie wirtualnej w MiB 131072
kubernetes.azure.com/sku-cpu Liczba procesorów w maszynie wirtualnej 16
kubernetes.azure.com/sku-memory Pamięć w maszynie wirtualnej w MiB 131072
karpenter.azure.com/sku-gpu-name Nazwa procesora GPU A100
karpenter.azure.com/sku-gpu-manufacturer Producent procesora GPU nvidia
karpenter.azure.com/sku-gpu-count Liczba procesorów GPU na maszynę wirtualną 2
karpenter.azure.com/sku-networking-accelerated Czy maszyna wirtualna ma przyspieszoną sieć [prawda, fałsz]
karpenter.azure.com/sku-storage-premium-capable Czy maszyna wirtualna obsługuje magazyn I/O Premium [prawda, fałsz]
karpenter.azure.com/sku-storage-ephemeralos-maxsize Limit rozmiaru dysku efemerycznego systemu operacyjnego (OS) w Gb 92

kubernetes.io dobrze znane etykiety

Poniższa tabela wymienia kubernetes.io dobrze znane etykiety, których można użyć w sekcji spec.requirements w interfejsie NodePool API do zdefiniowania właściwości węzłów:

Etykieta Description Example
topology.kubernetes.io/zone Strefy dostępności [uksouth-1,uksouth-2,uksouth-3]
kubernetes.io/os System operacyjny linux
kubernetes.io/arch Architektura procesora CPU (AMD64 lub ARM64) [amd64, arm64]

Przykłady rodziny jednostek SKU

Selektor karpenter.azure.com/sku-family umożliwia kierowanie określonych rodzin maszyn wirtualnych.

Rodzina Description
Seria D Maszyny wirtualne ogólnego przeznaczenia ze zrównoważonym współczynnikiem użycia procesora CPU do pamięci
Seria F Maszyny wirtualne zoptymalizowane pod kątem obliczeń z wysokim współczynnikiem użycia procesora CPU do pamięci
Seria E Maszyny wirtualne zoptymalizowane pod kątem pamięci dla aplikacji intensywnie korzystających z pamięci
Seria L Maszyny wirtualne zoptymalizowane do przechowywania z wysoką przepustowością dysku
Seria N Maszyny wirtualne z obsługą procesora GPU na potrzeby obciążeń intensywnie korzystających z obliczeń

Przykładowa konfiguracja przy użyciu rodziny jednostek SKU:

requirements:
- key: karpenter.azure.com/sku-family
  operator: In
  values:
  - D
  - F

Przykłady nazw SKU

Selektor karpenter.azure.com/sku-name pozwala określić dokładny typ maszyny wirtualnej.

requirements:
- key: karpenter.azure.com/sku-name
  operator: In
  values:
  - Standard_D4s_v3
  - Standard_F8s_v2

Przykłady wersji jednostki SKU

Selektor karpenter.azure.com/sku-version jest przeznaczony dla określonych generacji jednostek SKU maszyny wirtualnej.

requirements:
- key: karpenter.azure.com/sku-version
  operator: In
  values:
  - "3"  # v3 generation
  - "5"  # v5 generation

Przykład strefy dostępności

Selektor topology.kubernetes.io/zone umożliwia określenie stref dostępności dla węzłów.

requirements:
- key: topology.kubernetes.io/zone
  operator: In
  values:
  - eastus-1
  - eastus-2

Uwaga / Notatka

Można znaleźć dostępne strefy dla swojego regionu, korzystając z polecenia CLI platformy Azure az account list-locations --output table.

Przykład architektury

Selektor kubernetes.io/arch umożliwia określenie architektury CPU w węzłach. NAP obsługuje zarówno węzły amd64 i arm64.

requirements:
- key: kubernetes.io/arch
  operator: In
  values:
  - amd64
  - arm64

Przykład systemu operacyjnego

Selektor kubernetes.io/os umożliwia określenie systemu operacyjnego dla węzłów.

requirements:
- key: kubernetes.io/os
  operator: In
  values:
  - linux

Przykład typu pojemności

Selektor karpenter.sh/capacity-type umożliwia określenie, czy mają być używane instancje typu Spot czy On-demand.

Uwaga / Notatka

NAP nadaje priorytet instancjom Spot, gdy określono zarówno instancje Spot, jak i na żądanie.

requirements:
- key: karpenter.sh/capacity-type
  operator: In
  values:
  - spot
  - on-demand

Limity puli węzłów

Domyślnie NAP próbuje zaplanować obciążenia robocze w ramach dostępnego limitu przydziału Azure. Można również określić górny limit zasobów używanych przez pulę węzłów, określając limity w ramach specyfikacji puli węzłów. Na przykład:

spec:
  # Resource limits constrain the total size of the cluster.
  # Limits prevent Node Auto Provisioning from creating new instances once the limit is exceeded.
  limits:
    cpu: "1000"
    memory: 1000Gi

Wagi puli węzłów

Jeśli zdefiniowano wiele pul węzłów, można ustawić preferencję, w której ma być zaplanowane obciążenie, definiując względną wagę w definicjach puli węzłów. Przykład:

spec:
  # Priority given to the node pool when the scheduler considers which to select. 
  # Higher weights indicate higher priority when comparing node pools.
  # Specifying no weight is equivalent to specifying a weight of 0.
  weight: 10

Dalsze kroki

Aby uzyskać więcej informacji o automatycznym aprowizowaniu węzłów w AKS, zobacz następujące artykuły: