Créer et configurer un cluster Azure Kubernetes Service (AKS) pour utiliser des nœuds virtuels à l’aide de l’interface de ligne de commande Azure
Cet article explique comment utiliser l’interface Azure CLI pour créer et configurer les ressources de réseau virtuel et un cluster AKS, puis activer des nœuds virtuels.
Avant de commencer
Les nœuds virtuels permettent la communication réseau entre les pods qui s’exécutent dans Azure Container Instances (ACI) et le cluster AKS. Pour que cette communication ait lieu, un sous-réseau de réseau virtuel est créé et des permissions déléguées sont assignées. Les nœuds virtuels ne fonctionnent qu’avec des clusters AKS créés avec un réseau avancé (Azure CNI). Par défaut, les clusters AKS sont créés avec un réseau simple (kubenet). Cet article vous montre comment créer un réseau virtuel et des sous-réseaux, puis déployer un cluster AKS qui utilise un réseau avancé.
Important
Avant d’utiliser des nœuds virtuels avec AKS, passez en revue les limitations relatives aux nœuds virtuels AKS et les limitations d’ACI relatives aux réseaux virtuels. Ces limitations affectent l’emplacement, la configuration réseau, ainsi que d’autres informations de configuration du cluster AKS et des nœuds virtuels.
Si vous n’avez pas encore utilisé ACI, inscrivez le fournisseur de services avec votre abonnement. Vous pouvez vérifier l’état d’inscription du fournisseur d’ACI à l’aide de la commande az provider list, comme dans l’exemple suivant :
az provider list --query "[?contains(namespace,'Microsoft.ContainerInstance')]" -o table
Le fournisseur de Microsoft.ContainerInstance doivent être signalé comme Registered (Inscrit), comme dans l’exemple de sortie suivant :
Namespace RegistrationState RegistrationPolicy
--------------------------- ------------------- --------------------
Microsoft.ContainerInstance Registered RegistrationRequired
Si le fournisseur apparaît NotRegistered (Non-inscrit), inscrivez-le à l’aide de la commande az provider register comme dans l’exemple suivant :
az provider register --namespace Microsoft.ContainerInstance
Lancement d’Azure Cloud Shell
Azure Cloud Shell est un interpréteur de commandes interactif et gratuit que vous pouvez utiliser pour exécuter les étapes de cet article. Il contient des outils Azure courants préinstallés et configurés pour être utilisés avec votre compte.
Pour ouvrir Cloud Shell, sélectionnez Essayer en haut à droite d’un bloc de code. Vous pouvez aussi lancer Cloud Shell dans un onglet distinct du navigateur en accédant à https://shell.azure.com/bash. Sélectionnez Copier pour copier les blocs de code, collez-les dans Cloud Shell, puis appuyez sur Entrée pour les exécuter.
Si vous préférez installer et utiliser l’interface de ligne de commande en local, cet article nécessite Azure CLI version 2.0.49 ou ultérieure. Exécutez az --version
pour trouver la version. Si vous devez installer ou mettre à niveau, voir Installer Azure CLI.
Créer un groupe de ressources
Un groupe de ressources Azure est un groupe logique dans lequel des ressources Azure sont déployées et gérées. Créez un groupe de ressources avec la commande az group create. L’exemple suivant crée un groupe de ressources nommé myResourceGroup à l’emplacement westus.
az group create --name myResourceGroup --location westus
Créez un réseau virtuel
Important
Un nœud virtuel nécessite un réseau virtuel personnalisé et un sous-réseau associé. Il ne peut pas être associé au même réseau virtuel sur lequel le cluster AKS est déployé.
Utilisez la commande az network vnet create pour créer un réseau virtuel. L’exemple suivant crée un réseau virtuel nommé myVnet avec un préfixe d’adresse de 10.0.0.0/8 et un sous-réseau nommé myAKSSubnet. Par défaut, le préfixe d’adresse de ce sous-réseau est 10.240.0.0/16 :
az network vnet create \
--resource-group myResourceGroup \
--name myVnet \
--address-prefixes 10.0.0.0/8 \
--subnet-name myAKSSubnet \
--subnet-prefix 10.240.0.0/16
Maintenant, créez un sous-réseau supplémentaire pour les nœuds virtuels à l’aide de la commande az network vnet subnet create. L’exemple suivant crée un sous-réseau nommé myVirtualNodeSubnet avec le préfixe d’adresse 10.241.0.0/16.
az network vnet subnet create \
--resource-group myResourceGroup \
--vnet-name myVnet \
--name myVirtualNodeSubnet \
--address-prefixes 10.241.0.0/16
Créer un cluster AKS avec identité managée
Au lieu d’utiliser une identité affectée par le système, vous pouvez également utiliser une identité affectée par l’utilisateur. Pour plus d’informations, consultez Utiliser des identités managées.
Vous déployez un cluster AKS sur un sous-réseau AKS créé à l’étape précédente. Obtenez l’ID de ce sous-réseau à l’aide de la commande az network vnet subnet show :
az network vnet subnet show --resource-group myResourceGroup --vnet-name myVnet --name myAKSSubnet --query id -o tsv
Utilisez la commande az aks create pour créer un cluster AKS. L’exemple suivant crée un cluster à un nœud nommé myAKSCluster. Remplacez <subnetId>
par l’ID obtenu à l’étape précédente.
az aks create \
--resource-group myResourceGroup \
--name myAKSCluster \
--node-count 1 \
--network-plugin azure \
--vnet-subnet-id <subnetId> \
Au bout de quelques minutes, la commande se termine et retourne des informations au format JSON sur le cluster.
Activer le module complémentaire de nœuds virtuels
Pour activer les nœuds virtuels, utilisez à présent la commande az aks enable-addons. L’exemple suivant utilise le sous-réseau nommé myVirtualNodeSubnet créé à l’étape précédente :
az aks enable-addons \
--resource-group myResourceGroup \
--name myAKSCluster \
--addons virtual-node \
--subnet-name myVirtualNodeSubnet
Se connecter au cluster
Pour configurer kubectl
afin de vous connecter à votre cluster Kubernetes, exécutez la commande az aks get-credentials. Cette étape télécharge les informations d’identification et configure l’interface de ligne de commande Kubernetes pour leur utilisation.
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Pour vérifier la connexion à votre cluster, utilisez la commande kubectl get pour retourner une liste des nœuds du cluster.
kubectl get nodes
L’exemple de sortie suivant illustre l’unique nœud de machine virtuelle créé, puis le nœud virtuel Linux, virtual-node-aci-linux :
NAME STATUS ROLES AGE VERSION
virtual-node-aci-linux Ready agent 28m v1.11.2
aks-agentpool-14693408-0 Ready agent 32m v1.11.2
Déployer un exemple d’application
Créez un fichier nommé virtual-node.yaml
et copiez-y le YAML suivant. Pour planifier le conteneur au niveau du nœud, nodeSelector et toleration sont définis.
apiVersion: apps/v1
kind: Deployment
metadata:
name: aci-helloworld
spec:
replicas: 1
selector:
matchLabels:
app: aci-helloworld
template:
metadata:
labels:
app: aci-helloworld
spec:
containers:
- name: aci-helloworld
image: mcr.microsoft.com/azuredocs/aci-helloworld
ports:
- containerPort: 80
nodeSelector:
kubernetes.io/role: agent
kubernetes.io/os: linux
type: virtual-kubelet
tolerations:
- key: virtual-kubelet.io/provider
operator: Exists
- key: azure.com/aci
effect: NoSchedule
Exécutez l’application avec la commande kubectl apply.
kubectl apply -f virtual-node.yaml
Utilisez la commande kubectl get pods avec l’argument -o wide
pour obtenir la liste des pods et le nœud planifié. Remarquez que le pod aci-helloworld
a été planifié sur le nœud virtual-node-aci-linux
.
kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
aci-helloworld-9b55975f-bnmfl 1/1 Running 0 4m 10.241.0.4 virtual-node-aci-linux
Le pod reçoit une adresse IP interne du sous-réseau de réseau virtuel Azure délégué de façon à être utilisé avec des nœuds virtuels.
Notes
Si vous utilisez des images stockées dans Azure Container Registry, configurez et utilisez un secret Kubernetes. Compte tenu des limitations imposées pour les nœuds virtuels, vous ne pouvez pas utiliser l'authentification de principal de service Azure AD intégrée. Si vous n'utilisez pas de secret, les pods planifiés sur les nœuds virtuels ne parviennent pas à démarrer et renvoient l'erreur HTTP response status code 400 error code "InaccessibleImage"
.
Tester le pod de nœud virtuel
Pour tester le pod en cours d’exécution sur le nœud virtuel, accédez à l’application de démonstration avec un client web. Comme le pod possède une adresse IP interne, vous pouvez tester facilement cette connectivité à partir d’un autre pod sur le cluster AKS. Créez un pod de test et attachez-y une session Terminal :
kubectl run -it --rm testvk --image=mcr.microsoft.com/dotnet/runtime-deps:6.0
Installez curl
dans le pod en utilisant apt-get
:
apt-get update && apt-get install -y curl
Maintenant, accédez à l’adresse de votre pod avec curl
(par exemple, http://10.241.0.4 ). Indiquez votre propre adresse IP interne, obtenue avec la commande kubectl get pods
précédente :
curl -L http://10.241.0.4
L’application de démonstration s’affiche, comme l’illustre l’exemple de sortie condensé suivant :
<html>
<head>
<title>Welcome to Azure Container Instances!</title>
</head>
[...]
Fermez la session de terminal sur votre pod de test avec exit
. Une fois la session terminée, le pod est supprimé.
Supprimer des nœuds virtuels
Si vous ne souhaitez plus utiliser des nœuds virtuels, vous pouvez les désactiver à l’aide de la commande az aks disable-addons.
Si nécessaire, accédez à https://shell.azure.com pour ouvrir Azure Cloud Shell dans votre navigateur.
Tout d’abord, supprimez le pod aci-helloworld
qui s’exécute sur le nœud virtuel :
kubectl delete -f virtual-node.yaml
L’exemple de commande suivant désactive les nœuds virtuels Linux :
az aks disable-addons --resource-group myResourceGroup --name myAKSCluster --addons virtual-node
À présent, supprimez les ressources réseau virtuelles et le groupe de ressources :
# Change the name of your resource group, cluster and network resources as needed
RES_GROUP=myResourceGroup
AKS_CLUSTER=myAKScluster
AKS_VNET=myVnet
AKS_SUBNET=myVirtualNodeSubnet
# Get AKS node resource group
NODE_RES_GROUP=$(az aks show --resource-group $RES_GROUP --name $AKS_CLUSTER --query nodeResourceGroup --output tsv)
# Get network profile ID
NETWORK_PROFILE_ID=$(az network profile list --resource-group $NODE_RES_GROUP --query "[0].id" --output tsv)
# Delete the network profile
az network profile delete --id $NETWORK_PROFILE_ID -y
# Grab the service association link ID
SAL_ID=$(az network vnet subnet show --resource-group $RES_GROUP --vnet-name $AKS_VNET --name $AKS_SUBNET --query id --output tsv)/providers/Microsoft.ContainerInstance/serviceAssociationLinks/default
# Delete the service association link for the subnet
az resource delete --ids $SAL_ID --api-version 2021-10-01
# Delete the subnet delegation to Azure Container Instances
az network vnet subnet update --resource-group $RES_GROUP --vnet-name $AKS_VNET --name $AKS_SUBNET --remove delegations
Étapes suivantes
Dans cet article, un pod a été planifié sur le nœud virtuel et a reçu une adresse IP interne privée. Vous auriez tout aussi bien pu créer un déploiement de service et router le trafic vers votre pod au moyen d’un équilibreur de charge ou d’un contrôleur d’entrée. Pour plus d’informations, consultez Créer un contrôleur d’entrée de base dans AKS.
Les nœuds virtuels constituent souvent l’un des composants d’une solution de mise à l’échelle dans AKS. Pour plus d’informations sur ces solutions, consultez les articles suivants :