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