Dans un contexte où l’agilité et la fiabilité de l’infrastructure sont primordiales, automatiser la création et la gestion d’un cluster Kubernetes sur Google Cloud (GKE) avec Terraform vous fait gagner en rapidité et en robustesse. Ce guide s’adresse aux équipes DevOps et aux développeurs Node.js qui souhaitent passer d’un déploiement manuel à une infrastructure as code reproductible.

provisionner un cluster kubernetes gke avec terraform pour des microservices node.js

Prérequis

  • Un compte Google Cloud Platform avec rôle Owner ou droit terraform.admin.
  • Terraform v1.5+ installé (terraform version).
  • gcloud SDK et kubectl configurés (gcloud init).
  • Docker pour packager vos microservices Docker.
  • Un projet Git contenant votre application Node.js.

Étape 1 : écrire la configuration Terraform

Créez un dossier infra/ et un fichier main.tf :

# main.tf
provider "google" {
  project = var.project_id
  region  = var.region
}

resource "google_container_cluster" "gke_cluster" {
  name     = "cluster-nodejs"
  location = var.zone

  initial_node_count = 3

  node_config {
    machine_type = "e2-medium"
    oauth_scopes = ["https://www.googleapis.com/auth/cloud-platform"]
  }
}

output "kubeconfig" {
  value = google_container_cluster.gke_cluster.endpoint
}

Définissez les variables dans variables.tf et un fichier terraform.tfvars pour project_id, region et zone.

Étape 2 : initialiser et déployer

$ cd infra
$ terraform init
$ terraform plan -out plan.tfplan
$ terraform apply plan.tfplan

Ce processus crée votre cluster GKE en moins de 5 minutes. Vous pouvez récupérer les identifiants :

$ gcloud container clusters get-credentials cluster-nodejs --zone europe-west1-b

Étape 3 : déployer vos microservices Node.js

Dans votre repo app/, ajoutez un Dockerfile et un manifeste Kubernetes :

# app/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: ms-api
spec:
  replicas: 2
  selector:
    matchLabels:
      app: ms-api
  template:
    metadata:
      labels:
        app: ms-api
    spec:
      containers:
      - name: ms-api
        image: gcr.io/${PROJECT_ID}/ms-api:latest
        ports:
        - containerPort: 3000

Build et push de l’image :

$ docker build -t gcr.io/${PROJECT_ID}/ms-api:latest ./app
$ docker push gcr.io/${PROJECT_ID}/ms-api:latest
$ kubectl apply -f app/deployment.yaml

Étape 4 : configurer l’auto-scaling et la surveillance

# Horizontal Pod Autoscaler
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: ms-api-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: ms-api
  minReplicas: 2
  maxReplicas: 5
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 60

Installez le metrics-server sur GKE pour activer l’HPA.

Bonnes pratiques

  • État Terraform à distance : utilisez un backend gcs pour locker l’état.
  • Least privilege : créez un service account dédié à Terraform.
  • Versioning : définissez required_version et provider locked.
  • Gestion des secrets : stockez vos clés dans Secret Manager ou Vault.
  • Rollback : conservez les plans Terraform et suivez les logs GKE pour diagnostics.
  • Sécurité réseau : segmentez vos pods via NetworkPolicies.
  • Optimisation des coûts : passez sur des nœuds preemptibles pour les environnements non critiques.

Conclusion

Avec cette approche Infrastructure as Code, vous obtenez un cluster Kubernetes standardisé, facile à reproduire et à faire évoluer. Les microservices Node.js se déploient sans effort, et l’auto-scaling vous garantit de répondre dynamiquement à la charge.

Envie d’aller plus loin ? Découvrez nos offres d’augmentation d’effectif tech ou obtenez un devis gratuit pour votre projet.