Aller au contenu principal
Sommaire de la formation

Deployment et rolling update

coolibra472 vues

Deployment

Un Deployment est une ressource Kubernetes qui permet de gérer le déploiement d'applications de manière déclarative. Il permet de définir et de gérer la création, la mise à jour et la mise à l'échelle des pods dans un cluster Kubernetes. Les Deployments sont souvent utilisés pour déployer et gérer des applications dans un environnement Kubernetes de manière efficace et fiable.

Schéma simplifié d'un Deployment :

  • Le "Deployment" est la ressource de niveau supérieur qui spécifie le nombre de réplicas désirés et le sélecteur pour les pods qu'il gère.

  • Le "ReplicaSet" est créé par le "Deployment" et garantit que le nombre de réplicas spécifié est maintenu. Il utilise les labels pour sélectionner les pods qu'il gère.

  • Les "Pods" sont créés par le "ReplicaSet". Ils sont les instances individuelles de l'application. Chaque pod peut contenir un ou plusieurs conteneurs. Dans cet exemple, chaque pod contient un conteneur nommé "mon-conteneur" utilisant l'image "mon-image."

Ce schéma représente un déploiement simple avec trois réplicas de l'application "caddy" Le "Deployment" gère le processus de création, de mise à jour et de mise à l'échelle des réplicas à l'aide du "ReplicaSet," tandis que les "Pods" sont les unités d'exécution réelles de l'application.

Exemple 1 : Déploiement d'une application Web simple

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-caddy-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-caddy-app
  template:
    metadata:
      labels:
        app: my-caddy-app
    spec:
      containers:
        - name: caddy-app
          image: caddy:latest
---
apiVersion: v1
kind: Service
metadata:
  name: my-caddy-app
spec:
  selector:
    app: my-caddy-app  # Sélecteur pour cibler les pods avec ces labels
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80

Cette definition déploie trois réplicas de l'application caddy web app avec la dernière version de l'image caddy:latest.

Exemple 2 : Mise à jour sans interruption de service

Lorsqu'il s'agit de mettre à jour des applications en production, il est crucial de maintenir la disponibilité sans interruption de service pour les utilisateurs. Kubernetes propose des approches pour réaliser des mises à jour sans provoquer d'interruption. Parmi celles-ci :

  • Mise à jour par Remplacement de Pods : Dans cette méthode, de nouveaux pods avec la version mise à jour sont créés en parallèle avec les anciens pods. Une fois les nouveaux pods prêts, les anciens sont retirés progressivement sans interruption de service.

  • Mise à Jour Progressive (Rolling Update) : Cette stratégie de mise à jour progressive implique la mise à jour séquentielle des pods un par un, tout en garantissant que le nombre spécifié de répliques reste disponible. Ainsi, l'application reste en ligne pendant la mise à jour.

Gestion des versions et des mises à jour avec des déploiements

Les déploiements Kubernetes sont des ressources puissantes pour gérer les versions et les mises à jour des applications. Ils vous permettent de spécifier les détails de la mise à jour, y compris le nombre de répliques à conserver en permanence et les règles de stratégie.

Voici un exemple de fichier YAML pour un déploiement avec une stratégie de mise à jour par remplacement de pods :

Supposons que vous ayez une application Web basée sur un conteneur nginx, par exemple, une application web. Vous pouvez utiliser un Deployment pour déployer cette application sur un cluster Kubernetes. Voici un exemple de définition de Deployment pour une application web :

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1  # nombre max de pod pouvant être supprimé simultanément
      maxSurge: 1  # nombre maximal de pods supplémentaires qui sont autorisés à être créés pendant une mise à jour
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx-container
          image: nginx:1.18

 

Test de rolling update

kubectl set image deployment/nginx-deployment nginx-container=nginx:1.19

# List deployments:
kubectl get deploy

# Update a deployment with a manifest file:
kubectl apply -f test.yaml

# Scale a deployment “test” to 3 replicas:
kubectl scale deploy/test --replicas=3

# Watch update status for deployment “test”:
kubectl rollout status deploy/test

# Pause deployment on “test”:
kubectl rollout pause deploy/test

# Resume deployment on “test”:
kubectl rollout resume deploy/test

# View rollout history on “test”:
kubectl rollout history deploy/test

# Undo most recent update on “test”:
kubectl rollout undo deploy/test

# Rollback to specific revision on “test”:
kubectl rollout undo deploy/test --to-revision=1

Les mises à jour progressives impliquent de déployer graduellement les nouvelles versions de l'application tout en surveillant attentivement les métriques et les performances. Cette approche permet de détecter rapidement tout problème lié à la nouvelle version et de réagir en conséquence.

 

Commentaires

Connectez-vous pour rejoindre la discussion.

Aucun commentaire pour le moment.