Partager via


Configurer des pools de nœuds pour l’approvisionnement automatique de nœuds (NAP) dans Azure Kubernetes Service (AKS)

Cet article explique comment configurer des pools de nœuds pour le provisionnement automatique de nœuds (NAP) dans Azure Kubernetes Service (AKS), y compris les sélecteurs de référence SKU, les limites de ressources et les pondérations de priorité. Il fournit également des exemples pour vous aider à commencer.

Vue d’ensemble des pools de nœuds dans NAP

NAP utilise les exigences de référence SKU de machine virtuelle pour déterminer les meilleures machines virtuelles pour les charges de travail en attente. Vous pouvez configurer les éléments suivants :

  • Familles de références SKU et types d’instances spécifiques.
  • Limites et priorités des ressources.
  • Instances Spot ou à la demande.
  • Exigences en matière d’architecture et de fonctionnalités.

La NodePool ressource définit des contraintes sur les nœuds créés par NAP et les pods qui s’exécutent sur ces nœuds. Lorsque vous installez NAP pour la première fois, il crée une valeur par défaut NodePool. Vous pouvez modifier ce pool de nœuds ou créer des pools de nœuds supplémentaires en fonction de vos besoins en charge de travail.

Comportements clés de NodePools dans NAP

Lors de la configuration NodePools de NAP, gardez à l’esprit les comportements suivants :

  • NAP nécessite au moins un NodePool pour fonctionner.
  • NAP évalue chaque NodePool configuré.
  • NAP ignore les NodePools avec des taints non tolérés par un pod.
  • NAP applique des taints de démarrage aux nœuds provisionnés, mais ne nécessite pas de tolérance au pod.
  • NAP fonctionne mieux avec des éléments mutuellement exclusifs NodePools. Lorsqu'il y a plusieurs NodePools correspondances, il utilise celle avec le poids le plus élevé.

Passer en revue la configuration du pool de nœuds par défaut

La configuration du Karpenter NodePool par défaut nommé default par NAP est la suivante :

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

Il crée également un system-surge pool de nœuds, qui permet de mettre à l’échelle automatiquement les nœuds du pool système.

Contrôler la configuration du pool de nœuds par défaut lors de la création du cluster

Lorsque vous créez un cluster AKS activé avec NAP à l’aide d’Azure CLI, vous pouvez inclure l’indicateur --node-provisioning-default-pools pour contrôler la configuration du NAP NodePoolpar défaut.

L’indicateur --node-provisioning-default-pools contrôle la configuration NAP NodePool par défaut et accepte les valeurs suivantes :

  • Auto (valeur par défaut) : crée deux normes NodePools pour une utilisation immédiate.
  • None : ne crée aucun NodePools. Vous devez définir votre propre.

Avertissement

Passage de Auto à None : si vous modifiez le paramètre d’un cluster existant de Auto à None, la valeur par défaut NodePools n’est pas supprimée automatiquement. Vous devez les supprimer manuellement si vous n’en avez plus besoin.

Options de configuration du pool de nœuds

Les sections suivantes décrivent différentes options de configuration dans NodePools NAP, notamment les étiquettes connues et les sélecteurs de référence SKU, les limites du pool de nœuds et les pondérations du pool de nœuds.

Étiquettes connues et sélecteurs de référence SKU

Kubernetes définit des étiquettes connues qu’Azure implémente. Vous pouvez définir ces étiquettes dans la spec.requirements section de l’API NodePool . NAP prend également en charge les étiquettes spécifiques à Azure pour une planification plus avancée.

karpenter.azure.com Sélecteurs de référence SKU

Le tableau suivant répertorie les karpenter.azure.com sélecteurs de référence SKU que vous pouvez utiliser dans la spec.requirements section de votre NodePool API pour définir les caractéristiques de machine virtuelle pour vos nœuds :

Selector Descriptif Example
karpenter.azure.com/sku-family Famille SKU de VM D, F, L, etc.
karpenter.azure.com/sku-name Nom explicite de la référence SKU Standard_A1_v2
karpenter.azure.com/sku-version Version de référence SKU (sans « v », peut utiliser 1) 1, 2
karpenter.sh/capacity-type Type d’allocation de machine virtuelle (Spot / À la demande) Zone
karpenter.azure.com/sku-cpu Nombre de processeurs dans la machine virtuelle 16
karpenter.azure.com/sku-memory Mémoire de la machine virtuelle en MiB 131 072
kubernetes.azure.com/sku-cpu Nombre de processeurs dans la machine virtuelle 16
kubernetes.azure.com/sku-memory Mémoire de la machine virtuelle en MiB 131 072
karpenter.azure.com/sku-gpu-name Nom du GPU A100
karpenter.azure.com/sku-gpu-manufacturer Fabricant de GPU nvidia
karpenter.azure.com/sku-gpu-count Nombre de GPU par machine virtuelle 2
karpenter.azure.com/sku-networking-accelerated Indique si la machine virtuelle a une mise en réseau accélérée [vrai, faux]
karpenter.azure.com/sku-storage-premium-capable Indique si la machine virtuelle prend en charge le stockage d’E/S Premium [vrai, faux]
karpenter.azure.com/sku-storage-ephemeralos-maxsize Limite de taille pour le disque du système d’exploitation éphémère en Go 92

kubernetes.io Étiquettes connues

Le tableau suivant répertorie les kubernetes.io étiquettes connues que vous pouvez utiliser dans la spec.requirements section de votre NodePool API pour définir des caractéristiques de nœud pour vos nœuds :

Étiquette Descriptif Example
topology.kubernetes.io/zone Zone(s) de disponibilité [RoyaumeUniSud-1, RoyaumeUniSud-2, RoyaumeUniSud-3]
kubernetes.io/os Système d’exploitation linux
kubernetes.io/arch Architecture du processeur (AMD64 ou ARM64) [amd64, arm64]

Exemples de famille de références SKU

Le karpenter.azure.com/sku-family sélecteur vous permet de cibler des familles de machines virtuelles spécifiques.

Famille Descriptif
Série D Machines virtuelles à usage général avec un ratio processeur/mémoire équilibré
Série F Machines virtuelles optimisées pour le calcul avec un ratio processeur/mémoire élevé
Série E Machines virtuelles optimisées en mémoire pour les applications gourmandes en mémoire
Série L Machines virtuelles optimisées pour le stockage avec un débit de disque élevé
Série N Machines virtuelles compatibles GPU pour les charges de travail nécessitant beaucoup de ressources de calcul

Exemple de configuration utilisant la famille de références SKU :

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

Exemples de noms de référence SKU

Le karpenter.azure.com/sku-name sélecteur vous permet de spécifier le type d’instance de machine virtuelle exacte.

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

Exemples de versions SKU

Le karpenter.azure.com/sku-version sélecteur cible des générations spécifiques de références SKU de machine virtuelle.

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

Exemple de zone de disponibilité

Le topology.kubernetes.io/zone sélecteur vous permet de spécifier les zones de disponibilité de vos nœuds.

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

Note

Vous trouverez des zones disponibles pour votre région à l’aide de la az account list-locations --output table commande Azure CLI.

Exemple d’architecture

Le kubernetes.io/arch sélecteur vous permet de spécifier l’architecture du processeur pour vos nœuds. NAP prend en charge à la fois les nœuds amd64 et arm64.

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

Exemple de système d’exploitation

Le kubernetes.io/os sélecteur vous permet de spécifier le système d’exploitation de vos nœuds.

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

Exemple de type de capacité

Le karpenter.sh/capacity-type sélecteur vous permet de spécifier s’il faut utiliser des instances Spot ou à la demande.

Note

NAP hiérarchise les instances Spot lorsque Spot et À la demande sont spécifiés.

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

Limites du pool de nœuds

Par défaut, NAP tente de planifier vos charges de travail dans le quota Azure que vous avez disponible. Vous pouvez également spécifier la limite supérieure des ressources qu’un pool de nœuds utilise en spécifiant des limites dans la spécification du pool de nœuds. Par exemple:

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

Pondérations du pool de nœuds

Lorsque vous avez défini plusieurs pools de nœuds, vous pouvez définir une préférence d’emplacement où une charge de travail doit être planifiée en définissant le poids relatif dans vos définitions de pool de nœuds. Par exemple:

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

Étapes suivantes

Pour plus d’informations sur le provisionnement automatique de nœuds dans AKS, consultez les articles suivants :