Provisionnement automatique du nœud (préversion)
Lorsque vous déployez des charges de travail sur AKS, vous devez prendre une décision concernant la taille de machine virtuelle nécessaire à la configuration du pool de nœuds. À mesure que vos charges de travail se complexifient davantage et nécessitent différents processeurs, mémoire et fonctionnalités à exécuter, la surcharge liée à la conception de la configuration de votre machine virtuelle pour de nombreuses demandes de ressources devient difficile.
Le provisionnement automatique du nœud (NAP) (préversion) décide en fonction des besoins en ressources du pod en attente, de la configuration optimale de la machine virtuelle pour exécuter ces charges de travail de la manière la plus efficace et la plus économique.
NAP est basé sur le projet Open Source Karpenter et lefournisseur AKS est également Open Source. NAP déploie, configure et gère automatiquement Karpenter sur vos clusters AKS.
Important
Le provisionnement automatique du nœud (NAP) pour AKS est actuellement en PRÉVERSION. Pour connaître les conditions juridiques qui s’appliquent aux fonctionnalités Azure en version bêta, en préversion ou plus généralement non encore en disponibilité générale, consultez l’Avenant aux conditions d’utilisation des préversions de Microsoft Azure.
Avant de commencer
- Vous avez besoin d’un abonnement Azure. Si vous n’avez pas d’abonnement Azure, vous pouvez créer un compte gratuit.
- Vous devez avoir installé Azure CLI.
- Installez l’extension Azure CLI
aks-preview
. Version minimale 0.5.170. - Inscrivez l’indicateur NodeAutoProvisioningPreviewfeature.
Installez l’extension CLI aks-preview
Installez l’extension CLI
aks-preview
à l’aide de la commandeaz extension add
.az extension add --name aks-preview
Mettez à jour l’extension pour vous assurer que la dernière version est installée à l’aide de la commande
az extension update
.az extension update --name aks-preview
Inscrire l’indicateur de fonctionnalité NodeAutoProvisioningPreview
Inscrivez l’indicateur de fonctionnalité
NodeAutoProvisioningPreview
à l’aide de la commandeaz feature register
.az feature register --namespace "Microsoft.ContainerService" --name "NodeAutoProvisioningPreview"
Quelques minutes sont nécessaires pour que l’état s’affiche Registered (Inscrit).
Vérifiez l’état de l’inscription en utilisant la commande
az feature show
.az feature show --namespace "Microsoft.ContainerService" --name "NodeAutoProvisioningPreview"
Quand l’état reflète Inscrit, actualisez l’inscription du fournisseur de ressources Microsoft.ContainerService à l’aide de la commande
az provider register
.az provider register --namespace Microsoft.ContainerService
Limites
- La seule configuration réseau autorisée est Superposition Azure CNI avec Cilium.
- Vous ne pouvez pas l’activer dans un cluster où les pools de nœuds ont activé l’autoscaler de cluster
Fonctionnalités non prises en charge
- les pools de nœuds Windows ;
- Application d’une configuration personnalisée au kubelet du nœud
- Clusters IPv6
- Principaux de service
Remarque
Vous pouvez utiliser une identité managée affectée par le système ou affectée par l’utilisateur.
- Jeux de chiffrement Azure Data Box Disk
- CustomCATrustCertificates
- Démarrer/arrêter le mode
- Proxy HTTP
- Mutation OutboundType. Tous les OutboundTypes sont pris en charge, mais il n’est pas possible de les modifier après la création.
Activer le provisionnement automatique des nœuds
Activer l’approvisionnement automatique des nœuds sur un nouveau cluster
Activez l’approvisionnement automatique des nœuds sur un nouveau cluster à l’aide de la commande
az aks create
et définissez--node-provisioning-mode
surAuto
. Vous devez également définir le--network-plugin
surazure
,--network-plugin-mode
suroverlay
et--network-dataplane
surcilium
.az aks create \ --name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --node-provisioning-mode Auto \ --network-plugin azure \ --network-plugin-mode overlay \ --network-dataplane cilium \ --generate-ssh-keys
Activer l’approvisionnement automatique des nœuds sur un cluster existant
Activez l’approvisionnement automatique des nœuds sur un cluster existant à l’aide de la commande
az aks update
et définissez--node-provisioning-mode
surAuto
. Vous devez également définir le--network-plugin
surazure
,--network-plugin-mode
suroverlay
et--network-dataplane
surcilium
.az aks update --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP_NAME --node-provisioning-mode Auto --network-plugin azure --network-plugin-mode overlay --network-dataplane cilium
Pools des nœuds
Le provisionnement automatique du nœud utilise une liste de références SKU de la machine virtuelle comme point de départ pour décider de celle qui convient le mieux aux charges de travail en état en attente. Avoir du contrôle sur la référence SKU souhaitée dans le pool initial vous permet de spécifier des familles de références SKU spécifiques, ou des types de machines virtuelles et la quantité maximale de ressources utilisées par un provisionneur.
Si vous avez des références SKU spécifiques de machine virtuelle qui sont des instances réservées, par exemple, vous pouvez souhaiter seulement utiliser ces machines virtuelles comme pool de démarrage.
Vous pouvez disposer de plusieurs définitions de pool de nœuds dans un cluster, mais AKS déploie une définition de pool de nœuds par défaut que vous pouvez modifier :
apiVersion: karpenter.sh/v1beta1
kind: NodePool
metadata:
name: default
spec:
disruption:
consolidationPolicy: WhenUnderutilized
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
Spécifications du provisionneur de nœuds prises en charge
Sélecteurs de référence SKU avec des étiquettes connues
Sélecteur | Description | Exemple |
---|---|---|
karpenter.azure.com/sku-family | Famille de références de la machine virtuelle | 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 la référence SKU (sans « v », peut utiliser 1) | 1, 2 |
karpenter.sh/capacity-type | Type d’allocation de machine virtuelle (spot / à la demande) | spot ou à la demande |
karpenter.azure.com/sku-cpu | Nombre de processeurs dans une machine virtuelle | 16 |
karpenter.azure.com/sku-memory | Mémoire dans la machine virtuelle en Mio | 131072 |
karpenter.azure.com/sku-gpu-name | Nom du GPU | A100 |
karpenter.azure.com/sku-gpu-manufacturer | Fabricant du GPU | nvidia |
karpenter.azure.com/sku-gpu-count | Nombre de GPU par machine virtuelle | 2 |
karpenter.azure.com/sku-networking-accelerated | Si la machine virtuelle a des performances réseau accélérées | [vrai, faux] |
karpenter.azure.com/sku-storage-premium-capable | Si la machine virtuelle prend en charge le stockage d’E/S Premium | [vrai, faux] |
karpenter.azure.com/sku-storage-ephemeralos-maxsize | Limite de la taille du disque de système d’exploitation éphémère en Go | 92 |
topology.kubernetes.io/zone | La ou les zones de disponibilité | [RoyaumeUniSud-1, RoyaumeUniSud-2, RoyaumeUniSud-3] |
kubernetes.io/os | Système d’exploitation (Linux uniquement pendant la préversion) | linux |
kubernetes.io/arch | Architecture du processeur (AMD64 ou ARM64) | [amd64, arm64] |
Pour répertorier les fonctionnalités de la référence SKU de la machine virtuelle et les valeurs autorisées, utilisez la commande vm list-skus
à partir d’Azure CLI.
az vm list-skus --resource-type virtualMachines --location <location> --query '[].name' --output table
Limites d’un pool de nœuds
Par défaut, NAP tente de planifier vos charges de travail dans le quota Azure disponible. Vous pouvez également spécifier la limite supérieure des ressources utilisées par un pool de nœuds, en indiquant des limites dans les spécifications du pool de nœuds.
# Resource limits constrain the total size of the cluster.
# Limits prevent Karpenter from creating new instances once the limit is exceeded.
limits:
cpu: "1000"
memory: 1000Gi
Poids du pool de nœuds
Lorsque vous avez défini plusieurs pools de nœuds, vous pouvez définir une préférence concernant l’emplacement dans lequel une charge de travail doit être planifiée. Définissez le poids relatif dans les définitions de votre pool de nœuds.
# 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
Mises à jour des images de Kubernetes et des nœuds
AKS avec NAP gère les mises à niveau des versions de Kubernetes, ainsi que les mises à jour des disques du système d’exploitation de la machine virtuelle par défaut.
Mises à niveau de Kubernetes
Les mises à niveau Kubernetes pour les pools de nœuds NAP suivent la version de Kubernetes du plan de contrôle. Si vous effectuez une mise à niveau du cluster, vos nœuds NAP sont mis à jour automatiquement pour suivre le même contrôle de version.
Mises à jour de l’image du nœud
Par défaut, les machines virtuelles du pool de nœuds NAP sont automatiquement mises à jour lorsqu’une nouvelle image est disponible. Si vous souhaitez épingler un pool de nœuds à une certaine version de l’image du nœud, vous pouvez définir l’imageVersion sur la classe du nœud :
kubectl edit aksnodeclass default
Dans la définition de la classe de nœud, définissez l’imageVersion sur l’une des versions publiées répertoriées dans les notes de publication AKS. Vous pouvez également voir la disponibilité des images dans les régions en faisant référence au suivi des versions AKS
ImageVersion est la partie date de l’image du nœud, car seul Ubuntu 22.04 est pris en charge, par exemple « AKSUbuntu-2204-202311.07.0 » est « 202311.07.0 »
apiVersion: karpenter.azure.com/v1alpha2
kind: AKSNodeClass
metadata:
annotations:
kubernetes.io/description: General purpose AKSNodeClass for running Ubuntu2204
nodes
meta.helm.sh/release-name: aks-managed-karpenter-overlay
meta.helm.sh/release-namespace: kube-system
creationTimestamp: "2023-11-16T23:59:06Z"
generation: 1
labels:
app.kubernetes.io/managed-by: Helm
helm.toolkit.fluxcd.io/name: karpenter-overlay-main-adapter-helmrelease
helm.toolkit.fluxcd.io/namespace: 6556abcb92c4ce0001202e78
name: default
resourceVersion: "1792"
uid: 929a5b07-558f-4649-b78b-eb25e9b97076
spec:
imageFamily: Ubuntu2204
imageVersion: 202311.07.0
osDiskSizeGB: 128
La suppression de la spécification imageVersion rétablit la mise à jour du pool de nœuds vers la dernière version de l’image du nœud.
Interruption du nœud
Lorsque les charges de travail sur vos nœuds effectuent un scale-down, NAP utilise des règles d’interruption sur la spécification du pool de nœuds afin de décider du moment et de la méthode de suppression de ces nœuds, mais également de replanifier éventuellement vos charges de travail pour être plus efficaces.
Vous pouvez manuellement supprimer un nœud à l’aide de kubectl delete node
, mais NAP peut également contrôler quand il doit optimiser vos nœuds.
disruption:
# Describes which types of Nodes NAP should consider for consolidation
consolidationPolicy: WhenUnderutilized | WhenEmpty
# 'WhenUnderutilized', NAP will consider all nodes for consolidation and attempt to remove or replace Nodes when it discovers that the Node is underutilized and could be changed to reduce cost
# `WhenEmpty`, NAP will only consider nodes for consolidation that contain no workload pods
# The amount of time NAP should wait after discovering a consolidation decision
# This value can currently only be set when the consolidationPolicy is 'WhenEmpty'
# You can choose to disable consolidation entirely by setting the string value 'Never'
consolidateAfter: 30s
Supervision des événements de sélection
Le provisionnement automatique de nœuds produit des événements de cluster pouvant être utilisés pour superviser les décisions de déploiement et de planification prises. Vous pouvez afficher des événements au moyen du flux d’événements Kubernetes.
kubectl get events -A --field-selector source=karpenter -w
Azure Kubernetes Service