Comment faire des déploiements canaris avec Istio et Kubernetes

introduction

Lors de l’introduction de nouvelles versions d’un service, il est souvent souhaitable de transférer un pourcentage contrôlé du trafic utilisateur vers une version plus récente du service au cours du processus de suppression progressive de l’ancienne version. Cette technique s’appelle un canary deployment.

Les opérateurs de cluster Kubernetes peuvent orchestrer https://kubernetes.io/docs/concepts/cluster-administration/manage-deployment/#canary-deployments&canments déploiements] de façon native à l’aide de https://kubernetes.io/docs/concepts/ovcepts/overview/working -with-objects / labels / [labels] et Deployments. Cette technique présente toutefois certaines limites: la distribution du trafic et les comptages de répliques sont couplés, ce qui signifie qu’en pratique, les ratios de répliques doivent être contrôlés manuellement afin de limiter le trafic à destination de la version canary. En d’autres termes, pour diriger 10% du trafic vers un déploiement canari, vous devez disposer d’un pool de dix pods, un pod recevant 10% du trafic utilisateur et les neuf autres recevant le reste.

Le déploiement avec un maillage de service Istio peut résoudre ce problème en permettant une séparation claire entre le nombre de répliques et la gestion du trafic. Le maillage Istio permet un contrôle du trafic à granularité fine qui dissocie la distribution et la gestion du trafic de la mise à l’échelle des répliques. Au lieu de contrôler manuellement les ratios de répliques, vous pouvez définir des pourcentages de trafic et des cibles, et Istio gérera le reste.

Dans ce didacticiel, vous allez créer un déploiement canari à l’aide d’Istio et de Kubernetes. Vous allez déployer deux versions d’une application de démonstration Node.js et utiliser Virtual Service et Destination Rule pour configurer le routage du trafic vers les versions les plus récentes et les plus anciennes. Ce sera un bon point de départ pour construire de futurs déploiements de canaris avec Istio.

Conditions préalables

  • Un cluster Kubernetes 1.10+ avec le contrôle d’accès basé sur les rôles (RBAC) activé. Cette configuration utilisera un cluster DigitalOcean Kubernetes, mais vous êtes libre de https://www.digitalocean.com/community/tutorials/how-to. -create-a-kubernetes-1-11-cluster-using-kubeadm-on-ubuntu-18-04 [créer un cluster à l’aide d’une autre méthode].

  • L’outil de ligne de commande + kubectl + installé sur un serveur de développement et configuré pour se connecter à votre cluster. Vous pouvez en savoir plus sur l’installation de + kubectl + dans la official documentation.

  • Docker installé sur votre serveur de développement. Si vous travaillez avec Ubuntu 18.04, suivez les étapes 1 et 2 de How To Installer et utiliser Docker sur Ubuntu 18.04; sinon, suivez la official documentation pour plus d’informations sur l’installation sur d’autres systèmes d’exploitation. Assurez-vous d’ajouter votre utilisateur non root au groupe + docker +, comme décrit à l’étape 2 du tutoriel lié.

  • Un compte Docker Hub. Pour obtenir un aperçu de la configuration, reportez-vous à la page his introduction de Docker Hub.

  • Istio est installé et configuré en suivant les instructions fournies à l’adresse Comment installer et utiliser Istio avec Kubernetes. L’addon de télémétrie Grafana doit également être activé et configuré pour un accès externe.

Étape 1 - Conditionnement de l’application

Dans le didacticiel préalable, Comment installer et utiliser Istio avec Kubernetes, vous https: // www.digitalocean.com/community/tutorials/how-to-install-and-use-istio#step-1-%E2%80%94-packaging-the-application[create une image + node-demo + Docker] pour exécuter une application d’information sur les requins et transmettre cette image à Docker Hub. Dans cette étape, vous allez créer une autre image: une version plus récente de l’application que vous utiliserez pour votre déploiement canary.

Notre application de démonstration originale a mis en évidence quelques faits intéressants sur les requins sur sa page * Shark Info *:

image: https: //assets.digitalocean.com/articles/docker_node_image/sharks.png [Page d’informations sur les requins]

Mais nous avons décidé dans notre nouvelle version de Canary de souligner quelques faits plus effrayants:

image: https: //assets.digitalocean.com/articles/istio_canary/scary_sharks.png [Page d’informations sur le requin effrayant]

Notre première étape consistera à cloner le code de cette deuxième version de notre application dans un répertoire appelé ++. A l’aide de la commande suivante, clonez le référentiel nodejs-canary-app à partir du DigitalOcean Community. Compte GitHub. Ce référentiel contient le code de la deuxième version, plus effrayante de notre application:

git clone https://github.com/do-community/nodejs-canary-app.git

Accédez au répertoire ++:

cd

Ce répertoire contient les fichiers et les dossiers de la nouvelle version de notre application d’information sur les requins, qui offre aux utilisateurs des informations sur les requins, comme l’application d’origine, mais en mettant l’accent sur des faits plus effrayants. Outre les fichiers de l’application, le répertoire contient un fichier Docker avec des instructions pour créer une image Docker avec le code de l’application. Pour plus d’informations sur les instructions du fichier Dockerfile, voir https://www.digitalocean.com/community/tutorials/how-to-build-a-node-js-application-with-docker#step-3-%E2% 80% 94-write-the-dockerfile [Étape 3 de la procédure de création d’une application Node.js avec Docker].

Pour vérifier que le code d’application et le fichier Docker fonctionnent comme prévu, vous pouvez créer et baliser l’image à l’aide de la commande +docker build + `, puis utilisez l’image pour exécuter un conteneur de démonstration. L’utilisation de l’indicateur `+ -t +

Related