Utiliser des nœuds virtuels v2 dans Azure Kubernetes Service (AKS) (préversion)

Les nœuds virtuels v2 sont une pile de nœuds virtuels améliorée qui étend AKS au-delà des nœuds basés sur des machines virtuelles en exécutant des pods sur un calcul serverless dans Azure Container Instances (ACI). Les charges de travail sont transférées vers ACI en quelques secondes, sans avoir à attendre que de nouveaux nœuds soient provisionnés, et vous ne payez que pour la puissance de calcul que vous utilisez pendant l'exécution des pods. Les nœuds virtuels v2 sont fournis en tant qu’extension de cluster AKS.

Important

Les fonctionnalités d’évaluation AKS sont disponibles en libre-service et font l’objet d’un abonnement. Les versions préliminaires sont fournies « en l’état » et « selon leur disponibilité » et ne sont pas couvertes par les accords de niveau de service ni par la garantie limitée. Les versions préliminaires d’AKS sont partiellement couvertes par le support client, dans la limite du raisonnable. Par conséquent, ces fonctionnalités ne sont pas destinées à une utilisation en production. Pour plus d’informations, consultez les articles de support suivants :

Supported

  • Initialiser les conteneurs
  • Alias d’hôte
  • Crochets de cycle de vie des conteneurs (postStart et preStop)
  • kubectl exec avec des arguments
  • Volumes persistants et PVC (Azure Files uniquement)
  • Peering de réseaux virtuels
  • Egress contrôlé par NSG
  • NAT Gateway pour egress
  • Conteneurs confidentiels
  • Jusqu’à 200 pods par nœud virtuel

Limitations

Les fonctionnalités suivantes ne sont pas encore prises en charge :

  • Conteneurs Windows
  • DaemonSets
  • Réacheminement de port
  • IPv6
  • Plages d’adresses IP autorisées du serveur d’API
  • Superposition Azure CNI
  • Cilium ou NPM comme stratégie réseau
  • Apporter votre propre réseau virtuel (BYO)
  • Plusieurs instances d’extension par cluster
  • Pools En attente

Disponibilité des ressources et limites de quota

Les nœuds virtuels v2 sont disponibles dans toutes les régions de cloud public Azure où Azure Container Instances prend en charge les références SKU de réseau virtuel. Pour plus d’informations, consultez Les limites de disponibilité des ressources et de quota pour ACI.

Prerequisites

  • Azure CNI en mode nœud-sous-réseau
  • Calico ou aucun en tant que stratégie réseau
  • Identité de charge de travail activée
  • Au moins un pool de nœuds avec une taille de machine virtuelle de 4 processeurs virtuels et 16+ Gio de mémoire. Chaque nœud virtuel réserve environ 3 processeurs virtuels et 12 Gio de mémoire sur un nœud AKS de votre cluster, de sorte que vos nœuds disposent de suffisamment de ressources.
  • Extension Azure k8s version 1.8 ou ultérieure
  • kubectl 1.30 ou version ultérieure

Inscrivez le fournisseur de ressources ACI :

az provider register --namespace Microsoft.ContainerInstance

Note

Exécutez la commande suivante si vous rencontrez une erreur à n’importe quel stade du processus d’activation de l’extension.

az provider register --namespace Microsoft.KubernetesConfig

Activer les nœuds virtuels v2

Installez l’extension :

az k8s-extension create \
    --name <extension-name> \
    --extension-type Microsoft.virtualnodes \
    --cluster-name <cluster-name> \
    --resource-group <resource-group> \
    --cluster-type managedClusters \
    --configuration-settings replicaCount=1   # specifies number of virtual nodes - optional

Configurer les paramètres d’extension

Les opérations de création et de mise à jour prennent en charge les paramètres de configuration suivants.

Paramètre de configuration Description
replicaCount Nombre de nœuds virtuels.
admissionControllerReplicaCount Nombre de pods de contrôleur d’admission.
podAnnotations Annotations ajoutées aux pods d’infrastructure en tant que mappage clé-valeur.
nodeSelector Étiquettes qui sélectionnent les nœuds AKS qui hébergent les pods d’infrastructure et du contrôleur d’admission.
tolerations Tolérances appliquées aux pods de contrôleur d’infrastructure et d’admission.
affinity Paramètres d’affinité supplémentaires fusionnés avec les règles d’affinité AKS requises.
zones Zones de disponibilité délimitées par des points-virgules où les pods sont déployés.
nodeLabels Étiquettes ajoutées aux nœuds virtuels en tant que paires key=value séparées par des virgules.

Les étiquettes kubernetes.io autorisées sont les suivantes :

  • beta.kubernetes.io/arch
  • beta.kubernetes.io/instance-type
  • beta.kubernetes.io/os
  • failure-domain.beta.kubernetes.io/region
  • failure-domain.beta.kubernetes.io/zone
  • kubernetes.io/arch
  • kubernetes.io/hostname
  • kubernetes.io/os
  • node.kubernetes.io/instance-type
  • topology.kubernetes.io/region
  • topology.kubernetes.io/zone

Vérifiez l’extension :

az k8s-extension show \
    --name <extension-name> \
    --cluster-type managedClusters \
    --cluster-name <cluster-name> \
    --resource-group <resource-group>

Confirmez que provisioningState est Succeeded. Il peut rester dans l'état Pending pendant quelques minutes.

Vérifiez que les pods d’extension sont en cours d’exécution dans l’espace de noms vn-system :

kubectl get pods --namespace vn-system

Mettre à jour une extension

az k8s-extension update --name <extension-name> --cluster-name <aks-cluster-name> --resource-group <aks-resource-group> --cluster-type managedClusters

Note

Le paramètre --auto-upgrade-modeprend en charge none, patch ou compatible. Pour épingler une version d’extension spécifique à l’aide de --version, définissez --auto-upgrade-mode sur none.

Accès à Azure Container Registry

Pour extraire des images d’un Azure Container Registry (ACR) privé , utilisez l’identité managée de l’extension ou un secret d’extraction d’image Kubernetes.

Utiliser l’identité managée de l’extension

Accordez le rôle AcrPull à l’identité managée générée pour l’extension. Ce rôle accorde à tous les pods s’exécutant sur l’accès aux nœuds virtuels de l’extension pour extraire des images à partir du Registre sans configuration de pod supplémentaire. Vous devez avoir l’autorisation de créer des attributions de rôles sur le registre.

Obtenez l’ID principal de l’identité managée de l’extension :

$extensionPrincipalId = az k8s-extension show --name <extension-name> --cluster-name <aks-cluster-name> --resource-group <aks-resource-group> --cluster-type managedClusters --query aksAssignedIdentity.principalId --output tsv

Obtenez l’ID de ressource du registre de conteneurs :

$acrId = az acr show --name <acr-name> --resource-group <acr-resource-group> --query id --output tsv

Attribuez le AcrPull rôle à l’identité managée d’extension dans l’étendue du Registre :

az role assignment create --assignee-object-id $extensionPrincipalId --assignee-principal-type ServicePrincipal --role AcrPull --scope $acrId

Patientez plusieurs minutes pour que l’attribution de rôle se propage avant de déployer des charges de travail qui extraient des images à partir du registre.

Utiliser un secret d’extraction d’image

Pour obtenir des instructions, consultez Secret d’extraction Kubernetes pour l’authentification ACR.

Déployer une charge de travail sur des nœuds virtuels v2

Planifiez des pods sur des nœuds virtuels à l’aide du virtualization: virtualnode2 sélecteur de nœuds et de la virtual-kubelet.io/provider tolérance :

apiVersion: apps/v1
kind: Deployment
metadata:
  name: demo
spec:
  replicas: 3
  selector:
    matchLabels:
      app: demo
  template:
    metadata:
      labels:
        app: demo
    spec:
      containers:
        - name: hello
          image: mcr.microsoft.com/azuredocs/aci-helloworld
          resources:
            requests:
              cpu: 100m
              memory: 128Mi
            limits:
              cpu: "1"
              memory: 1Gi
      nodeSelector:
        virtualization: virtualnode2
        kubernetes.io/os: linux
      tolerations:
        - key: virtual-kubelet.io/provider
          operator: Exists
          effect: NoSchedule

Enregistrez le manifeste sous demo.yaml, puis appliquez-le.

kubectl apply -f demo.yaml

Vérifiez que les pods sont en cours d'exécution.

kubectl get pods -l app=demo -o wide

Désactiver les nœuds virtuels v2

Warning

Lorsque vous désactivez l’extension de nœud virtuel, le cluster AKS se déconnecte des groupes de conteneurs de stockage Azure Container Instances. Pour éviter les instances orphelines qui continuent d’exécuter et entraînent des frais, supprimez toutes les charges de travail exécutées sur le nœud virtuel avant de désactiver l’extension.

Supprimez l’extension et nettoyez les ressources de nœud virtuel.

az k8s-extension delete \
    --name <extension-name> \
    --cluster-name <cluster-name> \
    --resource-group <resource-group> \
    --cluster-type managedClusters
kubectl delete node <virtual-node-name>

Étapes suivantes