GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Comment effectuer des déploiements Canary sur Kubernetes

Présentation

Tester une nouvelle fonctionnalité ou une mise à niveau en production est un processus stressant. Vous souhaitez déployer des modifications fréquemment, mais sans affecter l'expérience utilisateur. Pour minimiser les temps d'arrêt pendant cette phase, configurez des déploiements Canary pour rationaliser la transition.

Vous pouvez utiliser les déploiements Canary sur n'importe quelle infrastructure. C'est donc l'une des stratégies de déploiement de Kubernetes.

Découvrez ce que sont les déploiements Canary, comment ils fonctionnent et comment effectuer un déploiement Canary sur Kubernetes.

Prérequis

  • Accès à une ligne de commande/terminal
  • Docker installé sur le système
  • Kubernetes ou Minikube
  • Un outil de ligne de commande kubectl entièrement configuré sur votre machine locale

Qu'est-ce qu'un déploiement Canary ?

Un déploiement Canary est une version mise à niveau d'un déploiement existant, avec tout le code d'application et les dépendances requis. Il est utilisé pour tester de nouvelles fonctionnalités et mises à niveau afin de voir comment elles gèrent l'environnement de production.

Lorsque vous ajoutez le déploiement Canary à un cluster Kubernetes, il est géré par un service via des sélecteurs et libellés . Le service achemine le trafic vers les pods qui ont l'étiquette spécifiée. Cela vous permet d'ajouter ou de supprimer facilement des déploiements.

La quantité de trafic que le canari reçoit correspond au nombre de pods qu'il fait tourner. Dans la plupart des cas, vous commencez par acheminer un plus petit pourcentage de trafic vers le canari et augmentez le nombre au fil du temps.

Une fois les deux déploiements configurés, vous surveillez le comportement Canary pour voir si des problèmes surviennent. Une fois que vous êtes satisfait de la façon dont il gère les demandes, vous pouvez mettre à niveau tous les déploiements vers la dernière version.

Configuration du déploiement Canary sur Kubernetes

Les étapes ci-dessous vous montrent comment configurer un déploiement Canary. Pour cet article, nous avons créé un cluster Kubernetes simple de pods Nginx avec une page HTML statique de base de deux phrases. Les versions du déploiement varient en fonction du contenu qu'elles affichent sur la page Web.

Le processus de configuration de votre déploiement Canary diffère selon l'application que vous exécutez.

Étape 1 :Extraire l'image Docker

La première étape consiste à extraire ou à créer l'image des conteneurs de votre cluster Kubernetes. Puisque nous construisons des conteneurs Nginx dans cet exemple, nous utilisons l'image Nginx disponible sur Docker Hub.

1. Téléchargez l'image avec :

docker pull nginx

2. Vérifiez que vous l'avez en listant toutes les images locales :

docker image ls

Étape 2 :Créer le déploiement Kubernetes

1. Créez la définition de déploiement à l'aide d'un fichier yaml. Utilisez un éditeur de texte de votre choix et donnez un nom au fichier. Nous allons nommer le fichier nginx-deployment.yaml et créez-le avec Nano :

nano nginx-deployment.yaml

2. Ajoutez le contenu suivant au fichier :

apiVersion: apps/v1
kind: Deployment
metadata:
 name: nginx
spec:
 selector:
  matchLabels:
   app: nginx
 replicas: 3
 template:
  metadata:
   labels:
    app: nginx
    version: "1.0"
  spec:
   containers:
    - name: nginx
      image: nginx:alpine
      resources:
      limits:
       memory: "128Mi"
       cpu: "50m"
      ports:
      - containerPort: 80
      volumeMounts:
      - mountPath: /usr/share/nginx/html
        name: index.html
      volumes:
      - name: index.html
        hostPath:
          path: /Users/sofija/Documents/nginx/v1

Nous avons créé 3 répliques de pods Nginx pour le cluster Kubernetes. Tous les pods portent le libellé version: "1.0 ". De plus, ils ont un volume hôte contenant le index.html monté sur le conteneur. L'exemple de fichier HTML composé de :

<html>
<h1>Hello World!</h1>
<p>This is version 1</p>
</html>

3. Enregistrez et quittez le fichier.

4. Créez le déploiement en exécutant :

k apply -f nginx-deployment.yaml

5. Vérifiez si vous avez réussi à déployer les pods avec :

k get pods -o wide

La sortie doit afficher trois pods Nginx en cours d'exécution .

Étape 3 :Créer le service

L'étape suivante consiste à créer une définition de service pour le cluster Kubernetes. Le service acheminera les demandes vers les pods spécifiés.

1. Créez un nouveau yaml fichier avec :

nano nginx-deployment.service.yaml

2. Ajoutez ensuite le contenu suivant :

apiVersion: v1
kind: Service
metadata:
 name: nginx-service
spec:
 type: LoadBalancer
selector:
 app: nginx
 version: "1.0"
ports:
- port: 8888
  targetPort: 80

Le fichier yaml spécifie le type de service – LoadBalancer . Il demande au service d'équilibrer les charges de travail entre les pods avec les étiquettes app: nginx et version: "1.0" . Le pod doit avoir les deux étiquettes pour faire partie du service.

3. Enregistrez et quittez le fichier de service.

4. Maintenant, créez le service :

kubectl apply -f nginx-deployment.service.yaml

Étape 4 :Vérifier la première version du cluster

Pour vérifier que le service est en cours d'exécution, ouvrez un navigateur Web et accédez à l'adresse IP et au numéro de port définis dans le fichier de service.

Pour voir l'adresse IP externe du service, utilisez la commande :

kubectl get service

Si vous exécutez Kubernetes localement , utilisez localhost comme IP.

Étant donné que l'exemple de cluster que nous avons créé s'exécute localement sur le port 8888, l'URL est :

http://localhost:8888

Le navigateur doit afficher un Hello World message de la version 1 .

Étape 5 :Créer un déploiement Canary

Avec la version 1 de l'application en place, vous déployez la version 2 , le déploiement canari.

1. Commencez par créer le yaml fichier pour le déploiement Canary. Exécutez la commande :

nano nginx-canary-deployment.yaml

2. Ajoutez le contenu suivant au fichier :

apiVersion: apps/v1
kind: Deployment
metadata:
 name: nginx-canary-deployment
spec:
 selector:
  matchLabels:
   app: nginx
 replicas: 3
 template:
  metadata:
   labels:
    app: nginx
    version: "2.0"
  spec:
   containers:
    - name: nginx
      image: nginx:alpine
      resources:
      limits:
       memory: "128Mi"
       cpu: "50m"
      ports:
      - containerPort: 80
      volumeMounts:
      - mountPath: /usr/share/nginx/html
        name: index.html
      volumes:
      - name: index.html
        hostPath:
          path: /Users/sofija/Documents/nginx/v2

Le contenu du fichier de déploiement Canary diffère par trois paramètres importants :

  • Le nom dans les métadonnées est nginx-canary-deployment .
  • Il porte le libellé version: “2.0” .
  • Il est lié à un fichier html index.html qui se compose de :
<html>
<h1>Hello World!</h1>
<p>This is version 2</p>
</html>

3. Enregistrez et quittez le fichier.

4. Créez le déploiement Canary avec la commande :

k apply -f nginx-canary-deployment.yaml

5. Vérifiez que vous avez correctement déployé les trois pods supplémentaires :

k get pods -o wide

La sortie doit afficher les pods de déploiement Nginx Canary , ainsi que les pods Nginx d'origine .

Étape 6 :Exécuter le déploiement Canary

Ouvrez un navigateur Web et accédez à la même adresse IP qu'à l'étape 4. Vous remarquerez qu'il n'y a aucun changement sur la page Web. En effet, le fichier de service est configuré pour équilibrer la charge uniquement des pods avec l'étiquette version: "1.0" .

Pour tester les pods mis à jour, vous devez modifier le fichier de service et rediriger une partie du trafic vers la version: “2.0” .

1. Pour ce faire, ouvrez le yaml fichier avec :

nano nginx-deployment.service.yaml

2. Recherchez et supprimez la ligne version: "1.0" . Le fichier doit inclure les éléments suivants :

apiVersion: v1
kind: Service
metadata:
 name: nginx-service
spec:
 type: LoadBalancer
selector:
 app: nginx
ports:
- port: 8888
  targetPort: 80

3. Enregistrez les modifications et quittez le fichier.

4. Créez le service mis à jour avec la commande :

k apply -f nginx-deployment.service.yml

5. Le trafic est désormais réparti entre les pods version 1 et version 2. Si vous actualisez la page Web plusieurs fois, vous voyez des résultats différents selon l'endroit où le service redirige votre demande.

Étape 7 :Surveillez le comportement des canaris

Avec les deux déploiements en cours d'exécution, surveillez le comportement du nouveau déploiement. En fonction des résultats, vous pouvez annuler le déploiement ou effectuer une mise à niveau vers la version la plus récente.

Annuler le déploiement de Canary

Si vous remarquez que Canary ne fonctionne pas comme prévu, vous pouvez annuler le déploiement et supprimer les pods mis à niveau avec :

kubectl delete deployment.apps/nginx-canary-deployment

Le service continue d'équilibrer la charge du trafic vers les pods initiaux (version 1).

Déployer le déploiement mis à niveau

Si vous concluez que le déploiement Canary fonctionne comme prévu, vous pouvez acheminer tout le trafic entrant vers la version mise à niveau. Il existe trois façons de procéder :

1. Mettez à niveau la première version en modifiant l'image Docker et en créant un nouveau déploiement. Ensuite, supprimez les canaris avec :

kubectl delete deployment.apps/nginx-canary-deployment

2. Vous pouvez conserver les pods mis à niveau et supprimer ceux avec la version 1 étiquette :

kubectl delete deployment.apps/nginx

3. Alternativement, vous pouvez même modifier le service.yaml fichier et ajoutez la version spécificateur au selector étiqueter. Cela indique à l'équilibreur de charge de n'acheminer le trafic que vers la version 2 gousses.


Ubuntu
  1. Comment configurer un cluster Kubernetes avec Rancher

  2. Comment déployer Elasticsearch sur Kubernetes

  3. Comment déployer une instance WordPress sur Kubernetes

  4. Comment supprimer un déploiement Kubernetes [Quick K8s Tips]

  5. Comment supprimer un service dans Kubernetes

Comment déployer RabbitMQ sur Kubernetes

Comment créer un déploiement dans Kubernetes

Comment installer Kubernetes sur Ubuntu 20.04

Comment installer Kubernetes minikube sur Ubuntu 20.04

Comment installer Kubernetes sur Ubuntu 18.04 LTS

Comment installer Kubernetes sur Ubuntu 20.04 LTS