Aller au contenu principal

Chapitre 12.3 - Gestion des Environnements

Objectifs d'Apprentissage

À la fin de ce chapitre, vous serez capable de:

  • Comprendre les stratégies de gestion d'environnements
  • Utiliser des namespaces pour isoler les environnements
  • Gérer des clusters séparés
  • Configurer des valeurs par environnement
  • Implémenter la promotion entre environnements
  • Appliquer les bonnes pratiques

Introduction

La gestion des environnements permet de séparer le développement, le staging, et la production pour une meilleure stabilité et sécurité.


Stratégies

1. Namespaces par Environnement

Avantages:

  • Simple à gérer
  • Partage des ressources
  • Économique

Inconvénients:

  • Isolation limitée
  • Risque de conflits

2. Clusters Séparés

Avantages:

  • Isolation complète
  • Sécurité maximale
  • Pas de conflits

Inconvénients:

  • Plus complexe
  • Coût plus élevé

Namespaces par Environnement

Création

# Créer les namespaces
kubectl create namespace dev
kubectl create namespace staging
kubectl create namespace production

# Ajouter des labels
kubectl label namespace dev environment=development
kubectl label namespace staging environment=staging
kubectl label namespace production environment=production

Déploiement

# Déployer dans chaque environnement
kubectl apply -f deployment.yaml -n dev
kubectl apply -f deployment.yaml -n staging
kubectl apply -f deployment.yaml -n production

Resource Quotas par Environnement

# dev-quota.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
name: dev-quota
namespace: dev
spec:
hard:
requests.cpu: "5"
requests.memory: 10Gi
limits.cpu: "10"
limits.memory: 20Gi

Clusters Séparés

Architecture

Avantages:

  • Isolation complète
  • Sécurité maximale
  • Pas de risque de contamination

Configuration par Environnement

Values Files

# values-dev.yaml
replicaCount: 1
image:
tag: "dev"
resources:
requests:
cpu: 100m
memory: 128Mi

# values-staging.yaml
replicaCount: 2
image:
tag: "staging"
resources:
requests:
cpu: 250m
memory: 256Mi

# values-prod.yaml
replicaCount: 5
image:
tag: "1.0.0"
resources:
requests:
cpu: 500m
memory: 512Mi

Déploiement avec Helm

# Dev
helm install my-app ./my-chart -f values-dev.yaml -n dev

# Staging
helm install my-app ./my-chart -f values-staging.yaml -n staging

# Production
helm install my-app ./my-chart -f values-prod.yaml -n production

Promotion entre Environnements

Processus

Automatisation

# GitHub Actions workflow
name: Promote to Production
on:
workflow_dispatch:
inputs:
version:
description: 'Version to promote'
required: true

jobs:
promote:
runs-on: ubuntu-latest
steps:
- name: Deploy to Production
run: |
helm upgrade my-app ./my-chart \
-f values-prod.yaml \
--set image.tag=${{ github.event.inputs.version }} \
-n production

Bonnes Pratiques

1. Séparation Claire

Maintenir une séparation claire entre les environnements.

2. Configuration Externalisée

Utiliser ConfigMaps et Secrets pour la configuration.

3. Tests Automatiques

Exécuter des tests dans chaque environnement.

4. Documentation

Documenter les différences entre environnements.

5. Accès Restreint

Limiter l'accès à la production avec RBAC.


Résumé

Dans ce chapitre, vous avez appris:

Stratégies: Namespaces ou clusters séparés
Namespaces: Simple, économique, isolation limitée
Clusters: Isolation complète, plus complexe
Configuration: Values files par environnement
Promotion: Processus de promotion entre environnements
Bonnes pratiques: Séparation, configuration externalisée, tests


Prochaines Étapes

Lab 12.4: Projet Final Complet
Récapitulatif du Cours


Chapitre créé le: Décembre 2024