Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo illustra come configurare i pool di nodi per il provisioning automatico dei nodi in Servizio Azure Kubernetes (AKS), inclusi selettori sku, limiti delle risorse e pesi di priorità. Fornisce anche esempi che consentono di iniziare.
Servizio Azure Kubernetes automatico include NAP per impostazione predefinita. Per i cluster AKS Standard, è necessario abilitare NAP prima di configurare i relativi pool di nodi.
Come NAP seleziona le VM per i pool di nodi
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, GPU e altre funzionalità.
La risorsa NodePool imposta vincoli sui nodi che NAP crea e sui pod che vengono eseguiti in tali nodi. Quando si attiva NAP con la configurazione predefinita del pool di nodi impostata su Auto, vengono create risorse NodePool predefinite. È possibile modificare questi pool di nodi o creare pool di nodi aggiuntivi in base ai requisiti del carico di lavoro.
Come NAP valuta e seleziona i pool di nodi
Quando si configura NodePools per Protezione accesso alla rete, tenere presenti i comportamenti seguenti:
- NAP richiede almeno un
NodePoolper funzionare. - NAP valuta ogni
NodePoolconfigurato. - Protezione accesso alla rete ignora
NodePoolsche 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.
- NAP funziona al meglio con pool reciprocamente esclusivi
NodePools, i cui requisiti non si sovrappongono, in modo che ogni pod corrisponda a un solo pool. Se piùNodePoolscorrispondono, NAP utilizza quello 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:
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 crea anche un pool di nodi system-surge che fornisce capacità Linux AMD64 su richiesta per i componenti aggiuntivi di sistema essenziali. Quando un pod in attesa tollera il taint CriticalAddonsOnly=true:NoSchedule e corrisponde ai requisiti del pool, NAP può eseguire il provisioning di un nodo da questo pool. I nodi creati dal pool hanno l'etichetta kubernetes.azure.com/mode: system .
Controllare i pool di nodi predefiniti
Quando si crea un nuovo cluster AKS abilitato con NAP usando interfaccia della riga di comando di Azure, includere il flag --node-provisioning-default-pools per controllare se AKS crea il valore predefinito NAP NodePools. Puoi anche usare questo flag con az aks update quando abiliti Network Access Protection (NAP) su un cluster esistente.
Il --node-provisioning-default-pools flag accetta i valori seguenti:
-
Auto(impostazione predefinita): crea due standardNodePoolsper l'uso immediato. -
None: non crea alcun oggettoNodePools. È 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. Prima di eliminarli, definire la capacità di sostituzione appropriata per i componenti aggiuntivi critici del sistema. Se non sono più necessari, è necessario eliminare manualmente il valore predefinito NodePools .
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 . NAP supporta anche etichette specifiche di Azure per una pianificazione più avanzata.
La tabella seguente elenca le etichette che è possibile usare nella sezione dell'API spec.requirements per definire le caratteristiche della NodePool macchina virtuale per i nodi:
| Selector | Description | Example |
|---|---|---|
karpenter.sh/capacity-type |
Tipo di allocazione della macchina virtuale (spot/su richiesta) | Spot (Contante) |
karpenter.azure.com/sku-family |
Famiglia di SKU VM | D, F, L, ecc. |
karpenter.azure.com/sku-series |
Serie di SKU VM | Dpls_v6 |
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.azure.com/sku-cpu |
Numero di CPU nella macchina virtuale | 16 |
karpenter.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.azure.com/sku-cpu |
Numero di CPU nella macchina virtuale | 16 |
kubernetes.azure.com/sku-memory |
Memoria nella macchina virtuale in MiB | 131072 |
kubernetes.azure.com/cluster |
Nome del cluster AKS | my-cluster |
kubernetes.azure.com/mode |
Modalità pool di nodi | [sistema, utente] |
kubernetes.azure.com/priority |
Priorità | [spot, regolare] |
kubernetes.azure.com/os-sku |
SKU del sistema operativo | [Ubuntu, AzureLinux] |
kubernetes.azure.com/fips_enabled |
Indica se FIPS è abilitato | true |
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] |
I valori del selettore di memoria in questa tabella sono i valori MiB segnalati nei nodi creati da Nap. Prima di aggiungere un selettore, esaminare le etichette nei nodi per confermare il valore usato dal cluster.
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
Esempio di SKU GPU
Per eseguire il provisioning dei nodi GPU NVIDIA con NAP, creare un NodePool che seleziona dimensioni di VM abilitate per GPU. L'esempio seguente consente a Nap di selezionare GLI SKU GPU NVIDIA serie N:
requirements:
- key: karpenter.azure.com/sku-family
operator: In
values:
- N
- key: karpenter.azure.com/sku-gpu-manufacturer
operator: In
values:
- nvidia
Se si desidera che il servizio Azure Kubernetes installi e gestisca il driver GPU NVIDIA, il plug-in del dispositivo, l'esportatore di metriche di Data Center GPU Manager (DCGM) e i segnali di integrità della GPU nei nodi GPU di cui è stato eseguito il provisioning tramite NAP, configurare la GPU gestita nel riferimento AKSNodeClass. Per altre informazioni, vedere Creare un pool di nodi GPU gestito dal servizio Azure Kubernetes.
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
Per elencare le dimensioni delle macchine virtuali che supportano le zone di disponibilità in un'area, usare il az vm list-skus comando con i --location <region> --zone --output table parametri . Verifica che la dimensione della macchina virtuale selezionata supporti le zone indicate nel requisito NodePool.
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, la Network Allocation Policy (NAP) tenta di pianificare i carichi di lavoro entro la quota disponibile di Azure. Per un pool di nodi dinamico, è possibile specificare limiti aggregati delle risorse in tutti i nodi di cui è stato effettuato il provisioning da tale pool. Nell'esempio seguente, cpu: "1000" limita il pool a 1.000 core vCPU e memory: 1000Gi lo limita a 1.000 gibibyte di memoria:
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
Pesi del pool di nodi
Dopo aver definito più pool di nodi, è possibile impostare una preferenza per la posizione in cui un carico di lavoro deve essere pianificato definendo il peso relativo nelle definizioni del pool di nodi. Il weight campo accetta un numero intero compreso tra 1 e 100 e i valori superiori assegnano una priorità più alta al pool di nodi. Se si omette weight, il relativo valore è effettivamente 0. 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
Pool di nodi statici
I pool di nodi statici mantengono il numero fisso di nodi con provisioning NAP specificato nel campo replicas, indipendentemente dalla richiesta di pod. Per modificare il numero di nodi, eseguire esplicitamente il ridimensionamento di NodePool, ad esempio usando kubectl scale con nodepool static-node-pool --replicas=7. Il valore facoltativo limits.nodes vincola il ridimensionamento esplicito e la capacità temporanea creata durante la sostituzione dei nodi. Per i pool di nodi statici, nodes è l'unico campo supportato in limits. Non è possibile impostare limiti di CPU o memoria.
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
Annotazioni
Per i pool di nodi statici, è possibile impostare solo nodes nel limits campo . Non è possibile impostare i limiti delle risorse o weighte il consolidamento delle interruzioni non si applica. Dopo aver creato un NodePoologgetto , non è possibile spostarlo tra le modalità statiche e dinamiche aggiungendo o rimuovendo il replicas campo.
Passaggi successivi
Per altre informazioni sul provisioning automatico dei nodi in AKS (Azure Kubernetes Service), vedere gli articoli seguenti: