Chapitre 12.1 - Déploiement en Production
Objectifs d'Apprentissage
À la fin de ce chapitre, vous serez capable de:
- Comprendre les exigences de production
- Implémenter la haute disponibilité
- Configurer la sécurité en production
- Gérer les ressources efficacement
- Mettre en place le monitoring et les alertes
- Appliquer les meilleures pratiques
Introduction
Déployer en production nécessite une préparation rigoureuse pour assurer la disponibilité, la sécurité et la performance.
Haute Disponibilité
Multi-Node Clusters
Recommandations:
- Minimum 3 nodes pour le Control Plane
- Minimum 3 worker nodes
- Distribution sur plusieurs zones de disponibilité
Pod Disruption Budgets
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: app-pdb
spec:
minAvailable: 2
selector:
matchLabels:
app: my-app
Résultat: Garantit qu'au moins 2 Pods sont disponibles pendant les mises à jour.
Sécurité
RBAC Configuré
# Limiter les permissions
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: app-role
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list"]
Network Policies
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny-all
spec:
podSelector: {}
policyTypes:
- Ingress
- Egress
Secrets Chiffrés
# Activer le chiffrement au repos
apiVersion: apiserver.config.k8s.io/v1
kind: EncryptionConfiguration
resources:
- resources:
- secrets
providers:
- aescbc:
keys:
- name: key1
secret: <base64-encoded-secret>
Images Scannées
Utiliser des outils de scanning d'images (Trivy, Clair) avant déploiement.
Gestion des Ressources
Requests et Limits
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
template:
spec:
containers:
- name: app
image: my-app:1.0
resources:
requests:
cpu: 250m
memory: 512Mi
limits:
cpu: 500m
memory: 1Gi
Resource Quotas
apiVersion: v1
kind: ResourceQuota
metadata:
name: namespace-quota
namespace: production
spec:
hard:
requests.cpu: "10"
requests.memory: 20Gi
limits.cpu: "20"
limits.memory: 40Gi
persistentvolumeclaims: "10"
Limit Ranges
apiVersion: v1
kind: LimitRange
metadata:
name: namespace-limits
namespace: production
spec:
limits:
- default:
cpu: "500m"
memory: "1Gi"
defaultRequest:
cpu: "250m"
memory: "512Mi"
type: Container
Monitoring et Alertes
Métriques Essentielles
- Utilisation CPU/Mémoire
- Latence des requêtes
- Taux d'erreurs
- Disponibilité des services
Alertes Critiques
- Pods en CrashLoop
- Utilisation CPU > 90%
- Utilisation Mémoire > 90%
- Services indisponibles
Backup et Disaster Recovery
Backup d'etcd
# Backup
ETCDCTL_API=3 etcdctl snapshot save /backup/etcd-snapshot.db \
--endpoints=https://127.0.0.1:2379 \
--cacert=/etc/etcd/ca.crt \
--cert=/etc/etcd/server.crt \
--key=/etc/etcd/server.key
# Restore
ETCDCTL_API=3 etcdctl snapshot restore /backup/etcd-snapshot.db
Backup des Volumes
Utiliser des snapshots de volumes (EBS, Azure Disk, etc.).
Bonnes Pratiques
1. Multi-Environnements
Séparer dev, staging, production avec des namespaces ou clusters.
2. Versioning
Utiliser des tags d'images spécifiques, pas latest.
3. Health Checks
Configurer liveness, readiness, et startup probes.
4. Rolling Updates
Utiliser des stratégies de déploiement sans interruption.
5. Documentation
Documenter les procédures de déploiement et de rollback.
Résumé
Dans ce chapitre, vous avez appris:
Haute disponibilité: Multi-nodes, Pod Disruption Budgets
Sécurité: RBAC, Network Policies, secrets chiffrés, images scannées
Ressources: Requests, limits, quotas, limit ranges
Monitoring: Métriques essentielles, alertes critiques
Backup: etcd, volumes, disaster recovery
Bonnes pratiques: Multi-environnements, versioning, health checks
Prochaines Étapes
Chapitre 12.2: CI/CD
Chapitre 12.3: Environnements
Lab 12.1: Configuration de Resource Management
Chapitre créé le: Décembre 2024