pipeline ci/cd kubernetes sur azure aks avec helm et github actions

Dans ce guide technique, nous allons mettre en place un pipeline CI/CD complet pour déployer automatiquement une application Node.js sur un cluster Azure Kubernetes Service (AKS) à l’aide de Helm et GitHub Actions. Les CTO de startups ou responsables DevOps y trouveront des snippets, des commandes CLI et des conseils pour optimiser performance et sécurité.

1. prérequis et contexte

  • Un repository GitHub contenant votre application (par exemple une API Node.js).
  • Azure CLI (version ≥2.40) et kubectl (v1.24+) installés.
  • Un cluster AKS opérationnel (SLA 99,95%).
  • Helm 3 pour gérer les releases.

2. configuration du cluster AKS

  1. Connexion à Azure et récupération des credentials du cluster :
    az login
    az account set --subscription "MonSubscription"
    az aks get-credentials --resource-group rg-aks --name cluster-aks
  2. Vérification du contexte Kubernetes :
    kubectl config current-context
    # doit retourner "cluster-aks"
  3. Création d’un namespace dédié :
    kubectl create namespace ci-cd

3. définition du chart Helm

Placez votre chart dans charts/myapp/ :

charts/
└── myapp/
    ├── Chart.yaml
    ├── values.yaml
    └── templates/
        ├── deployment.yaml
        └── service.yaml

Extrait de values.yaml :

replicaCount: 2

image:
  repository: myregistry.azurecr.io/myapp
  tag: "v{{ env.GITHUB_SHA }}"

service:
  type: LoadBalancer
  port: 80

4. création du workflow GitHub Actions

Placez ce fichier dans .github/workflows/ci-cd.yaml :

name: CI/CD AKS

on:
  push:
    branches: [main]

jobs:
  build-and-push:
    runs-on: ubuntu-latest
    steps:
      - name: checkout code
        uses: actions/checkout@v3

      - name: setup Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '16'

      - name: install dependencies
        run: npm ci

      - name: run tests
        run: npm test

      - name: build Docker image
        uses: docker/build-push-action@v3
        with:
          context: .
          push: true
          tags: |
            myregistry.azurecr.io/myapp:latest
            myregistry.azurecr.io/myapp:${{ github.sha }}

  deploy:
    needs: build-and-push
    runs-on: ubuntu-latest
    steps:
      - name: download kubeconfig
        uses: azure/aks-set-context@v1
        with:
          creds: ${{ secrets.AZURE_CREDENTIALS }}
          cluster-name: cluster-aks
          resource-group: rg-aks

      - name: setup helm
        uses: azure/setup-helm@v1

      - name: helm upgrade
        run: |
          helm repo add stable https://charts.helm.sh/stable
          helm upgrade myapp charts/myapp \
            --namespace ci-cd \
            --install \
            --set image.tag=${{ github.sha }}

5. bonnes pratiques et optimisations

  • Sécurité des secrets : stockez AZURE_CREDENTIALS dans GitHub Secrets (JSON généré par az ad sp create-for-rbac).
  • Rollback automatique : ajoutez --wait --timeout 5m à la commande Helm pour échouer proprement en cas de déploiement invalide.
  • Monitoring : intégrez Prometheus + Grafana pour suivre l’usage CPU/RAM (helm install prometheus).
  • Performance : utilisez l’autoscaling AKS (kubectl autoscale deployment myapp --cpu-percent=60 --min=2 --max=10).

6. métriques et sécurité

IndicateurObjectif
Durée CI (build + tests)< 5 min
MTTR déploiement< 3 min
Vulnérabilités conteneurs0 high (scan clairance)

stratégies de sécurité

  • RBAC Kubernetes strict.
  • Pod Security Policies en mode restrictive (baseline ou hardened).
  • Scan d’images Docker via trivy en amont.

liens utiles

conclusion

Ce pipeline CI/CD Kubernetes sur AKS avec Helm et GitHub Actions réduit le time-to-market, automatise vos déploiements et améliore la fiabilité de vos mises en production. En appliquant ces bonnes pratiques, vous gagnez en agilité et en sécurité.

Vous avez un projet à déployer ou besoin d’un audit de votre pipeline ? Contactez-nous discrètement pour en discuter.