Aujourd’hui nous allons voir comment déployer un AKS avec Terraform, ce cluster sera hautement disponible grâce aux Availability Zone.
Les fichiers présentés sont téléchargeables ici !
Dans un premier temps, un peu de configuration, pour pouvoir gérer des ressources Azure au travers d’un outil tiers nous avons besoin de créer un Service principal dans Azure AD :
az ad sp create-for-rbac --role="Contributor"
--name ServicePrincipalName
Conservez bien les informations obtenues en résultat de cette commande, nous en aurons besoin 🙂
Préparation des fichiers
Coté Terraform, on commence par remplir le fichier provider.tf qui va renseigner les informations de connexion à notre tenant. Le provider “azurerm” permettra à Terraform de comprendre qu’il cible un déploiement dans le cloud Microsoft.
Pour récupérer les informations demandées ci-dessous, vous pouvez utiliser la commande az login pour le subscription_id et le tenant_id. Pour le client_id et le client_secret vous pouvez utiliser le Service Principal créé précédemment.
Passons maintenant à la définition des variables utilisées par notre script. Je variabilise le nom du ressource group, la localisation du déploiement, le nom du cluster et les infos du service principal propriétaire du cluster.
Je créé maintenant un fichier variable.tfvars qui va cette fois-ci contenir les valeurs de mes variables. Il faut renseigner ici l’id (appId) et le secret (password) du service principal obtenue grâce à la première commande exécutée :
Le fichier output.tf : ici je décris ce que Terraform va m’afficher comme informations en fin de traitement :
Fichier main.tf : le script Terraform en lui même :
On remarque ici plusieurs choses :
Premièrement, l’utilisation des variables précédemment définis pour le resource_group_name, la localisation et le nom (${var.}. On notera également la configuration du node pool ou on précise que l’on utilisera des VM de type D2_V2 déployés dans 3 AZ. Ce node pool est déployé en se basant sur le mécanisme Azure des VMSS.
J’ai également configuré un backend qui cible un storage account dans Azure. Cet espace de stockage héberge un conteneur : terraform-azure-kubernetes-tfstate.
Cet espace, je l’ai créé depuis le portail Azure,. Il est de type Storage V2 et est en accessibilité publique. Mon conteneur est lui en accessibilité “Objet Blob”. On peux donc accéder à une ressource précise mais il n’est pas possible de lister toutes les ressources présentes dans le conteneur.
Déploiement
Maintenant que nos fichiers sont prêt, passons au déploiement.
Il faut dans un premier temps se positionner dans le répertoire contenant nos fichiers .tf. Vous pouvez ensuite jouer un :
Terraform Init
La commande permet d’initialiser le dossier Terraform en téléchargeant les plugins nécessaires à l’exécution du script.
Je peux maintenant effectuer un :
Terraform plan -var-file="variables.tfvars"
Cette opération permet de simuler mon déploiement. Terraform m’affiche alors les éléments qu’il va créer si je lui demande d’appliquer ce script.
Ici deux éléments seront créés, un ressource group et un cluster AKS. Passons à l’exécution :
Terraform apply -var-file="variables.tfvars"
Une fois le script exécuté Terraform m’affichera en vert toutes les informations demandées en output.
Validons maintenant notre déploiement. Je me connecte au cluster et j’exécute la commande ci-dessous pour vérifier que mes nœuds sont bien sur des AZ différent 🙂
kubectl describe nodes | select-string -pattern '^Name:','zone='
Si je retourne dans mon espace de stockage je trouve mon fichier tfstate !
Grace à ce state, si je réexécute ma commande, il n’y aura pas de redéploiement de mon cluster, puisqu’il existe déjà.
En revanche, si je modifie le node_count dans mon script et que je le positionne à 10 :
Je réexecute un terraform plan et j’obtiens :
Plan: 0 to add, 1 to change, 0 to destroy.
Ici Terraform à détecté que ma ressource était bien présente (0 to Add) mais qu’il faut la modifier (1 to change).
Si je rejoue un terraform apply, mon node pool se verra appliquer la modification demandée passera automatiquement de 3 à 10 nœuds :
Terraform nous a donc permis de décrire un cluster AKS hautement disponible grâce aux Availability Zone. Nous verrons par la suite comment automatiser ce genre de script dans un pipeline Azure DevOps pour configurer du CI/CD de notre infrastructure.
A bientôt !
Thomas