{"id":90373,"date":"2020-07-31T13:42:12","date_gmt":"2020-07-31T11:42:12","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/canary-deployment-v-kubernetes-2-argo-rollouts"},"modified":"2020-07-31T13:42:12","modified_gmt":"2020-07-31T11:42:12","slug":"canary-deployment-v-kubernetes-2-argo-rollouts","status":"publish","type":"post","link":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/canary-deployment-v-kubernetes-2-argo-rollouts","title":{"rendered":"D\u00e9ploiement Canary dans Kubernetes #2 : Argo Rollouts","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h4 id=\"my-budem-ispolzovat-k8s-nativnyy-kontroller-razvertyvaniya-argo-rollouts-i-gitlabci-dlya-zapuska-canary-deploya-v-kubernetes\">Nous allons utiliser le contr\u00f4leur de d\u00e9ploiement natif k8s Argo Rollouts et GitlabCI pour ex\u00e9cuter un d\u00e9ploiement Canary dans Kubernetes<\/h4>\n<p>\n<img decoding=\"async\" alt=\"D\u00e9ploiement Canary dans Kubernetes #2 : Argo Rollouts\" src=\"\/wp-content\/uploads\/2020\/07\/0748c0dc9a71e59b8a42f39481d365da.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><em><noindex><a rel=\"nofollow\" href=\"https:\/\/unsplash.com\/photos\/V41PulGL1z0\">https:\/\/unsplash.com\/photos\/V41PulGL1z0<\/a><\/noindex><\/em><\/p>\n<p><\/p>\n<h3 id=\"stati-etogo-cikla\">Articles de ce cycle<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/company\/nixys\/blog\/512766\/\">D\u00e9ploiement Canary dans Kubernetes #1 : Gitlab CI<\/a><\/noindex><\/li>\n<li>(Cet article)<\/li>\n<li>D\u00e9ploiement Canary avec Istio<\/li>\n<li>D\u00e9ploiement Canary avec Jenkins-X Istio Flagger<\/li>\n<\/ul>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3 id=\"canary-deployment\">D\u00e9ploiement Canary<\/h3>\n<p><\/p>\n<p>Nous esp\u00e9rons que vous avez lu <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/company\/nixys\/blog\/512766\/\">la premi\u00e8re partie<\/a><\/noindex>, o\u00f9 nous avons bri\u00e8vement expliqu\u00e9 ce qu'est un d\u00e9ploiement Canary. Nous avons \u00e9galement montr\u00e9 comment le mettre en \u0153uvre en utilisant les ressources standard de Kubernetes.<\/p>\n<p><\/p>\n<h3 id=\"argo-rollouts\">Argo Rollouts<\/h3>\n<p><\/p>\n<p>Argo Rollouts est un contr\u00f4leur de d\u00e9ploiement natif de Kubernetes. Il fournit une CRD (Custom Resource Definition) pour Kubernetes. Gr\u00e2ce \u00e0 celui-ci, nous pouvons utiliser une nouvelle entit\u00e9 : <code>Rollout<\/code>, qui g\u00e8re les d\u00e9ploiements blue-green et canary avec diverses options de configuration.<\/p>\n<p><\/p>\n<blockquote><p>Le contr\u00f4leur Argo Rollouts, utilis\u00e9 par la ressource personnalis\u00e9e <code>Rollout,<\/code> permet d'utiliser des strat\u00e9gies de d\u00e9ploiement suppl\u00e9mentaires, comme blue-green et canary pour Kubernetes. La ressource <code>Rollout<\/code> fournit des fonctionnalit\u00e9s \u00e9quivalentes <code>D\u00e9ploiement<\/code>, mais avec des strat\u00e9gies de d\u00e9ploiement suppl\u00e9mentaires.<br \/>\nRessource <code>D\u00e9ploiements<\/code> poss\u00e8de deux strat\u00e9gies de d\u00e9ploiement : <code>RollingUpdate<\/code> et <code>Recreate<\/code>. Bien que ces strat\u00e9gies conviennent \u00e0 la plupart des cas, des d\u00e9ploiements dans des serveurs \u00e0 tr\u00e8s grande \u00e9chelle n\u00e9cessitent des strat\u00e9gies suppl\u00e9mentaires, telles que blue-green ou canary, qui ne sont pas pr\u00e9sentes dans le contr\u00f4leur Deployment. Pour utiliser ces strat\u00e9gies dans Kubernetes, les utilisateurs devaient \u00e9crire des scripts au-dessus de leurs Deployments. Le contr\u00f4leur Argo Rollouts fournit ces strat\u00e9gies sous forme de param\u00e8tres d\u00e9claratifs simples et configurables.<br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/argoproj.github.io\/argo-rollouts\">https:\/\/argoproj.github.io\/argo-rollouts<\/a><\/noindex><\/p><\/blockquote>\n<p>Il existe \u00e9galement Argo CI, qui fournit une interface web conviviale \u00e0 utiliser avec Rollouts, nous y jetterons un coup d'\u0153il dans l'article suivant.<\/p>\n<p><\/p>\n<h3 id=\"ustanovka-argo-rollouts\">Installation d'Argo Rollouts<\/h3>\n<p><\/p>\n<h4 id=\"na-storone-servera\">C\u00f4t\u00e9 serveur<\/h4>\n<p><\/p>\n<p><code>kubectl create namespace argo-rolloutskubectl apply -n argo-rollouts -f https:\/\/raw.githubusercontent.com\/argoproj\/argo-rollouts\/stable\/manifests\/install.yaml<\/code><\/p>\n<p><\/p>\n<p>Dans notre d\u00e9p\u00f4t d'infrastructure (voir ci-dessous), nous avons d\u00e9j\u00e0 ajout\u00e9 install.yaml comme i\/k8s\/argo-rollouts\/install.yaml. Ainsi, GitlabCI l'installera dans le cluster.<\/p>\n<p><\/p>\n<h4 id=\"na-storone-klienta-kubectl-plugin\">Du c\u00f4t\u00e9 client (plugin kubectl)<\/h4>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/argoproj.github.io\/argo-rollouts\/features\/kubectl-plugin\">https:\/\/argoproj.github.io\/argo-rollouts\/features\/kubectl-plugin<br \/>\n<\/a><\/noindex><\/p>\n<p><\/p>\n<h3 id=\"prilozhenie-dlya-primera\">Exemple d'application<\/h3>\n<p><\/p>\n<p>Il est bon de pratiquer d'avoir des d\u00e9p\u00f4ts s\u00e9par\u00e9s pour le code de l'application et pour l'infrastructure.<\/p>\n<p><\/p>\n<h4 id=\"repozitoriy-dlya-prilozheniya\">D\u00e9p\u00f4t pour l'application<\/h4>\n<p><\/p>\n<h4 id=\"kim-wuestkamp--k8s-deployment-example-apphttpsgitlabcomwuestkampk8s-deployment-example-app\"><noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/wuestkamp\/k8s-deployment-example-app\">Kim Wuestkamp \/ k8s-deployment-example-app<\/a><\/noindex><\/h4>\n<p><\/p>\n<p>C'est une API tr\u00e8s simple en Python+Flask, renvoyant une r\u00e9ponse au format JSON. Nous allons construire le paquet, en utilisant GitlabCI et pousser le r\u00e9sultat dans le registre Gitlab. Dans le registre, nous avons deux versions diff\u00e9rentes des releases :<\/p>\n<p><\/p>\n<ul>\n<li>wuestkamp\/k8s-deployment-example-app:v1<\/li>\n<li>wuestkamp\/k8s-deployment-example-app:v2<\/li>\n<\/ul>\n<p><\/p>\n<p>La seule diff\u00e9rence entre eux est le fichier JSON retourn\u00e9. Nous utilisons cette application pour visualiser le plus simplement possible avec quelle version nous interagissons.<\/p>\n<p><\/p>\n<h4 id=\"infrastrukturnyy-repozitoriy\">D\u00e9p\u00f4t d'infrastructure<\/h4>\n<p><\/p>\n<p>Dans ce d\u00e9p\u00f4t, nous allons utiliser GitlabCI pour le d\u00e9ploiement dans Kubernetes, le fichier .gitlab-ci.yml ressemble \u00e0 ceci :<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">image: traherom\/kustomize-dockerbefore_script:\n   - printenv\n   - kubectl versionstages:\n - deploydeploy test:\n   stage: deploy\n   before_script:\n     - echo $KUBECONFIG\n   script:\n     - kubectl get all\n     - kubectl apply -f i\/k8s    only:\n     - master<\/code><\/pre>\n<p><\/p>\n<p>Pour le lancer par vous-m\u00eame, vous aurez besoin d'un cluster, vous pouvez utiliser Gcloud :<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">gcloud container clusters create canary --num-nodes 3 --zone europe-west3-b\ngcloud compute firewall-rules create incoming-80 --allow tcp:80<\/code><\/pre>\n<p><\/p>\n<p>Vous devez faire un fork <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/wuestkamp\/k8s-deployment-example-canary-infrastructure\">https:\/\/gitlab.com\/wuestkamp\/k8s-deployment-example-canary-infrastructure<\/a><\/noindex> et cr\u00e9er une variable <code>KUBECONFIG<\/code> dans GitlabCI, qui contiendra la configuration d'acc\u00e8s <code>kubectl<\/code> \u00e0 votre cluster.<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/faun\/manually-connect-to-your-kubernetes-cluster-from-the-outside-d852346a7f0a\">Ici<\/a><\/noindex> Vous pouvez lire comment obtenir des informations d'identification pour le cluster (Gcloud).<\/p>\n<p><\/p>\n<h4 id=\"infrastrukturnyy-yaml\">Yaml d'infrastructure<\/h4>\n<p><\/p>\n<p>\u00c0 l'int\u00e9rieur du d\u00e9p\u00f4t d'infrastructure, nous avons un service :<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">apiVersion: v1\nkind: Service\nmetadata:\n labels:\n   id: rollout-canary\n name: app\nspec:\n ports:\n - port: 80\n   protocol: TCP\n   targetPort: 5000\n selector:\n   id: app\n type: LoadBalancer<\/code><\/pre>\n<p><\/p>\n<p>et rollout.yaml :<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">apiVersion: argoproj.io\/v1alpha1\nkind: Rollout\nmetadata:\n name: rollout-canary\nspec:\n replicas: 10\n revisionHistoryLimit: 2\n selector:\n   matchLabels:\n     id: rollout-canary\n template:\n   metadata:\n     labels:\n       id: rollout-canary\n   spec:\n     containers:\n     - name: rollouts-demo\n       image: registry.gitlab.com\/wuestkamp\/k8s-deployment-example-app:v1\n       imagePullPolicy: Always\n strategy:\n   canary:\n     steps:\n     - setWeight: 10\n     # Les d\u00e9ploiements peuvent \u00eatre repris manuellement en ex\u00e9cutant `kubectl argo rollouts promote ROLLOUT`\n     - pause: {}\n     - setWeight: 50\n     - pause: { duration: 120 } # deux minutes<\/code><\/pre>\n<p><\/p>\n<p><code>Rollout<\/code> fonctionne de la m\u00eame mani\u00e8re que Deployment. Si nous ne sp\u00e9cifions pas de strat\u00e9gie de mise \u00e0 jour (comme canary ici), il se comportera comme un d\u00e9ploiement de mise \u00e0 jour continue par d\u00e9faut.<\/p>\n<p><\/p>\n<p>Nous d\u00e9finissons deux \u00e9tapes dans le yaml pour le d\u00e9ploiement canary :<\/p>\n<p><\/p>\n<ol>\n<li>10 % du trafic sur canary (attendre l'OK manuel)<\/li>\n<li>50 % du trafic sur canary (attendre 2 minutes puis continuer jusqu'\u00e0 100 %)<\/li>\n<\/ol>\n<p><\/p>\n<h3 id=\"vypolnenie-nachalnogo-deploya\">Ex\u00e9cution du d\u00e9ploiement initial<\/h3>\n<p><\/p>\n<p>Apr\u00e8s le d\u00e9ploiement initial, nos ressources ressembleront \u00e0 ceci :<\/p>\n<p>\n<img decoding=\"async\" alt=\"D\u00e9ploiement Canary dans Kubernetes #2 : Argo Rollouts\" src=\"\/wp-content\/uploads\/2020\/07\/2f161eb3c80382bbe4f14a1fd199f1d6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<p>Et nous obtenons une r\u00e9ponse uniquement de la premi\u00e8re version de l'application :<\/p>\n<p>\n<img decoding=\"async\" alt=\"D\u00e9ploiement Canary dans Kubernetes #2 : Argo Rollouts\" src=\"\/wp-content\/uploads\/2020\/07\/117526d90b2fb5c765bb13f18230e9d5.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3 id=\"vypolnyaem-canary-deployment\">Ex\u00e9cuter le d\u00e9ploiement canary<\/h3>\n<p><\/p>\n<h4 id=\"shag-1-10-trafika\">\u00c9tape 1 : 10 % du trafic<\/h4>\n<p><\/p>\n<p>Pour commencer le d\u00e9ploiement canary, il nous suffit de changer la version de l'image, comme nous le faisons habituellement avec les d\u00e9ploiements :<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">apiVersion: argoproj.io\/v1alpha1\nkind: Rollout\nmetadata:\n name: rollout-canary\nspec:\n...\n template:\n   metadata:\n     labels:\n       id: rollout-canary\n   spec:\n     containers:\n     - name: rollouts-demo\n       image: registry.gitlab.com\/wuestkamp\/k8s-deployment-example-app:v2\n...<\/code><\/pre>\n<p><\/p>\n<p>Et nous poussons les modifications, donc Gitlab CI effectue le d\u00e9ploiement et nous voyons les changements :<\/p>\n<p>\n<img decoding=\"async\" alt=\"D\u00e9ploiement Canary dans Kubernetes #2 : Argo Rollouts\" src=\"\/wp-content\/uploads\/2020\/07\/ee069d8108e6ac211827b01390c45910.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<p>Maintenant, si nous acc\u00e9dons au service :<\/p>\n<p>\n<img decoding=\"async\" alt=\"D\u00e9ploiement Canary dans Kubernetes #2 : Argo Rollouts\" src=\"\/wp-content\/uploads\/2020\/07\/0be8a02c6ab6166d230818c43bbae3d1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<p>Super ! Nous sommes en plein milieu de notre d\u00e9ploiement canary. Nous pouvons voir les progr\u00e8s en ex\u00e9cutant :<\/p>\n<p><\/p>\n<p><code>kubectl argo rollouts get rollout rollout-canary<\/code><\/p>\n<p>\n<img decoding=\"async\" alt=\"D\u00e9ploiement Canary dans Kubernetes #2 : Argo Rollouts\" src=\"\/wp-content\/uploads\/2020\/07\/5b8a9fae9f92520b62cfcb5dd12fb7ba.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h4 id=\"shag-2-50-trafika\">\u00c9tape 2 : 50 % du trafic :<\/h4>\n<p><\/p>\n<p>Passons maintenant \u00e0 l'\u00e9tape suivante : rediriger 50 % du trafic. Nous avons configur\u00e9 cette \u00e9tape pour qu'elle soit lanc\u00e9e manuellement :<\/p>\n<p><\/p>\n<p><code>kubectl argo rollouts promote rollout-canary # passer \u00e0 l'\u00e9tape 2<\/code><\/p>\n<p>\n<img decoding=\"async\" alt=\"D\u00e9ploiement Canary dans Kubernetes #2 : Argo Rollouts\" src=\"\/wp-content\/uploads\/2020\/07\/c856b7a60930cd5f6484ebe5a9080ffd.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<p>Et notre application a renvoy\u00e9 50 % de r\u00e9ponses des nouvelles versions :<\/p>\n<p>\n<img decoding=\"async\" alt=\"D\u00e9ploiement Canary dans Kubernetes #2 : Argo Rollouts\" src=\"\/wp-content\/uploads\/2020\/07\/502638210f546c5d973fc284beea1ec5.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<p>Et un aper\u00e7u du d\u00e9ploiement :<\/p>\n<p>\n<img decoding=\"async\" alt=\"D\u00e9ploiement Canary dans Kubernetes #2 : Argo Rollouts\" src=\"\/wp-content\/uploads\/2020\/07\/64e996d9681a88475af31b09ecf61a3f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<p>Parfait.<\/p>\n<p><\/p>\n<h4 id=\"shag-3-100-trafika\">\u00c9tape 3 : 100 % du trafic :<\/h4>\n<p><\/p>\n<p>Nous avons configur\u00e9 pour qu'apr\u00e8s 2 minutes, l'\u00e9tape avec 50 % se termine automatiquement et lance l'\u00e9tape avec 100 % :<\/p>\n<p>\n<img decoding=\"async\" alt=\"D\u00e9ploiement Canary dans Kubernetes #2 : Argo Rollouts\" src=\"\/wp-content\/uploads\/2020\/07\/d7eee8f41fcbd9c186b37666ea6c10fe.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<p>Et la sortie de l'application :<\/p>\n<p>\n<img decoding=\"async\" alt=\"D\u00e9ploiement Canary dans Kubernetes #2 : Argo Rollouts\" src=\"\/wp-content\/uploads\/2020\/07\/f66c21e326f2bf52b29b460fc6e84957.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<p>Et un aper\u00e7u du d\u00e9ploiement :<\/p>\n<p>\n<img decoding=\"async\" alt=\"D\u00e9ploiement Canary dans Kubernetes #2 : Argo Rollouts\" src=\"\/wp-content\/uploads\/2020\/07\/5485ddc238b4eaad9e14d338acc116a8.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<p>Le d\u00e9ploiement Canary est termin\u00e9.<\/p>\n<p><\/p>\n<h4 id=\"eschyo-primery-s-argo-rollouts\">Encore des exemples avec Argo Rollouts<\/h4>\n<p><\/p>\n<p>Voici encore des exemples, comme comment configurer un aper\u00e7u de l'environnement et des comparaisons bas\u00e9es sur le canary :<\/p>\n<p><\/p>\n<p><u><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/argoproj\/argo-rollouts\/tree\/master\/examples\">https:\/\/github.com\/argoproj\/argo-rollouts\/tree\/master\/examples<\/a><\/noindex><\/u><\/p>\n<p><\/p>\n<h4 id=\"video-ob-argo-rollouts-i-argo-ci\">Vid\u00e9o sur Argo Rollouts et Argo CI<\/h4>\n<p><\/p>\n<p>Je recommande vraiment cette vid\u00e9o, elle montre comment Argo Rollouts et Argo CI fonctionnent ensemble :<\/p>\n<p>\n<center><div class=\"youtube-placeholder\" data-id=\"yeVkTTO9nOA\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/yeVkTTO9nOA\/hqdefault.jpg\" alt=\"Lire la vid\u00e9o\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<h2 id=\"itog\">Conclusion<\/h2>\n<p><\/p>\n<p>J'aime beaucoup l'id\u00e9e d'utiliser des CRDs qui g\u00e8rent la cr\u00e9ation de types de d\u00e9ploiements suppl\u00e9mentaires ou de replicasets, redirigent le trafic, etc. Travailler avec eux se fait en douceur. Ensuite, je voudrais tester l'int\u00e9gration avec Argo CI.<\/p>\n<p><\/p>\n<p>Cependant, apparemment, une grande fusion entre Argo CI et Flux CI est \u00e0 venir, donc je pourrais attendre la sortie de la nouvelle version : <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/argo-flux-join-forces\">Argo Flux<\/a><\/noindex>. <\/p>\n<p><\/p>\n<p>Avez-vous eu de l'exp\u00e9rience avec Argo Rollouts ou Argo CI ?<\/p>\n<p><\/p>\n<h2 id=\"takzhe-chitayte-drugie-stati-v-nashem-bloge\">Lisez aussi d'autres articles sur notre blog :<\/h2>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/company\/nixys\/blog\/470568\/\">D\u00e9ploiement Blue-Green d'applications sur Spring avec le serveur web Nginx<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/company\/nixys\/blog\/480072\/\">Kubernetes : pourquoi est-il si important de configurer la gestion des ressources syst\u00e8me ?<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/nixys\/blog\/473014\/\">Introduction \u00e0 l'autorisation Kubernetes de Hashicorp Consul<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/company\/nixys\/blog\/481992\/\">Tekton Pipeline \u2014 pipelines natifs Kubernetes<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/nixys\/blog\/473578\/\">Assemblage de modules dynamiques pour Nginx<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/nixys\/blog\/347526\/\">Bot Telegram pour Redmine. Comment simplifier la vie pour soi et pour les autres<\/a><\/noindex><\/li>\n<\/ul>\n<p>Source : <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/nixys\/blog\/513118\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c k8s-\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f Argo Rollouts \u0438 GitlabCI \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 Canary \u0434\u0435\u043f\u043b\u043e\u044f \u0432 Kubernetes https:\/\/unsplash.com\/photos\/V41PulGL1z0 \u0421\u0442\u0430\u0442\u044c\u0438 \u044d\u0442\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430 Canary Deployment \u0432 Kubernetes #1: Gitlab CI (\u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f) Canary Deployment using Istio Canary Deployment using Jenkins-X Istio Flagger Canary Deployment \u041d\u0430\u0434\u0435\u0435\u043c\u0441\u044f, \u0447\u0442\u043e \u0412\u044b \u0447\u0438\u0442\u0430\u043b\u0438 \u043f\u0435\u0440\u0432\u0443\u044e \u0447\u0430\u0441\u0442\u044c, \u0433\u0434\u0435 \u043c\u044b \u043a\u0440\u0430\u0442\u043a\u043e \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u043b\u0438 \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 Canary Deployments. [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":90374,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-90373","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c k8s-\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f Argo Rollouts \u0438 GitlabCI.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/canary-deployment-v-kubernetes-2-argo-rollouts\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Canary Deployment \u0432 Kubernetes #2: Argo Rollouts | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c k8s-\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f Argo Rollouts \u0438 GitlabCI.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/canary-deployment-v-kubernetes-2-argo-rollouts\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-07-31T11:42:12+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-07-31T11:42:12+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47D\u00e9ploiement Canary dans Kubernetes #2 : Argo Rollouts | ProHoster","description":"Nous allons utiliser le contr\u00f4leur de d\u00e9ploiement natif k8s Argo Rollouts et GitlabCI.","canonical_url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/canary-deployment-v-kubernetes-2-argo-rollouts","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"fr_FR","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Canary Deployment \u0432 Kubernetes #2: Argo Rollouts | ProHoster","og:description":"\u041c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c k8s-\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f Argo Rollouts \u0438 GitlabCI.","og:url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/canary-deployment-v-kubernetes-2-argo-rollouts","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-07-31T11:42:12+00:00","article:modified_time":"2020-07-31T11:42:12+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"90373","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 12:53:48","updated":"2022-09-30 17:28:16","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/90373","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=90373"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/90373\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media\/90374"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=90373"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=90373"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=90373"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}