{"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\/sq\/blog\/administrirovanie\/canary-deployment-v-kubernetes-2-argo-rollouts","title":{"rendered":"Canary Deployment n\u00eb 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\">Ne p\u00ebrdorim kontrolluesin Argo Rollouts t\u00eb natyrsh\u00ebm p\u00ebr k8s dhe GitlabCI p\u00ebr t\u00eb realizuar nj\u00eb Canary deployment n\u00eb Kubernetes<\/h4>\n<p>\n<img decoding=\"async\" alt=\"Canary Deployment n\u00eb 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\">Artikujt e k\u00ebtij cikli<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/company\/nixys\/blog\/512766\/\">Canary Deployment n\u00eb Kubernetes #1: Gitlab CI<\/a><\/noindex><\/li>\n<li>(Ky artikull)<\/li>\n<li>Canary Deployment duke p\u00ebrdorur Istio<\/li>\n<li>Canary Deployment duke p\u00ebrdorur Jenkins-X Istio Flagger<\/li>\n<\/ul>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3 id=\"canary-deployment\">Canary Deployment<\/h3>\n<p><\/p>\n<p>Shpresojm\u00eb q\u00eb keni lexuar <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/company\/nixys\/blog\/512766\/\">pjes\u00ebn e par\u00eb<\/a><\/noindex>, ku ne shpjeguam shkurtimisht se \u00e7far\u00eb jan\u00eb Canary Deployments. Ne gjithashtu treguam se si ta realizoni duke p\u00ebrdorur burime standarde t\u00eb Kubernetes.<\/p>\n<p><\/p>\n<h3 id=\"argo-rollouts\">Argo Rollouts<\/h3>\n<p><\/p>\n<p>Argo Rollouts \u00ebsht\u00eb nj\u00eb kontrollues i natyrsh\u00ebm p\u00ebr Kubernetes. Ai ofron CRD (Definicioni i Burimeve t\u00eb Personalizuara) p\u00ebr Kubernetes. Fal\u00eb tij, ne mund t\u00eb p\u00ebrdorim nj\u00eb entitet t\u00eb ri: <code>Rollout<\/code>, i cili menaxhon blue-green dhe canary deployments me mund\u00ebsi t\u00eb ndryshme konfigurimi.<\/p>\n<p><\/p>\n<blockquote><p>Kontrolluesi Argo Rollouts, q\u00eb p\u00ebrdor burimin e personalizuar <code>Rollout,<\/code> lejon p\u00ebrdorimin e strategjive t\u00eb tjera t\u00eb deployimit, si blue-green dhe canary p\u00ebr Kubernetes. Burimi <code>Rollout<\/code> ofron funksionalitet t\u00eb barabart\u00eb <code>Deployment<\/code>, vet\u00ebm me strategji t\u00eb tjera t\u00eb deployimit.<br \/>\nBurimi <code>Deployments<\/code> ka dy strategji p\u00ebr deployim: <code>RollingUpdate<\/code> dhe <code>Recreate<\/code>. Megjith\u00ebse k\u00ebto strategji jan\u00eb t\u00eb p\u00ebrshtatshme p\u00ebr shumic\u00ebn e rasteve, p\u00ebr deploy-n n\u00eb servera n\u00eb nj\u00eb shkall\u00eb shum\u00eb t\u00eb madhe p\u00ebrdoren strategji shtes\u00eb, si blue-green ose canary, t\u00eb cilat nuk jan\u00eb n\u00eb kontrollorin e Deployment. P\u00ebr t\u00eb p\u00ebrdorur k\u00ebto strategji n\u00eb Kubernetes, p\u00ebrdoruesit ishin t\u00eb detyruar t\u00eb shkruanin skripte mbi Deployments e tyre. Kontrollori Argo Rollouts ofron k\u00ebto strategji n\u00eb forma parametrash t\u00eb thjesht\u00eb dhe t\u00eb deklaruesh\u00ebm.<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>Ekziston gjithashtu Argo CI, i cili ofron nj\u00eb nd\u00ebrfaqe t\u00eb leht\u00eb p\u00ebr t'u p\u00ebrdorur s\u00eb bashku me Rollouts, p\u00ebr t\u00eb cilin do t\u00eb flasim n\u00eb artikullin e ardhsh\u00ebm.<\/p>\n<p><\/p>\n<h3 id=\"ustanovka-argo-rollouts\">Instalimi i Argo Rollouts<\/h3>\n<p><\/p>\n<h4 id=\"na-storone-servera\">Nga ana e serverit<\/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>N\u00eb repin ton\u00eb t\u00eb infrastruktur\u00ebs (shih m\u00eb posht\u00eb) ne tashm\u00eb e kemi shtuar install.yaml si i\/k8s\/argo-rollouts\/install.yaml. K\u00ebshtu, GitlabCI do ta instaloj\u00eb n\u00eb klaster.<\/p>\n<p><\/p>\n<h4 id=\"na-storone-klienta-kubectl-plugin\">Nga ana e klientit (kubectl plugin)<\/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\">Aplikacioni p\u00ebr shembull<\/h3>\n<p><\/p>\n<p>Nj\u00eb praktik\u00eb e mir\u00eb \u00ebsht\u00eb t\u00eb kesh repozita t\u00eb ndara p\u00ebr kodin e aplikacionit dhe p\u00ebr infrastruktur\u00ebn.<\/p>\n<p><\/p>\n<h4 id=\"repozitoriy-dlya-prilozheniya\">Repoja p\u00ebr aplikacionin<\/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>Ky \u00ebsht\u00eb nj\u00eb API shum\u00eb e thjesht\u00eb n\u00eb Python+Flask, e cila kthen nj\u00eb p\u00ebrgjigje n\u00eb formatin JSON. Ne do t\u00eb krijojm\u00eb nj\u00eb paket\u00eb duke p\u00ebrdorur GitlabCI dhe do ta d\u00ebrgojm\u00eb rezultatin n\u00eb Gitlab Registry. N\u00eb regjistrin ton\u00eb kemi dy versione t\u00eb ndryshme t\u00eb l\u00ebshimeve:<\/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>Dallimi i vet\u00ebm midis tyre \u00ebsht\u00eb skedari JSON i kthyer. Ne p\u00ebrdorim k\u00ebt\u00eb aplikacion p\u00ebr t\u00eb vizualizuar n\u00eb m\u00ebnyr\u00eb tejet t\u00eb thjesht\u00eb se me cil\u00ebn version po komunikojm\u00eb.<\/p>\n<p><\/p>\n<h4 id=\"infrastrukturnyy-repozitoriy\">Repozitori infrastrukturor<\/h4>\n<p><\/p>\n<p>N\u00eb k\u00ebt\u00eb repozitor, ne do t\u00eb p\u00ebrdorim GitlabCI p\u00ebr t\u00eb realizuar deploy n\u00eb Kubernetes, .gitlab-ci.yml \u00ebsht\u00eb si m\u00eb posht\u00eb:<\/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>P\u00ebr ta ekzekutuar vet\u00eb, do t'ju nevojitet nj\u00eb klastri, mund t\u00eb p\u00ebrdorni 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>Ju nevojitet t\u00eb b\u00ebni nj\u00eb 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> dhe t\u00eb krijoni nj\u00eb variab\u00ebl <code>KUBECONFIG<\/code> n\u00eb GitlabCI, e cila do t\u00eb p\u00ebrmbaj\u00eb konfigurimin p\u00ebr qasje <code>kubectl<\/code> n\u00eb klastri tuaj.<\/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\">K\u00ebtu<\/a><\/noindex> mund t\u00eb lexoni rreth m\u00ebnyr\u00ebs si t\u00eb merrni kredencialet p\u00ebr klastrin (Gcloud).<\/p>\n<p><\/p>\n<h4 id=\"infrastrukturnyy-yaml\">Yaml infrastrukturor<\/h4>\n<p><\/p>\n<p>Brenda repozitorit infrastrukturor kemi sh\u00ebrbimin:<\/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>dhe 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 } # dy minuta<\/code><\/pre>\n<p><\/p>\n<p><code>Rollout<\/code> funksionon po ashtu si Deployment. N\u00ebse ne nuk caktuar nj\u00eb strategji p\u00ebr p\u00ebrdit\u00ebsim (si canary k\u00ebtu) ai do t\u00eb sillet si default rolling-update Deployment.<\/p>\n<p><\/p>\n<p>Ne p\u00ebrcaktojm\u00eb dy hapa n\u00eb yaml p\u00ebr canary deployment:<\/p>\n<p><\/p>\n<ol>\n<li>10% e trafikut n\u00eb canary (pritni p\u00ebr OK manual)<\/li>\n<li>50% e trafikut n\u00eb canary (pritni 2 minuta dhe pastaj vazhdoni n\u00eb 100%)<\/li>\n<\/ol>\n<p><\/p>\n<h3 id=\"vypolnenie-nachalnogo-deploya\">Kryerja e deploy-it fillestar<\/h3>\n<p><\/p>\n<p>Pas deploy-it fillestar, burimet tona do t\u00eb duket k\u00ebshtu:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Canary Deployment n\u00eb Kubernetes #2: Argo Rollouts\" src=\"\/wp-content\/uploads\/2020\/07\/2f161eb3c80382bbe4f14a1fd199f1d6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<p>Dhe marrim p\u00ebrgjigje vet\u00ebm nga versioni i par\u00eb t\u00eb aplikacionit:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Canary Deployment n\u00eb 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\">Kryejm\u00eb Canary Deployment<\/h3>\n<p><\/p>\n<h4 id=\"shag-1-10-trafika\">Hapi 1: 10% e trafikut<\/h4>\n<p><\/p>\n<p>P\u00ebr t\u00eb filluar canary deploy-in, na nevojitet vet\u00ebm t\u00eb ndryshojm\u00eb versionin e imazhit, ashtu si\u00e7 b\u00ebjm\u00eb zakonisht me deploy-t\u00eb:<\/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>Dhe ne jemi duke shtypur ndryshimet, prandaj Gitlab CI b\u00ebn deploy dhe ne shohim ndryshimet:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Canary Deployment n\u00eb Kubernetes #2: Argo Rollouts\" src=\"\/wp-content\/uploads\/2020\/07\/ee069d8108e6ac211827b01390c45910.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<p>Tani, n\u00ebse i drejtohemi sh\u00ebrbimit:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Canary Deployment n\u00eb Kubernetes #2: Argo Rollouts\" src=\"\/wp-content\/uploads\/2020\/07\/0be8a02c6ab6166d230818c43bbae3d1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<p>Shk\u00eblqyesh\u00ebm! Jemi n\u00eb mes t\u00eb canary deployment-it ton\u00eb. Mund t\u00eb shohim p\u00ebrparimin duke ekzekutuar:<\/p>\n<p><\/p>\n<p><code>kubectl argo rollouts get rollout rollout-canary<\/code><\/p>\n<p>\n<img decoding=\"async\" alt=\"Canary Deployment n\u00eb 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\">Hapi 2: 50% e trafikut:<\/h4>\n<p><\/p>\n<p>Tani kalojm\u00eb n\u00eb hapin tjet\u00ebr: redirektimi i 50% t\u00eb trafikut. E kemi konfiguruar q\u00eb ky hap t\u00eb nis\u00eb manualisht:<\/p>\n<p><\/p>\n<p><code>kubectl argo rollouts promote rollout-canary # vazhdo me hapin 2<\/code><\/p>\n<p>\n<img decoding=\"async\" alt=\"Canary Deployment n\u00eb Kubernetes #2: Argo Rollouts\" src=\"\/wp-content\/uploads\/2020\/07\/c856b7a60930cd5f6484ebe5a9080ffd.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<p>Dhe aplikacioni yn\u00eb ktheu 50% t\u00eb p\u00ebrgjigjeve nga versionet e reja:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Canary Deployment n\u00eb Kubernetes #2: Argo Rollouts\" src=\"\/wp-content\/uploads\/2020\/07\/502638210f546c5d973fc284beea1ec5.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<p>Dhe p\u00ebrmbledhja e rollout-it:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Canary Deployment n\u00eb Kubernetes #2: Argo Rollouts\" src=\"\/wp-content\/uploads\/2020\/07\/64e996d9681a88475af31b09ecf61a3f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<p>Mrekulli.<\/p>\n<p><\/p>\n<h4 id=\"shag-3-100-trafika\">Hapi 3: 100% e trafikut:<\/h4>\n<p><\/p>\n<p>E kemi konfiguruar q\u00eb pas 2 minutash hapi me 50% t\u00eb p\u00ebrfundoj\u00eb automatikisht dhe t\u00eb nis\u00eb hapi me 100%:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Canary Deployment n\u00eb Kubernetes #2: Argo Rollouts\" src=\"\/wp-content\/uploads\/2020\/07\/d7eee8f41fcbd9c186b37666ea6c10fe.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<p>Dhe dalja e aplikacionit:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Canary Deployment n\u00eb Kubernetes #2: Argo Rollouts\" src=\"\/wp-content\/uploads\/2020\/07\/f66c21e326f2bf52b29b460fc6e84957.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<p>Dhe p\u00ebrmbledhja e rollout-it:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Canary Deployment n\u00eb Kubernetes #2: Argo Rollouts\" src=\"\/wp-content\/uploads\/2020\/07\/5485ddc238b4eaad9e14d338acc116a8.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<p>Canary deploy \u00ebsht\u00eb p\u00ebrfunduar.<\/p>\n<p><\/p>\n<h4 id=\"eschyo-primery-s-argo-rollouts\">Shembuj t\u00eb tjer\u00eb me Argo Rollouts<\/h4>\n<p><\/p>\n<p>K\u00ebtu ka disa shembuj t\u00eb tjer\u00eb, si\u00e7 \u00ebsht\u00eb si t\u00eb konfigurojm\u00eb pamjen e madhe t\u00eb mjedisit dhe krahasimet t\u00eb bazuara n\u00eb 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 mbi Argo Rollouts dhe Argo CI<\/h4>\n<p><\/p>\n<p>V\u00ebrtet e rekomandoj k\u00ebt\u00eb video, ku tregohet si funksionojn\u00eb s\u00eb bashku Argo Rollouts dhe Argo CI:<\/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=\"Luaj videon\" 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\">P\u00ebrfundimi<\/h2>\n<p><\/p>\n<p>M\u00eb p\u00eblqen shum\u00eb ideja e p\u00ebrdorimit t\u00eb CRD-ve q\u00eb menaxhojn\u00eb krijimin e llojeve t\u00eb tjera t\u00eb deployments ose replicasets, q\u00eb redirection trafik etj. Puna me to shkon shk\u00eblqyer. M\u00eb pas, do doja t\u00eb testoja integrimin me Argo CI.<\/p>\n<p><\/p>\n<p>Megjithat\u00eb, duket se ka nj\u00eb bashkim t\u00eb madh n\u00eb rrug\u00eb mes Argo CI dhe Flux CI, k\u00ebshtu q\u00eb mund t\u00eb pres derisa t\u00eb dal\u00eb nj\u00eb version i ri: <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/argo-flux-join-forces\">Argo Flux<\/a><\/noindex>. <\/p>\n<p><\/p>\n<p>A keni pasur ndonj\u00eb p\u00ebrvoj\u00eb me Argo Rollouts ose Argo CI?<\/p>\n<p><\/p>\n<h2 id=\"takzhe-chitayte-drugie-stati-v-nashem-bloge\">Shihni gjithashtu artikuj t\u00eb tjer\u00eb n\u00eb blogun ton\u00eb:<\/h2>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/company\/nixys\/blog\/470568\/\">Blue-Green Deployment i aplikacioneve n\u00eb Spring me serverin web Nginx<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/company\/nixys\/blog\/480072\/\">Kubernetes: pse \u00ebsht\u00eb kaq e r\u00ebnd\u00ebsishme t\u00eb konfigurosh menaxhimin e burimeve t\u00eb sistemit?<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/nixys\/blog\/473014\/\">Hyrje n\u00eb Autorizimin e Hashicorp Consul\u2019s Kubernetes<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/company\/nixys\/blog\/481992\/\">Tekton Pipeline \u2014 pipelines t\u00eb natyrshme p\u00ebr Kubernetes<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/nixys\/blog\/473578\/\">Montimi i moduleve dinamik\u00eb p\u00ebr Nginx<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/nixys\/blog\/347526\/\">Boti Telegram p\u00ebr Redmine. Si ta thjeshtoni jet\u00ebn tuaj dhe t\u00eb tjer\u00ebve<\/a><\/noindex><\/li>\n<\/ul>\n<p>Burimi: <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 4.9.10 - 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 \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.\" \/>\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\/sq\/blog\/administrirovanie\/canary-deployment-v-kubernetes-2-argo-rollouts\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"sq_AL\" \/>\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 \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.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sq\/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 Deployment n\u00eb Kubernetes #2: Argo Rollouts | ProHoster","description":"Ne do t\u00eb p\u00ebrdorim controller-in e native k8s p\u00ebr Argo Rollouts dhe GitlabCI p\u00ebr t\u00eb nisur Canary deployment n\u00eb Kubernetes https:\/\/unsplash.com\/photos\/V41PulGL1z0 Artikujt e k\u00ebtij cikli Canary Deployment n\u00eb Kubernetes #1: Gitlab CI (Ky artikull) Canary Deployment duke p\u00ebrdorur Istio Canary Deployment duke p\u00ebrdorur Jenkins-X Istio Flagger Canary Deployment Shpresojm\u00eb se e keni lexuar pjes\u00ebn e par\u00eb, ku shpjeguam shkurtimisht se \u00e7far\u00eb jan\u00eb Canary Deployments.","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/canary-deployment-v-kubernetes-2-argo-rollouts","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sq_AL","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 \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.","og:url":"https:\/\/prohoster.info\/sq\/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"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/90373","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/comments?post=90373"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/90373\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media\/90374"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=90373"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=90373"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=90373"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}