Les Virtual Nodes AKS

Azure Kubernetes Service (AKS) propose une fonctionnalité très sympa : les virtual nodes. Ils permettent aux utilisateurs de mettre à l’échelle rapidement leurs applications à l’aide de conteneurs s’exécutant en mode Serverless grâce aux Azure Container Instances.

Les nœuds virtuels assurent un provisionnement rapide des pods et sont facturés à la seconde d’exécution. Ce mode de déploiement est à envisager pour l’exécution d’une application périodiquement tel qu’un traitement batch.

4 1 - Les Virtual Nodes AKS

Mise en oeuvre

Cette fonctionnalité implique de gérer soit même la couche réseau du cluster AKS. Chose que, jusqu’à présent, nous n’avions pas faite ! Il va donc falloir créer un vnet et les subnets utilisés par le cluster et nos nodes.

Je commence par créer mon ressource group :

az group create --name rg-Aks --location westus

1 - Les Virtual Nodes AKS

Je vais utiliser az network vnet create pour créer un réseau virtuel avec un premier sous réseau pour mon cluster.

az network vnet create --resource-group rg-Aks --name vnetAks --address-prefixes 10.0.0.0/8 --subnet-name AksSubnet --subnet-prefix 10.240.0.0/16
2 - Les Virtual Nodes AKS

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 cela il faut créer un sous réseau dédié au virtual node avec les droits nécessaire à la communication avec le cluster. Mettons ça en pratique !

Je créer tout d’abord un sous réseau supplémentaire pour mon nœud virtuel :

az network vnet subnet create --resource-group rg-Aks --vnet-name vnetAks --name vNodeSubnet --address-prefixes 10.241.0.0/16
3 - Les Virtual Nodes AKS

Pour déployer mon cluster, j’ai besoin d’un service principal :

az ad sp create-for-rbac --skip-assignment

4 - Les Virtual Nodes AKS

Pour permettre au cluster d’utiliser le vnet, il faut accorder au service principal utilisé par AKS les droits appropriés.

Tout d’abord, je récupère l’ID de ressource du réseau virtuel de mon cluster :

az network vnet show --resource-group rg-Aks --name AksVnet --query id -o tsv
5 - Les Virtual Nodes AKS

J’associe ensuite à mon service principal le droit de manipuler ce vnet :

aaz role assignment create --assignee d5fb6d0c-aacf-4a47-9640-65dc313dbd93 --scope /subscriptions/b0863488-158d-4230-8349-af178b11e8e0/resourceGroups/rg-Aks/providers/Microsoft.Network/virtualNetworks/vnetAks
--role Contributor
6 1024x234 - Les Virtual Nodes AKS

Maintenant j’ai besoin de l’identifiant de mon sous réseau (automatiquement créé avec mon vnet) :

az network vnet subnet show --resource-group rg-Aks --vnet-name vnetAks --name AksSubnet --query id -o tsv

Je peux désormais créer mon cluster AKS. Le paramètre –vnet-subnet-id est à renseigner avec la valeur récupérée avec la commande juste au dessus. service-principal et –client-secret sont à renseigner avec les informations du service principal créé précédement :

az aks create --resource-group rg-Aks --name aksWithAci --node-count 1 --network-plugin azure --service-cidr 10.0.0.0/16 --dns-service-ip 10.0.0.10 --docker-bridge-address 172.17.0.1/16 --vnet-subnet-id /subs
criptions/b0863488-158d-4230-8349-af178b11e8e0/resourceGroups/rg-Aks/providers/Microsoft.Network/virtualNetworks/vnetAks/subnets/AksSubnet --service-principal d5fb6d0c-aacf-4a47-9640-65dc313dbd93 --client-secret a9984c63-e7aa-4167-afba-c
b76c3ffe96d
8 1024x497 - Les Virtual Nodes AKS

Je vais maintenant activer les nœuds virtuels en renseignant le sous-réseau créé tout à l’heure :

az aks enable-addons --resource-group rg-Aks --name aksWithAci --addons virtual-node --subnet-name vNodeSubnet
9 1024x507 - Les Virtual Nodes AKS

Je peux maintenant me connecter à mon cluster avec un :

az aks get-credentials --resource-group rg-aks --name aksWithAci

Un kubectl get nodes montrent bien que nous avons deux nodes de provisionné. Le noeud virtuel se nomme “virtual-node-aci-linux”.

Je vais à présent pouvoir y déployer l’application hébergée ici avec le yaml stocké au même endroit !

10 1024x334 - Les Virtual Nodes AKS

La partie importante du yaml est celle-ci :

12 - Les Virtual Nodes AKS

Je cible mon virtual node grâce au mécanisme des tolerations présenté dans cet article et en précisant un nodeselector de type virtual-kubelet.

Si j’accède à l’URL récupéré ci-dessus avec un kubectl get services je constate que tout fonctionne comme dans un “vrai” node AKS !

11 1024x311 - Les Virtual Nodes AKS

Mon application est bien opérationnelle 🙂

A très vite

Thomas

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *