Condividi tramite


Configurare i pool di nodi per il provisioning automatico dei nodi (NAP) nel servizio Azure Kubernetes (AKS)

Questo articolo illustra come configurare i pool di nodi per il provisioning automatico dei nodi nel servizio Azure Kubernetes, inclusi i selettori di SKU, i limiti delle risorse e i pesi di priorità. Fornisce anche esempi che consentono di iniziare.

Panoramica dei pool di nodi in NAP (Network Access Protection)

NAP utilizza i requisiti delle SKU delle macchine virtuali per decidere le macchine virtuali migliori per i carichi di lavoro pendenti. È possibile configurare:

  • Famiglie di SKU e tipi di istanza specifici.
  • Limiti e priorità delle risorse.
  • Istanze spot o su richiesta.
  • Requisiti di architettura e funzionalità.

La risorsa NodePool imposta vincoli sui nodi che NAP crea e sui pod che vengono eseguiti in tali nodi. Quando si installa Nap per la prima volta, viene creato un valore predefinito NodePool. È possibile modificare questo pool di nodi o creare pool di nodi aggiuntivi in base ai requisiti del carico di lavoro.

Comportamenti principali di NodePools in Protezione accesso alla rete (NAP)

Quando si configura NodePools per Protezione accesso alla rete, tenere presenti i comportamenti seguenti:

  • NAP richiede almeno un NodePool per funzionare.
  • NAP valuta ogni NodePool configurato.
  • Protezione accesso alla rete ignora NodePools che hanno taint non tollerati da un pod.
  • NAP applica i taint di avvio ai nodi di cui è stato effettuato il provisioning, ma non richiede la tolleranza dei pod.
  • Protezione accesso alla rete funziona meglio con NodePools mutuamente esclusivi. Quando più NodePools corrispondono, utilizza quella con il peso più alto.

Esaminare la configurazione predefinita del pool di nodi

La configurazione dell'istanza predefinita di Karpenter NodePool denominata default creata da NAP è la seguente:

apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
  name: default
spec:
  disruption:
    consolidationPolicy: WhenEmptyOrUnderutilized
  template:
    spec:
      nodeClassRef:
        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

Crea anche un system-surge pool di nodi, che consente di ridimensionare automaticamente i nodi del pool di sistema.

Controllare la configurazione del pool di nodi predefinito durante la creazione del cluster

Quando si crea un nuovo cluster del servizio Azure Kubernetes abilitato con Protezione accesso alla rete tramite l'interfaccia della riga di comando di Azure, è possibile includere il flag --node-provisioning-default-pools per controllare la configurazione della Protezione accesso alla rete predefinita NodePool.

Il --node-provisioning-default-pools flag controlla la configurazione predefinita di NAP NodePool e accetta i seguenti valori:

  • Auto (impostazione predefinita): crea due standard NodePools per l'uso immediato.
  • None: non crea alcun oggetto NodePools. È necessario definire il proprio.

Avvertimento

Passaggio da Auto a None: se si modifica l'impostazione da Auto a None in un cluster esistente, il valore predefinito NodePools non viene eliminato automaticamente. È necessario eliminarli manualmente se non sono più necessari.

Opzioni di configurazione del pool di nodi

Le sezioni seguenti illustrano varie opzioni di configurazione per NodePools in NAP, tra cui etichette comunemente note e selettori SKU, limiti del pool di nodi, e pesi del pool di nodi.

Etichette conosciute e selettori SKU

Kubernetes definisce etichette note implementate da Azure. È possibile definire queste etichette nella spec.requirements sezione dell'API NodePool . Anche NAP supporta etichette specifiche di Azure per una pianificazione più avanzata.

karpenter.azure.com Selettori SKU

La tabella seguente elenca i karpenter.azure.com selettori di SKU che è possibile usare nella sezione dell'API spec.requirements per definire le caratteristiche della NodePool macchina virtuale per i nodi:

Selector Description Example
karpenter.azure.com/sku-family Famiglia di SKU VM D, F, L, ecc.
karpenter.azure.com/sku-name Nome dello SKU esplicito Standard_A1_v2
karpenter.azure.com/sku-version Versione SKU (senza "v", può usare 1) 1, 2
karpenter.sh/capacity-type Tipo di allocazione della macchina virtuale (spot/su richiesta) Spot (Contante)
karpenter.azure.com/sku-cpu Numero di CPU nella macchina virtuale 16
karpenter.azure.com/sku-memory Memoria nella macchina virtuale in MiB 131072
kubernetes.azure.com/sku-cpu Numero di CPU nella macchina virtuale 16
kubernetes.azure.com/sku-memory Memoria nella macchina virtuale in MiB 131072
karpenter.azure.com/sku-gpu-name Nome GPU A100
karpenter.azure.com/sku-gpu-manufacturer Produttore GPU nvidia
karpenter.azure.com/sku-gpu-count Conteggio GPU per macchina virtuale 2
karpenter.azure.com/sku-networking-accelerated Indica se la macchina virtuale ha accelerato la rete [vero, falso]
karpenter.azure.com/sku-storage-premium-capable Indica se la macchina virtuale supporta l'archiviazione I/O Premium [vero, falso]
karpenter.azure.com/sku-storage-ephemeralos-maxsize Limite di dimensioni per il disco del sistema operativo temporaneo in Gb 92

kubernetes.io etichette note

La tabella seguente elenca le kubernetes.io etichette ben note che è possibile usare nella sezione spec.requirements della tua API per definire le caratteristiche dei nodi:

Etichetta Description Example
topology.kubernetes.io/zone Zone di disponibilità [uksouth-1,uksouth-2,uksouth-3]
kubernetes.io/os Sistema operativo linux
kubernetes.io/arch Architettura della CPU (AMD64 o ARM64) [amd64, arm64]

Esempi di famiglia di SKU

Il karpenter.azure.com/sku-family selettore consente di specificare le famiglie di macchine virtuali specifiche.

Famiglia Description
Serie D Macchine virtuali per utilizzo generico con rapporto cpu-memoria bilanciato
Serie F Macchine virtuali ottimizzate per il calcolo con rapporto elevato tra CPU e memoria
Serie E Macchine virtuali ottimizzate per la memoria per applicazioni a elevato utilizzo di memoria
Serie L Macchine virtuali ottimizzate per l'archiviazione con velocità effettiva elevata del disco
Serie N Macchine virtuali abilitate per GPU per carichi di lavoro a elevato utilizzo di calcolo

Configurazione di esempio con la famiglia di SKU:

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

Esempi di nomi SKU

Il karpenter.azure.com/sku-name selettore consente di specificare il tipo esatto di istanza della macchina virtuale.

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

Esempi di versione SKU

Il karpenter.azure.com/sku-version selettore è destinato a generazioni specifiche di SKU di MACCHINE virtuali.

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

Esempio di zona di disponibilità

Il topology.kubernetes.io/zone selettore consente di specificare le zone di disponibilità per i nodi.

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

Annotazioni

È possibile trovare le zone disponibili per la tua regione usando il comando Azure CLI az account list-locations --output table.

Esempio di architettura

Il kubernetes.io/arch selettore consente di specificare l'architettura della CPU per i nodi. NAP supporta sia amd64 che arm64 i nodi.

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

Esempio di sistema operativo

Il kubernetes.io/os selettore consente di specificare il sistema operativo per i nodi.

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

Esempio di tipo di capacità

Il karpenter.sh/capacity-type selettore consente di specificare se usare istanze Spot o On demand.

Annotazioni

Protezione accesso alla rete assegna priorità alle istanze spot quando vengono specificate sia le istanze spot sia le istanze su richiesta.

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

Limiti del pool di nodi

Per impostazione predefinita, NAP tenta di pianificare i carichi di lavoro entro la quota di Azure disponibile. È anche possibile specificare il limite massimo di risorse usate da un pool di nodi specificando i limiti all'interno della specifica del pool di nodi. Per esempio:

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

Pesi del pool di nodi

Dopo aver definito più pool di nodi, è possibile impostare una preferenza per la pianificazione di un carico di lavoro definendo il peso relativo nelle definizioni del pool di nodi. Per esempio:

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

Passaggi successivi

Per altre informazioni sul provisioning automatico dei nodi in AKS (Azure Kubernetes Service), vedere gli articoli seguenti: