Provisionner avec Terraform un cluster AKS avec Availability Zone

Aujourd’hui nous allons voir comment déployer un AKS avec Terraform, ce cluster sera hautement disponible grâce aux Availability Zone.

terraform aks - Provisionner avec Terraform un cluster AKS avec 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.

1 2 - Provisionner avec Terraform un cluster AKS avec Availability Zone

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.

5 - Provisionner avec Terraform un cluster AKS avec Availability Zone

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 :

4 - Provisionner avec Terraform un cluster AKS avec Availability Zone

Le fichier output.tf : ici je décris ce que Terraform va m’afficher comme informations en fin de traitement :

6 - Provisionner avec Terraform un cluster AKS avec Availability Zone

Fichier main.tf : le script Terraform en lui même :

2 1 - Provisionner avec Terraform un cluster AKS avec Availability Zone
3 - Provisionner avec Terraform un cluster AKS avec Availability Zone

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.

3 1 - Provisionner avec Terraform un cluster AKS avec Availability Zone

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.

7 - Provisionner avec Terraform un cluster AKS avec Availability Zone

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.

8 750x1024 - Provisionner avec Terraform un cluster AKS avec Availability Zone
9 - Provisionner avec Terraform un cluster AKS avec Availability Zone

Ici deux éléments seront créés, un ressource group et un cluster AKS. Passons à l’exécution :

Terraform apply -var-file="variables.tfvars"

10 781x1024 - Provisionner avec Terraform un cluster AKS avec Availability Zone
11 1024x420 - Provisionner avec Terraform un cluster AKS avec Availability Zone

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='

12 - Provisionner avec Terraform un cluster AKS avec Availability Zone

Si je retourne dans mon espace de stockage je trouve mon fichier tfstate !

1 3 1024x225 - Provisionner avec Terraform un cluster AKS avec Availability Zone
2 2 1024x443 - Provisionner avec Terraform un cluster AKS avec Availability Zone

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 :

4 1 - Provisionner avec Terraform un cluster AKS avec Availability Zone

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 :

5 1 - Provisionner avec Terraform un cluster AKS avec Availability Zone

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

Laisser un commentaire

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