Aller au contenu principal

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:

  1. Vérifier les événements:

    kubectl describe deployment my-app
    kubectl get events --sort-by='.lastTimestamp'
  2. Vérifier les ReplicaSets:

    kubectl get replicasets
    kubectl describe replicaset <rs-name>
  3. 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:

  1. Vérifier les événements:

    kubectl describe deployment my-app
  2. Vérifier les ressources disponibles:

    kubectl top nodes
    kubectl describe nodes
  3. Vérifier les health checks:

    • Les probes (liveness/readiness) peuvent empêcher le déploiement
    • Vérifiez les logs des pods
  4. 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:

  1. Vérifier les logs:

    kubectl logs <pod-name>
    kubectl logs <pod-name> --previous
  2. Vérifier la configuration:

    kubectl describe pod <pod-name>
  3. 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:

  1. Vérifier les quotas:

    kubectl describe quota
  2. Vérifier les ressources des nodes:

    kubectl describe nodes
  3. Vérifier les contraintes:

    kubectl get deployment my-app -o yaml
    # Vérifier les nodeSelectors, affinity, etc.

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