déployer un SaaS Node.js sur Kubernetes avec Terraform et Helm : guide pas à pas
18/07/2025
Dans ce tutoriel, vous apprendrez à automatiser le déploiement de votre application SaaS Node.js sur un cluster Kubernetes en utilisant Terraform pour l’infrastructure et Helm pour la gestion des releases. Résultat : un workflow reproductible, évolutif et versionné, idéal pour les startups et PME tech en quête de robustesse.
prérequis et architecture cible
- Kubernetes v1.26+ (hébergé ou on-premise)
- Terraform v1.7+ avec provider kube
- Helm v3+
- Une application Node.js packagée en image Docker (Docker, Node.js)
- Cluster RKE2 / GKE / EKS / AKS compatible
étape 1 : définir l’infrastructure Kubernetes avec Terraform
Dans main.tf
, on crée le namespace, puis un rôle de service account pour Helm :
// main.tf
terraform {
required_providers {
kubernetes = { source = "hashicorp/kubernetes", version = ">= 2.15.0" }
}
}
provider "kubernetes" {
config_path = "~/.kube/config"
}
resource "kubernetes_namespace" "saas_app" {
metadata { name = "saas-app" }
}
resource "kubernetes_service_account" "helm" {
metadata {
name = "tiller"
namespace = kubernetes_namespace.saas_app.metadata[0].name
}
}
Commandes :
terraform init # initialise le backend
terraform plan # vérifie la planification
terraform apply # crée les ressources Kubernetes
Erreur fréquente : Error: Cannot create namespace
→ vérifiez la version du provider et vos droits RBAC sur le cluster.
étape 2 : packager l’application en chart Helm
Générez la structure de chart :
helm create saas-nodejs
Personnalisez values.yaml
:
replicaCount: 2
image:
repository: yourrepo/saas-nodejs
tag: v1.2.0
pullPolicy: IfNotPresent
service:
type: ClusterIP
port: 3000
resources:
limits:
cpu: 200m
memory: 256Mi
requests:
cpu: 100m
memory: 128Mi
étape 3 : déployer la release avec Helm
- Ajouter un repo (exemple Bitnami) :
helm repo add bitnami https://charts.bitnami.com/bitnami helm repo update
- Installer votre chart :
helm install saas-nodejs ./saas-nodejs \ --namespace saas-app \ --create-namespace
- Vérifier le déploiement :
kubectl -n saas-app get all
Tip perf : activez l’HorizontalPodAutoscaler
(Kubernetes v1.23+) pour adapter dynamiquement le nombre de pods selon la charge.
configurer l’autoscaling (HPA)
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: saas-nodejs-hpa
namespace: saas-app
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: saas-nodejs
minReplicas: 2
maxReplicas: 5
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 60
bonnes pratiques et sécurité
- Versionnez vos chart et modules Terraform dans Git (
git tag
+ CI/CD). - Stockez l’état Terraform dans un backend distant (S3 + DynamoDB ou Terraform Cloud).
- Scan de sécurité : intégrez
kubectl-trivy
ousnyk
pour vos images Docker. - RBAC : limitez les permissions des ServiceAccounts pour éviter la montée en privilèges.
conclusion
En combinant Terraform et Helm, vous obtenez un processus de déploiement automatisé, reproductible et sécurisé pour votre SaaS Node.js sur Kubernetes. Vous gagnez en agilité et en fiabilité tout en maîtrisant vos mises à jour et vos rollbacks.
Envie d’aller plus loin dans l’industrialisation de votre infrastructure ? Contactez nos experts DevOps pour un accompagnement sur mesure.