TP 19 : Provider Helm de Terraform
Objectif
Section intitulée « Objectif »Gérer des releases Helm avec le provider Terraform hashicorp/helm.
Ce TP permet de voir comment :
- configurer les providers Helm et Kubernetes dans Terraform
- déployer un chart Helm via une ressource
helm_release - modifier les paramètres d’une release avec
set - utiliser un fichier
values.yamldepuis Terraform - détruire une release via
terraform destroy
Prérequis
Section intitulée « Prérequis »- Terraform installé
- Helm installé
- Un cluster Kubernetes fonctionnel (Kind voir TP 14)
- kubectl installé et configuré
terraform versionhelm versionkubectl cluster-infoPréparer l’environnement
Section intitulée « Préparer l’environnement »Créez un répertoire pour votre projet Terraform :
mkdir terraform-helm-tp && cd terraform-helm-tpConfiguration de base
Section intitulée « Configuration de base »Initialisez un fichier main.tf avec les providers Helm et Kubernetes :
terraform { required_providers { kubernetes = { source = "hashicorp/kubernetes" version = "~> 2.20" }
helm = { source = "hashicorp/helm" version = "~> 2.8" } }
required_version = ">= 1.5.0"}
provider "kubernetes" { config_path = "~/.kube/config"}
provider "helm" { kubernetes { config_path = "~/.kube/config" }}Ajouter un chart Helm
Section intitulée « Ajouter un chart Helm »Ajoutez une ressource pour déployer un chart Helm (Nginx depuis Bitnami) :
Note : Quand
repositoryest une URL,chartdoit être le nom court (nginx) et non le chemin qualifié (bitnami/nginx). Le champwaitest un booléen, pas une chaîne.
resource "helm_release" "nginx" { name = "nginx-release" repository = "https://charts.bitnami.com/bitnami" chart = "nginx" version = "18.3.5" wait = false
set { name = "replicaCount" value = "2" }
set { name = "service.type" value = "LoadBalancer" }}Initialiser et appliquer Terraform
Section intitulée « Initialiser et appliquer Terraform »terraform initterraform planterraform applyVérifiez les ressources Kubernetes créées :
kubectl get allModifier les paramètres
Section intitulée « Modifier les paramètres »Ajoutez une annotation à la ressource helm_release :
set { name = "service.annotations.prometheus\\.io/scrape" value = "\"true\""}Appliquez et vérifiez :
terraform applykubectl describe service nginx-releaseSupprimer la release
Section intitulée « Supprimer la release »terraform destroykubectl get allUtilisation d’un fichier values.yaml
Section intitulée « Utilisation d’un fichier values.yaml »Créez un fichier values.yaml :
replicaCount: 3
service: type: NodePortModifiez la ressource helm_release :
resource "helm_release" "nginx" { name = "nginx-release" chart = "nginx" namespace = "default" repository = "https://charts.bitnami.com/bitnami" version = "18.3.5" values = [file("values.yaml")]}Appliquez et vérifiez :
terraform applykubectl get podskubectl describe service nginx-releaseExport des logs
Section intitulée « Export des logs »terraform output