{"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\/lv\/blog\/administrirovanie\/canary-deployment-v-kubernetes-2-argo-rollouts","title":{"rendered":"Kan\u0101ru izvieto\u0161ana 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\">M\u0113s izmantosim k8s dzimt\u0101 Argo Rollouts izvieto\u0161anas kontroli un GitlabCI, lai uzs\u0101ktu Canary izvieto\u0161anu Kubernetes.<\/h4>\n<p>\n<img decoding=\"async\" alt=\"Kan\u0101ru izvieto\u0161ana 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\">\u0160\u012b cikla raksti<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/company\/nixys\/blog\/512766\/\">Canary Deployment Kubernetes #1: Gitlab CI<\/a><\/noindex><\/li>\n<li>(\u0160is raksts)<\/li>\n<li>Canary izvieto\u0161ana, izmantojot Istio<\/li>\n<li>Canary izvieto\u0161ana, izmantojot Jenkins-X Istio Flagger<\/li>\n<\/ul>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3 id=\"canary-deployment\">Kan\u0101ru izvieto\u0161ana<\/h3>\n<p><\/p>\n<p>Ceram, ka esat las\u012bju\u0161i <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/company\/nixys\/blog\/512766\/\">pirmo da\u013cu<\/a><\/noindex>, kur m\u0113s \u012bsi izskaidroj\u0101m, kas ir Canary izvietojumi. M\u0113s ar\u012b par\u0101d\u012bj\u0101m, k\u0101 to \u012bstenot, izmantojot standarta Kubernetes resursus.<\/p>\n<p><\/p>\n<h3 id=\"argo-rollouts\">Argo Rollouts<\/h3>\n<p><\/p>\n<p>Argo Rollouts ir Kubernetes dzimt\u0101 izvieto\u0161anas kontrole. T\u0101 pied\u0101v\u0101 CRD (piel\u0101gota resursa defin\u012bcija) Kubernetes. Pateicoties tam, m\u0113s varam izmantot jaunu objektu: <code>Rollout<\/code>, kas p\u0101rvalda blue-green un canary izvietojumus ar da\u017e\u0101d\u0101m konfigur\u0101cijas iesp\u0113j\u0101m.<\/p>\n<p><\/p>\n<blockquote><p>Argo Rollouts kontrolieris, kas izmanto piel\u0101goto resursu <code>Rollout,<\/code> \u013cauj izmantot papildu izvieto\u0161anas strat\u0113\u0123ijas, piem\u0113ram, blue-green un canary Kubernetes. Resurss <code>Rollout<\/code> pied\u0101v\u0101 funkcionalit\u0101ti, kas till\u012bdz\u012bga <code>Deployment<\/code>, tikai ar papildu izvieto\u0161anas strat\u0113\u0123ij\u0101m.<br \/>\nResursa <code>Izvietojumi<\/code> ir divas strat\u0113\u0123ijas izvieto\u0161anai: <code>RollingUpdate<\/code> un <code>Recreate<\/code>. Lai gan \u0161\u012bs strat\u0113\u0123ijas der liel\u0101kajai da\u013cai gad\u012bjumu, lielu m\u0113rogu serveru izvieto\u0161anai tiek izmantotas papildu strat\u0113\u0123ijas, piem\u0113ram, blue-green vai canary, kuras nav pieejamas Izvietojumu kontrolier\u012b. Lai izmantotu \u0161\u012bs strat\u0113\u0123ijas Kubernetes, lietot\u0101jiem bija j\u0101raksta skripti virs saviem Izvietojumiem. Argo Rollouts kontrolieris pied\u0101v\u0101 \u0161\u012bs strat\u0113\u0123ijas k\u0101 vienk\u0101r\u0161as deklarat\u012bvas konfigur\u0101cijas opcijas.<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>Past\u0101v ar\u012b Argo CI, kas nodro\u0161ina \u0113rtu t\u012bmek\u013ca saskarni, ko var izmantot kop\u0101 ar Rollouts; m\u0113s apl\u016bkosim to n\u0101kamaj\u0101 rakst\u0101.<\/p>\n<p><\/p>\n<h3 id=\"ustanovka-argo-rollouts\">Argo Rollouts uzst\u0101d\u012b\u0161ana<\/h3>\n<p><\/p>\n<h4 id=\"na-storone-servera\">Servera pus\u0113<\/h4>\n<p><\/p>\n<p><code>kubectl create namespace argo-rollouts kubectl apply -n argo-rollouts -f https:\/\/raw.githubusercontent.com\/argoproj\/argo-rollouts\/stable\/manifests\/install.yaml<\/code><\/p>\n<p><\/p>\n<p>M\u016bsu infrastrukt\u016bras repozitorij\u0101 (skat\u012bt zem\u0101k) m\u0113s jau esam pievienoju\u0161i install.yaml k\u0101 i\/k8s\/argo-rollouts\/install.yaml. T\u0101d\u0113j\u0101di GitlabCI to uzst\u0101d\u012bs klaster\u012b.<\/p>\n<p><\/p>\n<h4 id=\"na-storone-klienta-kubectl-plugin\">Klienta pus\u0113 (kubectl papla\u0161in\u0101jums)<\/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\">Parauga lietotne<\/h3>\n<p><\/p>\n<p>Laba prakse ir izveidot atsevi\u0161\u0137us repozitorijus lietotnes kodam un infrastrukt\u016brai.<\/p>\n<p><\/p>\n<h4 id=\"repozitoriy-dlya-prilozheniya\">Lietotnes repozitorijs<\/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>\u0160\u012b ir \u013coti vienk\u0101r\u0161a API, kas izveidota Python+Flask, atgrie\u017eot atbildi JSON form\u0101t\u0101. M\u0113s izveidosim pakotni, izmantojot GitlabCI, un nos\u016bt\u012bsim rezult\u0101tu Gitlab re\u0123istr\u0101. Re\u0123istr\u0101 mums ir divas da\u017e\u0101das rel\u012bzes versijas:<\/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>Vien\u012bg\u0101 at\u0161\u0137ir\u012bba starp tiem ir atgriezt\u0101 JSON fail\u0101. M\u0113s izmantojam \u0161o lietotni, lai maksim\u0101li vienk\u0101r\u0161i vizualiz\u0113tu, ar kuru versiju m\u0113s sazin\u0101mies.<\/p>\n<p><\/p>\n<h4 id=\"infrastrukturnyy-repozitoriy\">Infrastrukt\u016bru repozitorijs<\/h4>\n<p><\/p>\n<p>\u0160aj\u0101 repozitorij\u0101 m\u0113s izmantosim GitlabCI izvieto\u0161anai Kubernetes, .gitlab-ci.yml izskat\u0101s \u0161\u0101di:<\/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>Lai to palaistu pats, jums b\u016bs nepiecie\u0161ams klasteris, varat izmantot 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>Jums j\u0101izveido forka <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> un j\u0101izveido main\u012bgais <code>KUBECONFIG<\/code> GitlabCI, kas satur\u0113s konfigur\u0101ciju piek\u013cuvei <code>kubectl<\/code> j\u016bsu klasterim.<\/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\">\u0160eit<\/a><\/noindex> varat las\u012bt par to, k\u0101 ieg\u016bt piek\u013cuves datus klasterim (Gcloud).<\/p>\n<p><\/p>\n<h4 id=\"infrastrukturnyy-yaml\">Infrastrukt\u016bras Yaml<\/h4>\n<p><\/p>\n<p>Iek\u0161 infrastrukt\u016bras repozitorija mums ir 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>un 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     # Rollouts can be manually resumed by running `kubectl argo rollouts promote ROLLOUT`\n     - pause: {}\n     - setWeight: 50\n     - pause: { duration: 120 } # divas min\u016btes<\/code><\/pre>\n<p><\/p>\n<p><code>Rollout<\/code> darbojas t\u0101pat k\u0101 Deployment. Ja m\u0113s nenosak\u0101m atjaunin\u0101\u0161anas strat\u0113\u0123iju (k\u0101 canary \u0161eit), tas uzved\u012bsies k\u0101 noklus\u0113juma rolling-update Deployment.<\/p>\n<p><\/p>\n<p>M\u0113s defin\u0113jam divus so\u013cus yaml canary izvieto\u0161anai:<\/p>\n<p><\/p>\n<ol>\n<li>10% satiksmes uz canary (gaid\u012bt manu\u0101lu apstiprin\u0101jumu)<\/li>\n<li>50% satiksmes uz canary (gaid\u012bt 2 min\u016btes, p\u0113c tam turpin\u0101t uz 100%)<\/li>\n<\/ol>\n<p><\/p>\n<h3 id=\"vypolnenie-nachalnogo-deploya\">S\u0101kotn\u0113j\u0101 izvieto\u0161anas izpilde<\/h3>\n<p><\/p>\n<p>P\u0113c s\u0101kotn\u0113j\u0101s izvieto\u0161anas m\u016bsu resursi izskat\u012bsies \u0161\u0101di:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Kan\u0101ru izvieto\u0161ana Kubernetes #2: Argo Rollouts\" src=\"\/wp-content\/uploads\/2020\/07\/2f161eb3c80382bbe4f14a1fd199f1d6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<p>Un m\u0113s ieg\u016bstam atbildi tikai no pirm\u0101s versijas lietotnes:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Kan\u0101ru izvieto\u0161ana 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\">Izpild\u0101m Canary Deployment<\/h3>\n<p><\/p>\n<h4 id=\"shag-1-10-trafika\">1. solis: 10% satiksmes<\/h4>\n<p><\/p>\n<p>Lai uzs\u0101ktu canary izvieto\u0161anu, mums vienk\u0101r\u0161i j\u0101maina att\u0113la versija, k\u0101 m\u0113s parasti dar\u0101m ar izvietojumiem:<\/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>Un m\u0113s nospie\u017eam izmai\u0146as, t\u0101p\u0113c Gitlab CI veic izvieto\u0161anu un m\u0113s redzam izmai\u0146as:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Kan\u0101ru izvieto\u0161ana Kubernetes #2: Argo Rollouts\" src=\"\/wp-content\/uploads\/2020\/07\/ee069d8108e6ac211827b01390c45910.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<p>Tagad, ja m\u0113s v\u0113r\u0161amies pie pakalpojuma:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Kan\u0101ru izvieto\u0161ana Kubernetes #2: Argo Rollouts\" src=\"\/wp-content\/uploads\/2020\/07\/0be8a02c6ab6166d230818c43bbae3d1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<p>Lieliski! M\u0113s esam vid\u016b m\u016bsu canary izvieto\u0161an\u0101. M\u0113s varam redz\u0113t progresu, palaidot:<\/p>\n<p><\/p>\n<p><code>kubectl argo rollouts get rollout rollout-canary<\/code><\/p>\n<p>\n<img decoding=\"async\" alt=\"Kan\u0101ru izvieto\u0161ana 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\">2. solis: 50% satiksmes:<\/h4>\n<p><\/p>\n<p>Tagad p\u0101rejam pie n\u0101kam\u0101 so\u013ca: 50% satiksmes novirz\u012b\u0161ana. M\u0113s esam to iestat\u012bju\u0161i, lai \u0161is solis tiktu uzs\u0101kts manu\u0101li:<\/p>\n<p><\/p>\n<p><code>kubectl argo rollouts promote rollout-canary # turpin\u0101m pie 2. so\u013ca<\/code><\/p>\n<p>\n<img decoding=\"async\" alt=\"Kan\u0101ru izvieto\u0161ana Kubernetes #2: Argo Rollouts\" src=\"\/wp-content\/uploads\/2020\/07\/c856b7a60930cd5f6484ebe5a9080ffd.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<p>Un m\u016bsu lietotne atgrieza 50% atbil\u017eu no jaunaj\u0101m versij\u0101m:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Kan\u0101ru izvieto\u0161ana Kubernetes #2: Argo Rollouts\" src=\"\/wp-content\/uploads\/2020\/07\/502638210f546c5d973fc284beea1ec5.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<p>Un rollout apskats:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Kan\u0101ru izvieto\u0161ana Kubernetes #2: Argo Rollouts\" src=\"\/wp-content\/uploads\/2020\/07\/64e996d9681a88475af31b09ecf61a3f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<p>Izcili.<\/p>\n<p><\/p>\n<h4 id=\"shag-3-100-trafika\">3. solis: 100% satiksmes:<\/h4>\n<p><\/p>\n<p>M\u0113s to esam iestat\u012bju\u0161i t\u0101, ka p\u0113c 2 min\u016bt\u0113m solis ar 50% autom\u0101tiski pabeidzas un s\u0101kas solis ar 100%:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Kan\u0101ru izvieto\u0161ana Kubernetes #2: Argo Rollouts\" src=\"\/wp-content\/uploads\/2020\/07\/d7eee8f41fcbd9c186b37666ea6c10fe.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<p>Un lietotnes izvad\u012b\u0161ana:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Kan\u0101ru izvieto\u0161ana Kubernetes #2: Argo Rollouts\" src=\"\/wp-content\/uploads\/2020\/07\/f66c21e326f2bf52b29b460fc6e84957.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<p>Un rollout apskats:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Kan\u0101ru izvieto\u0161ana Kubernetes #2: Argo Rollouts\" src=\"\/wp-content\/uploads\/2020\/07\/5485ddc238b4eaad9e14d338acc116a8.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<p>Canary izvietojums pabeigts.<\/p>\n<p><\/p>\n<h4 id=\"eschyo-primery-s-argo-rollouts\">V\u0113l piem\u0113ri ar Argo Rollouts<\/h4>\n<p><\/p>\n<p>\u0160eit ir v\u0113l piem\u0113ri, piem\u0113ram, k\u0101 iestat\u012bt priek\u0161skat\u012bjumu vidi un sal\u012bdzin\u0101jumus, pamatojoties uz 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\">Video par Argo Rollouts un Argo CI<\/h4>\n<p><\/p>\n<p>Es patie\u0161\u0101m iesaku \u0161o video, kur\u0101 par\u0101d\u012bts, k\u0101 Argo Rollouts un Argo CI str\u0101d\u0101 kop\u0101:<\/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=\"Atska\u0146ot video\" 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\">Rezult\u0101ts<\/h2>\n<p><\/p>\n<p>Man \u013coti pat\u012bk ideja izmantot CRDs, kas p\u0101rvalda papildu veidu deployments vai replicasets izveidi, novirzot satiksmi utt. Darbs ar tiem norit pl\u016bsto\u0161i. T\u0101l\u0101k es grib\u0113tu izm\u0113\u0123in\u0101t integr\u0101ciju ar Argo CI.<\/p>\n<p><\/p>\n<p>Tom\u0113r, \u0161\u0137iet, tuvojas liels Argo CI un Flux CI sapl\u016b\u0161anas br\u012bdis, t\u0101p\u0113c es var\u0113tu pagaid\u012bt, kam\u0113r izn\u0101k jaun\u0101 versija: <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/argo-flux-join-forces\">Argo Flux<\/a><\/noindex>. <\/p>\n<p><\/p>\n<p>Vai jums ir pieredze ar Argo Rollouts vai Argo CI?<\/p>\n<p><\/p>\n<h2 id=\"takzhe-chitayte-drugie-stati-v-nashem-bloge\">Izlasiet ar\u012b citus rakstus m\u016bsu emu\u0101r\u0101:<\/h2>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/company\/nixys\/blog\/470568\/\">Blue-Green lietojumu izvietojumi uz Spring ar Nginx t\u012bmek\u013ca serveri<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/company\/nixys\/blog\/480072\/\">Kubernetes: k\u0101p\u0113c ir svar\u012bgi iestat\u012bt resursu p\u0101rvald\u012bbu sist\u0113m\u0101?<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/nixys\/blog\/473014\/\">Ievads Hashicorp Consul Kubernetes autoriz\u0101cij\u0101<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/company\/nixys\/blog\/481992\/\">Tekton Pipeline \u2014 Kubernetes-native pipelines<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/nixys\/blog\/473578\/\">Dinamisko modu\u013cu veido\u0161ana Nginx<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/nixys\/blog\/347526\/\">Telegram bots Redmine. K\u0101 atvieglot dz\u012bvi sev un citiem<\/a><\/noindex><\/li>\n<\/ul>\n<p>Avots: <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.5 - 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\/lv\/blog\/administrirovanie\/canary-deployment-v-kubernetes-2-argo-rollouts\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.5\" \/>\n\t\t<meta property=\"og:locale\" content=\"lv_LV\" \/>\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\/lv\/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\udd47Canary izvietojums Kubernetes #2: Argo Rollouts | ProHoster","description":"M\u0113s izmantosim k8s viet\u0113jo Argo Rollouts izvieto\u0161anas kontroli un GitlabCI.","canonical_url":"https:\/\/prohoster.info\/lv\/blog\/administrirovanie\/canary-deployment-v-kubernetes-2-argo-rollouts","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"lv_LV","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\/lv\/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\/lv\/wp-json\/wp\/v2\/posts\/90373","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/comments?post=90373"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/posts\/90373\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/media\/90374"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/media?parent=90373"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/categories?post=90373"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/tags?post=90373"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}