Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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
NodePoolpour fonctionner. - NAP évalue chaque
NodePoolconfiguré. - NAP ignore les
NodePoolsavec 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 plusieursNodePoolscorrespondances, 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 normesNodePoolspour une utilisation immédiate. -
None: ne crée aucunNodePools. 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 :