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