Skip to content

Déploiements et Scaling

Table des Matières

  1. Déploiements (Deployments)
  2. Définition et Structure
  3. Cas d'Usage
  4. Scaling des Applications
  5. ReplicaSets
  6. Horizontal Pod Autoscaling (HPA)
  7. Stratégies de Déploiement
  8. Rolling Update
  9. Canary
  10. Blue-Green
  11. Commandes Utiles

Déploiements

Définition et Structure

Un Deployment Kubernetes permet de gérer des Pods et ReplicaSets en déclarant un état désiré. Kubernetes maintient automatiquement cet état.

Exemple de Deployment :

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.23.3

Points clés : - Les labels (metadata, selector, template) doivent être cohérents - replicas définit le nombre de pods souhaités - template décrit les pods à créer

Cas d'Usage

  • Mise à l'échelle : Augmenter/diminuer le nombre de pods
  • Historique : Gestion des versions et rollback
  • Mises à jour : Déploiement sans interruption
  • Auto-réparation : Redémarrage automatique des pods défaillants

Scaling

ReplicaSets

Un ReplicaSet maintient un nombre stable de pods identiques.

Exemple :

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: frontend
  labels:
    app: guestbook
    tier: frontend
spec:
  replicas: 3
  selector:
    matchLabels:
      tier: frontend
  template:
    metadata:
      labels:
        tier: frontend
    spec:
      containers:
      - name: php-redis
        image: gcr.io/google_samples/gb-frontend:v3

Préférer les Deployments qui offrent plus de fonctionnalités

Horizontal Pod Autoscaling

L'HPA ajuste automatiquement le nombre de pods basé sur l'utilisation des ressources.

Exemple HPA :

apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: frontend-scaler
spec:
  scaleTargetRef:
    kind: ReplicaSet
    name: frontend
  minReplicas: 3
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50

Prérequis : - Serveur de métriques installé (Metrics Server) - Demandes de ressources définies dans les pods


Stratégies de Déploiement

Rolling Update (Par Défaut)

Mise à jour progressive pod par pod pour éviter les interruptions.

Commande :

kubectl set image deployment/nginx-deployment nginx=nginx:1.23.3

Canary

Déploie la nouvelle version sur un sous-ensemble de pods (ex: 20%) pour tester avant déploiement complet.

Blue-Green

  • Deux environnements complets (blue = actuel, green = nouveau)
  • Basculement instantané du trafic une fois la nouvelle version validée

Commandes Utiles

Commande Description
kubectl apply -f deployment.yml Créer/mettre à jour un déploiement
kubectl set image deployment/<name> <container>=<image> Mettre à jour l'image d'un conteneur
kubectl scale deployment/<name> --replicas=<n> Modifier le nombre de réplicas
kubectl rollout status deployment/<name> Suivre l'état du déploiement
kubectl rollout history deployment/<name> Voir l'historique des versions
kubectl rollout undo deployment/<name> --to-revision=<n> Revenir à une version antérieure
kubectl rollout restart deployment/<name> Redémarrer tous les pods

Bonnes Pratiques : - Toujours utiliser des Deployments plutôt que des ReplicaSets directement - Définir des probes (liveness/readiness) pour une meilleure gestion des pods - Utiliser des stratégies de déploiement adaptées à votre application