Chapitre 3.6 - Deployments
Objectifs d'Apprentissage
À la fin de ce chapitre, vous serez capable de:
- Comprendre le rôle des Deployments
- Créer et gérer des Deployments
- Effectuer des rolling updates
- Gérer les rollbacks
- Scaler des Deployments
Qu'est-ce qu'un Deployment?
Un Deployment gère les ReplicaSets et offre des fonctionnalités de mise à jour déclarative, de rollback et de scaling.
Avantages:
- Gestion de version
- Rolling updates
- Rollbacks automatiques
- Scaling facile
Déclaration YAML
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-deployment
labels:
app: web
spec:
replicas: 3
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: nginx
image: nginx:1.20
ports:
- containerPort: 80
resources:
requests:
cpu: "100m"
memory: "128Mi"
limits:
cpu: "500m"
memory: "512Mi"
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
Rolling Updates
Processus
Stratégies
RollingUpdate (par défaut):
- Remplace progressivement les Pods
- Pas d'interruption de service
- Configurable (maxSurge, maxUnavailable)
Recreate:
- Supprime tous les anciens Pods
- Crée les nouveaux Pods
- Interruption de service
Mise à Jour d'un Deployment
Méthode 1: Modifier l'Image
# Mettre à jour l'image
kubectl set image deployment/web-deployment nginx=nginx:1.21
# Voir le statut de la mise à jour
kubectl rollout status deployment/web-deployment
Méthode 2: Éditer le YAML
# Éditer le Deployment
kubectl edit deployment web-deployment
# Ou modifier le fichier et appliquer
kubectl apply -f deployment.yaml
Méthode 3: Patch
# Modifier une partie spécifique
kubectl patch deployment web-deployment -p '{"spec":{"replicas":5}}'
Rollback
Voir l'Historique
# Voir l'historique des rollouts
kubectl rollout history deployment/web-deployment
# Détails d'une révision
kubectl rollout history deployment/web-deployment --revision=2
Effectuer un Rollback
# Rollback vers la version précédente
kubectl rollout undo deployment/web-deployment
# Rollback vers une révision spécifique
kubectl rollout undo deployment/web-deployment --to-revision=2
Scaling
Scaling Manuel
# Augmenter le nombre de réplicas
kubectl scale deployment web-deployment --replicas=5
# Ou éditer
kubectl edit deployment web-deployment
Scaling Automatique (HPA)
# Créer un Horizontal Pod Autoscaler
kubectl autoscale deployment web-deployment --min=2 --max=10 --cpu-percent=80
Commandes Utiles
# Voir les Deployments
kubectl get deployments
# Détails d'un Deployment
kubectl describe deployment web-deployment
# Voir les ReplicaSets créés
kubectl get replicasets
# Pause/Resume un rollout
kubectl rollout pause deployment/web-deployment
kubectl rollout resume deployment/web-deployment
Résumé
Dans ce chapitre, vous avez appris:
Deployment: Gère les ReplicaSets avec fonctionnalités avancées
Rolling Updates: Mises à jour sans interruption
Rollback: Retour à une version précédente
Scaling: Manuel ou automatique (HPA)
Gestion: kubectl set image, rollout, scale
Prochaines Étapes
Maintenant que vous maîtrisez les Deployments:
Chapitre 3.7: Stratégies de Déploiement
Chapitre 3.8: Health Checks
Troubleshooting
Problèmes Courants avec les Deployments
Problème 1: Deployment ne crée pas de Pods
Symptômes:
kubectl get deployment
# NAME READY UP-TO-DATE AVAILABLE
# my-app 0/3 0 0
Solutions:
-
Vérifier les événements:
kubectl describe deployment my-app
kubectl get events --sort-by='.lastTimestamp' -
Vérifier les ReplicaSets:
kubectl get replicasets
kubectl describe replicaset <rs-name> -
Vérifier les quotas de ressources:
kubectl describe quota
Problème 2: Rolling Update bloque
Symptômes:
- Le déploiement reste en "Updating"
- Les nouveaux pods ne démarrent pas
Solutions:
-
Vérifier les événements:
kubectl describe deployment my-app -
Vérifier les ressources disponibles:
kubectl top nodes
kubectl describe nodes -
Vérifier les health checks:
- Les probes (liveness/readiness) peuvent empêcher le déploiement
- Vérifiez les logs des pods
-
Forcer le rollback si nécessaire:
kubectl rollout undo deployment/my-app
Problème 3: Pods en CrashLoopBackOff
Symptômes:
kubectl get pods
# NAME READY STATUS RESTARTS
# my-app-xxx-123 0/1 CrashLoopBackOff 5
Solutions:
-
Vérifier les logs:
kubectl logs <pod-name>
kubectl logs <pod-name> --previous -
Vérifier la configuration:
kubectl describe pod <pod-name> -
Vérifier les ressources:
- CPU/Memory limits trop faibles
- Volumes manquants
- Secrets/ConfigMaps incorrects
Problème 4: Scaling ne fonctionne pas
Symptômes:
kubectl scale deployment my-app --replicas=5
# Mais toujours 3 pods
Solutions:
-
Vérifier les quotas:
kubectl describe quota -
Vérifier les ressources des nodes:
kubectl describe nodes -
Vérifier les contraintes:
kubectl get deployment my-app -o yaml
# Vérifier les nodeSelectors, affinity, etc.
Navigation
Chapitre précédent: Chapitre 3.5 - ReplicaSets
Chapitre suivant: Chapitre 3.7 - Stratégies de Déploiement
Retour au module: Module 3 - Pods et Déploiements
Chapitre créé le: Décembre 2024