Knooppuntgroepen configureren voor automatisch inrichten van knooppunten (NAP) in Azure Kubernetes Service (AKS)

In dit artikel wordt uitgelegd hoe u knooppuntgroepen configureert voor automatisch inrichten van knooppunten (NAP) in Azure Kubernetes Service (AKS), waaronder SKU-selectors, resourcelimieten en prioriteitsgewichten. Het bevat ook voorbeelden om u te helpen aan de slag te gaan.

AKS Automatic bevat standaard NAP. Voor AKS Standard-clusters moet u NAP inschakelen voordat u de knooppuntgroepen configureert.

Hoe NAP VM's voor knooppuntgroepen selecteert

NAP maakt gebruik van SKU-vereisten voor virtuele machines (VM's) om de beste VM's te bepalen voor workloads die in behandeling zijn. U kunt het volgende configureren:

  • SKU-families en specifieke exemplaartypen.
  • Resourcelimieten en -prioriteiten.
  • Spot- of on-demand exemplaren.
  • Vereisten voor architectuur, GPU en andere mogelijkheden.

De NodePool-resource stelt beperkingen in voor de knooppunten die door NAP worden gemaakt en de pods die op die knooppunten draaien. Wanneer u NAP inschakelt terwijl de standaardconfiguratie van de knooppuntpool is ingesteld op Auto, maakt dit standaardresources NodePool. U kunt deze knooppuntgroepen wijzigen of extra knooppuntgroepen maken om aan uw workloadvereisten te voldoen.

Hoe NAP knooppuntgroepen evalueert en selecteert

Houd bij het configureren van NodePools NAP rekening met het volgende gedrag:

  • NAP vereist ten minste één NodePool functie.
  • NAP evalueert elke geconfigureerde NodePool.
  • NAP slaat over NodePools met tainten die niet worden getolereerd door een pod.
  • NAP past opstartvervuilingen toe op geconfigureerde knooppunten, maar vereist geen pod-tolerantie.
  • NAP werkt het beste met onderling exclusieve NodePools, waarvan de vereisten niet overlappen, zodat elke pod maar bij één pool past. Wanneer er meerdere NodePools overeenkomsten zijn, gebruikt NAP de overeenkomst met het hoogste gewicht.

Standaardconfiguratie van knooppuntgroep controleren

De configuratie van de standaard Karpenter NodePool met de naam default gemaakt door NAP is als volgt:

apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
  name: default
spec:
  disruption:
    consolidationPolicy: WhenEmptyOrUnderutilized
  template:
    spec:
      nodeClassRef:
        group: karpenter.azure.com
        kind: AKSNodeClass
        name: default
      expireAfter: Never
      # 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

NAP maakt ook een system-surge knooppuntgroep die linux AMD64-capaciteit op aanvraag biedt voor kritieke systeeminvoegtoepassingen. Wanneer een in behandeling zijnde pod de CriticalAddonsOnly=true:NoSchedule taint tolereert en overeenkomt met de poolvereisten, kan NAP een knooppunt inrichten vanuit deze pool. Nodes die door de pool zijn aangemaakt, hebben het label kubernetes.azure.com/mode: system.

De standaardknooppuntgroepen beheren

Wanneer u een nieuw AKS-cluster maakt dat is ingeschakeld met NAP met behulp van de Azure CLI, neemt u de --node-provisioning-default-pools vlag op om te bepalen of AKS de standaard NAP NodePoolsmaakt. U kunt deze vlag az aks update ook gebruiken wanneer u NAP inschakelt op een bestaand cluster.

De --node-provisioning-default-pools vlag accepteert de volgende waarden:

  • Auto (standaard): Maakt twee standaard NodePools voor direct gebruik.
  • None: Maakt geen NodePools. U moet uw eigen definiëren.

Waarschuwing

Als u de instelling wijzigt van Auto naar None op een bestaand cluster, worden de standaard niet automatisch verwijderd. Voordat u ze verwijdert, definieert u geschikte vervangingscapaciteit voor kritieke systeeminvoegtoepassingen. U moet de standaardinstelling NodePools handmatig verwijderen als u ze niet meer nodig hebt.

Configuratieopties voor knooppuntgroepen

In de volgende secties worden verschillende configuratieopties voor NodePools NAP beschreven, waaronder bekende labels en SKU-selectors, limieten voor knooppuntgroepen en gewichten van knooppuntgroepen.

Bekende labels en SKU-selectoren

Kubernetes definieert bekende labels die Azure implementeert. U kunt deze labels definiëren in de spec.requirements sectie van de NodePool API. NAP ondersteunt ook Azure-specifieke labels voor geavanceerdere planning.

De volgende tabel bevat de labels die u in de spec.requirements sectie van uw NodePool API kunt gebruiken om VM-kenmerken voor uw knooppunten te definiëren:

Selector Description Example
karpenter.sh/capacity-type VM-toewijzingstype (spot/on-demand) Plek
karpenter.azure.com/sku-family VM-SKU-serie D, F, L, enz.
karpenter.azure.com/sku-series VM-SKU-serie Dpls_v6
karpenter.azure.com/sku-name Expliciete SKU-naam Standard_A1_v2
karpenter.azure.com/sku-version SKU-versie (zonder 'v', kan 1 gebruiken) 1, 2
karpenter.azure.com/sku-cpu Aantal CPU's in de virtuele machine 16
karpenter.azure.com/sku-memory Geheugen in VM in MiB 131072
karpenter.azure.com/sku-gpu-name GPU-naam A100
karpenter.azure.com/sku-gpu-manufacturer GPU-fabrikant nvidia
karpenter.azure.com/sku-gpu-count Aantal GPU's per VM 2
karpenter.azure.com/sku-networking-accelerated Of de Virtuele Machine versnelde netwerkfunctionaliteit heeft [waar, onwaar]
karpenter.azure.com/sku-storage-premium-capable Of de VM Premium IO-opslag ondersteunt [waar, onwaar]
karpenter.azure.com/sku-storage-ephemeralos-maxsize Groottelimiet voor de tijdelijke besturingssysteemschijf (OS) in GB 92
kubernetes.azure.com/sku-cpu Aantal CPU's in de virtuele machine 16
kubernetes.azure.com/sku-memory Geheugen in VM in MiB 131072
kubernetes.azure.com/cluster Naam van AKS-cluster mijn-cluster
kubernetes.azure.com/mode Modus van de knooppuntgroep [systeem, gebruiker]
kubernetes.azure.com/priority Prioriteit [spot, standaard]
kubernetes.azure.com/os-sku Besturingssysteem-SKU [Ubuntu, AzureLinux]
kubernetes.azure.com/fips_enabled Of FIPS ingeschakeld is waar
topology.kubernetes.io/zone Beschikbaarheidszone(s) [uksouth-1,uksouth-2,uksouth-3]
kubernetes.io/os besturingssysteem Linux
kubernetes.io/arch CPU-architectuur (AMD64 of ARM64) [amd64, arm64]

De geheugenkiezerwaarden in deze tabel zijn de MiB-waarden die zijn gerapporteerd op door NAP gemaakte knooppunten. Voordat u een selector toevoegt, controleert u de labels op uw knooppunten om de waarde te bevestigen die door uw cluster wordt gebruikt.

Voorbeelden van SKU-familie

Met de karpenter.azure.com/sku-family selector kunt u zich richten op specifieke VM-families.

Familie Description
D-serie Vm's voor algemeen gebruik met evenwichtige CPU-geheugenverhouding
F-serie Voor rekenkracht geoptimaliseerde VM's met een hoge CPU-geheugenverhouding
E-serie Voor geheugen geoptimaliseerde VM's voor geheugenintensieve toepassingen
L-serie Voor opslag geoptimaliseerde VM's met hoge schijfdoorvoer
N-serie MET GPU ingeschakelde VM's voor rekenintensieve workloads

Voorbeeldconfiguratie met behulp van SKU-serie:

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

VOORBEELD VAN GPU-SKU

Als u NVIDIA GPU-knooppunten wilt inrichten met NAP, maakt u een NodePool die VM-grootten met GPU-ondersteuning selecteert. In het volgende voorbeeld kan NAP NVIDIA GPU-SKU's uit de N-serie selecteren:

requirements:
- key: karpenter.azure.com/sku-family
  operator: In
  values:
  - N
- key: karpenter.azure.com/sku-gpu-manufacturer
  operator: In
  values:
  - nvidia

Als u wilt dat AKS het NVIDIA-GPU-stuurprogramma, de apparaatplug-in, de metrische gegevens-exporteur van Data Center GPU Manager (DCGM) en GPU-statussignalen installeert en beheert op door NAP ingerichte GPU-knooppunten, configureer dan beheerde GPU in het genoemde AKSNodeClass. Zie Een door AKS beheerde GPU-knooppuntgroep maken voor meer informatie.

Voorbeelden van SKU-naam

Met de karpenter.azure.com/sku-name selector kunt u het exacte type VM-exemplaar opgeven.

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

Voorbeelden van SKU-versies

De karpenter.azure.com/sku-version selector is gericht op specifieke generaties VAN VM-SKU's.

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

Voorbeeld van beschikbaarheidszone

Met de topology.kubernetes.io/zone selector kunt u de beschikbaarheidszones voor uw knooppunten opgeven.

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

Opmerking

Als u VM-grootten wilt weergeven die beschikbaarheidszones in een regio ondersteunen, gebruikt u de az vm list-skus opdracht met de --location <region> --zone --output table parameters. Controleer of de geselecteerde VM-grootte ondersteuning biedt voor de zones in de NodePool vereiste.

Voorbeeld van architectuur

Met de kubernetes.io/arch selector kunt u de CPU-architectuur voor uw knooppunten opgeven. NAP ondersteunt zowel de amd64- als de arm64-knooppunten.

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

Voorbeeld van besturingssysteem

Met de kubernetes.io/os selector kunt u het besturingssysteem voor uw knooppunten opgeven.

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

Voorbeeld van capaciteitstype

Met de karpenter.sh/capacity-type selector kunt u opgeven of u spot- of on-demand-exemplaren wilt gebruiken.

Opmerking

NAP geeft prioriteit aan Spot-exemplaren wanneer zowel Spot als On-demand worden opgegeven.

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

Limieten voor knooppuntgroepen

NAP probeert standaard uw workloads te plannen binnen het Azure quotum dat u beschikbaar hebt. Voor een dynamische knooppuntgroep kunt u geaggregeerde resourcelimieten opgeven voor alle knooppunten die door die pool zijn ingericht. In het volgende voorbeeld beperkt cpu: "1000" u de pool tot 1000 vCPU-kernen en memory: 1000Gi beperkt u deze tot 1000 gibibytes aan geheugen:

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

Gewichten van knooppuntgroepen

Wanneer u meerdere knooppuntgroepen hebt gedefinieerd, kunt u een voorkeur instellen voor waar een workload moet worden gepland door het relatieve gewicht in de definities van uw knooppuntgroep te definiëren. Het weight veld accepteert een geheel getal van 1 tot en met 100 en hogere waarden geven een knooppuntgroep een hogere prioriteit. Als u weglaat weight, is de waarde effectief 0. Voorbeeld:

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

Statische knooppuntgroepen

Statische knooppuntgroepen onderhouden het vaste aantal NAP-ingerichte knooppunten dat in het replicas veld is opgegeven, ongeacht de vraag naar pods. Als u het aantal knooppunten wilt wijzigen, schaalt u de NodePool expliciet, bijvoorbeeld door nodepool static-node-pool --replicas=7 met kubectl scale te gebruiken. De optionele limits.nodes waarde beperkt expliciet schalen en tijdelijke capaciteit die is gemaakt tijdens het vervangen van knooppunten. Voor statische knooppuntgroepen nodes is dit het enige ondersteunde veld onder limits; u kunt geen CPU- of geheugenlimieten instellen.

apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
  name: static-node-pool
spec:
  replicas: 5
  template:
    spec:
      requirements:
      - key: karpenter.azure.com/sku-name
        operator: In
        values:
          - Standard_D4s_v3
          - Standard_F8s_v2
      - key: topology.kubernetes.io/zone
        operator: In
        values:
          - eastus-1
          - eastus-2
          - eastus-3
  limits:
    nodes: 10

Opmerking

Voor statische knooppuntgroepen kunt u alleen nodes instellen in het limits veld. U kunt geen resourcelimieten instellen of weight, en onderbrekingsconsolidatie is niet van toepassing. Nadat u een NodePoolhebt gemaakt, kunt u deze niet schakelen tussen statische en dynamische modi door het replicas veld toe te voegen of te verwijderen.

Volgende stappen

Zie de volgende artikelen voor meer informatie over automatische inrichting van knooppunten in AKS: