Aujourd’hui nous allons nous intéresser aux nodes de notre cluster et l’organisation autour de pool de noeuds dans AKS. Tout l’intérêt des nodepools est la possibilité d’avoir des nœuds spécifiques pour exécuter nos pods afin de répondre à des besoins bien précis.
Qu’est ce qu’un pool de noeuds
Dans Azure Kubernetes Service, les nœuds sont regroupés dans des pools de nœuds. Ces pools contiennent 1 ou n VM identiques pour exécuter nos pods.
Quelques précisions :
- La création du cluster crée un pool de nœuds par défaut, qu’il n’est pas possible de supprimer.
- Le cluster AKS peut avoir un maximum de huit pools de nœuds et 800 nœuds dans ces 8 pools de nœuds.
Gérer des pools dans AKS
Il faut utiliser le jeu de commandes az aks nodepool
pour exécuter des opérations sur un pool de nœuds.
Création du cluster
az aks create --resource-group rgAks --name myAKSCluster --vm-set-type VirtualMachineScaleSets --node-count 2 --generate-ssh-keys --load-balancer-sku standard
Important : Le cluster AKS doit utiliser le loadbalancer en SKU Standard pour utiliser plusieurs pools de nœuds.
Ajout
az aks nodepool add --resource-group rgAks --cluster-name myAKSCluster --name nodepool2 --node-count 1 --node-vm-size Standard_D4s_v3 --no-wait
Modification
Par exemple pour une montée de version de kubernetes :
az aks nodepool upgrade --resource-group rgAks --cluster-name myAKSCluster --name mynodepool --kubernetes-version 1.14.8 --no-wait
Suppression
az aks nodepool delete -g rgAks --cluster-name myAKSCluster --name nodepool2 --no-wait
Le choix des noeuds
Il est possible de créer des nodes particuliers :
- Optimisé en quantité de mémoire ou de processeur.
- Avec une prise en charge GPU.
- Optimisé pour le stockage.
Pour obtenir des informations sur les machine virtuelle présentées ci-dessus, consulter ce lien !
Ici par exemple je créé un pool de nœud conçu pour le calcul GPU.
az aks nodepool add --resource-group rgAks--cluster-name myAKSCluster --name gpunodepool --node-count 1 --node-vm-size Standard_NC6 --no-wait
Associer des nodes au pods
Maintenant que nous avons des nœuds avec des spécificités, il serait intéressant que des pods s’exécutent sur ces nœuds en conséquence. Pour ce besoin nous pouvons utiliser des rejets et des tolérances !
- Si j’applique un rejet à un nœud je pourrais déployer sur ce nœud uniquement des pods prévu pour supporter ce rejet.
- Je peux alors appliquer une tolérance à un pod pour lui permettre de tolérer le rejet d’un nœud.
Voici les types de rejet disponibles :
NoSchedule
: les pods qui ne tolèrent pas ce rejet ne seront pas déployés sur le nœud.PreferNoSchedule
: Kubernetes évite de déployer les pods qui ne tolèrent pas ce rejet sur le nœud. Mais si besoin, il peut le faire.NoExecute
: Même punition que le NoSchedule mais en prime, si un pod est déjà en cours d’exécution sur ce nœud et qu’il ne tolère pas le rejet, il est supprimé de celui-ci.
Exemple
J’ai demandé un nodepool optimisé en mémoire et cpu de type Standard_F2s_v2 :
Les machines virtuelles optimisées pour le calcul ont un ratio UC/mémoire élevé. Ces tailles conviennent pour les serveurs web au trafic moyen, les appliances réseau, les processus de traitement par lot et les serveurs d’application.
https://docs.microsoft.com/fr-fr/azure/virtual-machines/linux/sizes-compute
Je vais maintenant appliquer un rejet à ce nodepool. D’abord je récupère son id :
J’applique ensuite un rejet :
kubectl taint node aks-nodepoolf2s-92754635-vmss000000 sku=calc:NoSchedule
Maintenant, je peux déployer mon pod avec la tolérance, définie via mon yaml, pour supporter le rejet :
kubectl apply -f .\deployWithToleration.yaml
On peux maintenant vérifier le déploiement de mon pod grâce à :
kubectl describe pod mypod
J’ai bien déployé mon pod sur le nœud attendu 🙂
Grâce à ces pool de nœuds ainsi que les rejets et tolérances nous avons montré que nous pouvons prévoir des nœuds dans notre cluster AKS destinés à des types de pods bien précis. Il est donc possible d’adapter l’environnement d’exécution Kubernetes en fonction du type d’application déployé pour lui affecter plus ou moins de ressources, du stockage ou un GPU.
A bientôt !
Une réponse sur “Les pools de nœuds dans AKS”