Aller au contenu

TP 19 : Provider Helm de Terraform

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.yaml depuis Terraform
  • détruire une release via terraform destroy
  • Terraform installé
  • Helm installé
  • Un cluster Kubernetes fonctionnel (Kind voir TP 14)
  • kubectl installé et configuré
Fenêtre de terminal
terraform version
helm version
kubectl cluster-info

Créez un répertoire pour votre projet Terraform :

Fenêtre de terminal
mkdir terraform-helm-tp && cd terraform-helm-tp

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"
}
}

Ajoutez une ressource pour déployer un chart Helm (Nginx depuis Bitnami) :

Note : Quand repository est une URL, chart doit être le nom court (nginx) et non le chemin qualifié (bitnami/nginx). Le champ wait est 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"
}
}
Fenêtre de terminal
terraform init
terraform plan
terraform apply

Vérifiez les ressources Kubernetes créées :

Fenêtre de terminal
kubectl get all

Ajoutez une annotation à la ressource helm_release :

set {
name = "service.annotations.prometheus\\.io/scrape"
value = "\"true\""
}

Appliquez et vérifiez :

Fenêtre de terminal
terraform apply
kubectl describe service nginx-release
Fenêtre de terminal
terraform destroy
kubectl get all

Créez un fichier values.yaml :

replicaCount: 3
service:
type: NodePort

Modifiez 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 :

Fenêtre de terminal
terraform apply
kubectl get pods
kubectl describe service nginx-release
Fenêtre de terminal
terraform output