{"id":90272,"date":"2020-07-30T13:42:02","date_gmt":"2020-07-30T11:42:02","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/canary-deployment-v-kubernetes-1-gitlab-ci"},"modified":"2020-07-30T13:42:02","modified_gmt":"2020-07-30T11:42:02","slug":"canary-deployment-v-kubernetes-1-gitlab-ci","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/canary-deployment-v-kubernetes-1-gitlab-ci","title":{"rendered":"Canary Deployment n\u00eb Kubernetes #1: Gitlab CI","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h4 id=\"my-budem-ispolzovat-gitlab-ci-i-ruchnoy-gitops-dlya-vnedreniya-i-ispolzovaniya-canary-deploya-v-kubernetes\">Ne do t\u2019i p\u00ebrdorim Gitlab CI dhe GitOps manual p\u00ebr t\u00eb implementuar dhe p\u00ebrdorur Canary-deploy n\u00eb Kubernetes<\/h4>\n<p>\n<img decoding=\"async\" alt=\"Canary Deployment n\u00eb Kubernetes #1: Gitlab CI\" src=\"\/wp-content\/uploads\/2020\/07\/03a53dec150529deb3438efaeaa8a1bd.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h4 id=\"stati-iz-etogo-cikla\">Artikujt nga ky cik\u00ebl:<\/h4>\n<p><\/p>\n<ul>\n<li>(ky artikull)<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/company\/nixys\/blog\/513118\/\">Canary Deployment me ArgoCI<\/a><\/noindex><\/li>\n<li>Canary Deployment me Istio<\/li>\n<li>Canary Deployment me Jenkins-X Istio Flagger<\/li>\n<\/ul>\n<p><\/p>\n<p>Do ta realizojm\u00eb Canary-deploy manualisht p\u00ebrmes GitOps dhe krijimin\/modifikimin e burimeve kryesore t\u00eb Kubernetes. <strong>Ky artikull \u00ebsht\u00eb n\u00eb radh\u00eb t\u00eb par\u00eb p\u00ebr t\u2019u njohur<\/strong> me m\u00ebnyr\u00ebn se si funksionon Canary deploy n\u00eb Kubernetes, pasi ka m\u00ebnyra m\u00eb efikase p\u00ebr automatizim q\u00eb do t\u00eb shikojm\u00eb n\u00eb artikujt e ardhsh\u00ebm.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n<img decoding=\"async\" alt=\"Canary Deployment n\u00eb Kubernetes #1: Gitlab CI\" src=\"\/wp-content\/uploads\/2020\/07\/d5127cf7dcec695bd8872b1704eb7e90.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/www.norberteder.com\/canary-deployment\/\">https:\/\/www.norberteder.com\/canary-deployment\/<\/a><\/noindex><\/p>\n<p><\/p>\n<h3 id=\"canary-deployment\">Canary Deployment<\/h3>\n<p><\/p>\n<p>Me strategjin\u00eb Canary t\u00eb p\u00ebrdit\u00ebsimit, fillimisht aplikimet b\u00ebhen vet\u00ebm p\u00ebr nj\u00eb pjes\u00eb t\u00eb p\u00ebrdoruesve. N\u00ebp\u00ebrmjet monitorimit, t\u00eb dh\u00ebnave nga log-et, testimi manual ose kanaleve t\u00eb tjera t\u00eb feedback-ut, l\u00ebshimi testohet para se t\u00eb aplikohet p\u00ebr t\u00eb gjith\u00eb p\u00ebrdoruesit.<\/p>\n<p><\/p>\n<h3 id=\"kubernetes-deployment-rolling-update\">Kubernetes Deployment (rolling update)<\/h3>\n<p><\/p>\n<p>Strategjia e paracaktuar p\u00ebr Kubernetes Deployment \u00ebsht\u00eb rolling-update, ku nj\u00eb num\u00ebr i caktuar pods me versione t\u00eb reja t\u00eb imazheve started. N\u00ebse ato krijohen pa probleme, pods me versione t\u00eb vjetra t\u00eb imazheve p\u00ebrfundojn\u00eb dhe pods t\u00eb reja krijohen paralelisht.<\/p>\n<p><\/p>\n<h3 id=\"gitops\">GitOps<\/h3>\n<p><\/p>\n<p>Ne p\u00ebrdorim GitOps n\u00eb k\u00ebt\u00eb shembull, pasi ne:<\/p>\n<p><\/p>\n<ul>\n<li>p\u00ebrdorim Git si burim t\u00eb vet\u00ebm t\u00eb s\u00eb v\u00ebrtet\u00ebs<\/li>\n<li>p\u00ebrdorim Git Operations p\u00ebr nd\u00ebrtimin dhe shp\u00ebrndarjen (nuk nevojiten komanda t\u00eb tjera p\u00ebrve\u00e7 git tag\/merge)<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"primer\">Shembuj<\/h3>\n<p><\/p>\n<p>T\u00eb marrim nj\u00eb praktik\u00eb t\u00eb mir\u00eb \u2014 t\u00eb kemi nj\u00eb depo p\u00ebr kodin e aplikacioneve dhe nj\u00eb p\u00ebr infrastruktur\u00ebn.<\/p>\n<p><\/p>\n<h4 id=\"repozitoriy-dlya-prilozheniy\">Depoja p\u00ebr aplikacione<\/h4>\n<p><\/p>\n<p>Ky \u00ebsht\u00eb nj\u00eb API shum\u00eb e thjesht\u00eb n\u00eb Python+Flask, e cila kthehet me nj\u00eb p\u00ebrgjigje n\u00eb formatin JSON. Ne do t\u00eb nd\u00ebrtom\u00eb paket\u00ebn p\u00ebrmes GitlabCI dhe do ta shtyjm\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><code>wuestkamp\/k8s-deployment-example-app:v1<\/code><\/li>\n<li><code>wuestkamp\/k8s-deployment-example-app:v2<\/code><\/li>\n<\/ul>\n<p><\/p>\n<p>Dallimi i vet\u00ebm nd\u00ebrmjet tyre \u00ebsht\u00eb ndryshimi i dokumentit JSON q\u00eb kthehet. Ne p\u00ebrdorim k\u00ebt\u00eb aplikacion p\u00ebr nj\u00eb vizualizim shum\u00eb t\u00eb thjesht\u00eb t\u00eb versionit me t\u00eb cilin po punojm\u00eb.<\/p>\n<p><\/p>\n<h4 id=\"infrastrukturnyy-repozitoriy\">Repozitori infrastrukturor<\/h4>\n<p><\/p>\n<p>N\u00eb k\u00ebt\u00eb depo ne do t\u00eb shp\u00ebrndajm\u00eb p\u00ebrmes GitlabCI n\u00eb Kubernetes, <code>.gitlab-ci.yml<\/code> duket si m\u00eb posht\u00eb:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">image: traherom\/kustomize-docker\n\nbefore_script:\n   - printenv\n   - kubectl version\n\nstages:\n - deploy\n\ndeploy test:\n   stage: deploy\n   before_script:\n     - echo $KUBECONFIG\n   script:\n     - kubectl get all\n     - kubectl apply -f i\/k8s\n\n   only:\n     - master\n<\/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\n\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>P\u00ebr m\u00ebnyr\u00ebn se si t\u00eb merrni kredencialet p\u00ebr klasterin (Gcloud) mund t\u00eb lexoni <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/faun\/manually-connect-to-your-kubernetes-cluster-from-the-outside-d852346a7f0a\">k\u00ebtu<\/a><\/noindex>.<\/p>\n<p><\/p>\n<h4 id=\"infrastrukturnyy-yaml\">Yaml infrastrukturor<\/h4>\n<p><\/p>\n<p>N\u00eb repository-infrastruktore kemi service:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">apiVersion: v1\nkind: Service\nmetadata:\n labels:\n   id: app\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 deployment-in n\u00eb <code>deploy.yaml<\/code>:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">apiVersion: apps\/v1\nkind: Deployment\nmetadata:\n name: app\nspec:\n replicas: 10\n selector:\n   matchLabels:\n     id: app\n     type: main\n template:\n   metadata:\n     labels:\n       id: app\n       type: main\n   spec:\n     containers:\n     - image: registry.gitlab.com\/wuestkamp\/k8s-deployment-example-app:v1\n       name: app\n       resources:\n         limits:\n           cpu: 100m\n           memory: 100Mi<\/code><\/pre>\n<p><\/p>\n<p>Dhe nj\u00eb tjet\u00ebr deployment n\u00eb <code>deploy-canary.yaml<\/code>:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">kind: Deployment\nmetadata:\n name: app-canary\nspec:\n replicas: 0\n selector:\n   matchLabels:\n     id: app\n     type: canary\n template:\n   metadata:\n     labels:\n       id: app\n       type: canary\n   spec:\n     containers:\n     - image: registry.gitlab.com\/wuestkamp\/k8s-deployment-example-app:v2\n       name: app\n       resources:\n         limits:\n           cpu: 100m\n           memory: 100Mi<\/code><\/pre>\n<p><\/p>\n<p>Vini re se app-deploy p\u00ebr momentin nuk ka replika t\u00eb caktuara.<\/p>\n<p><\/p>\n<h4 id=\"vypolnenie-nachalnogo-deploya\">Kryerja e deploy-it fillestar<\/h4>\n<p><\/p>\n<p>P\u00ebr t\u00eb nisur deployment-in fillestar, mund t\u00eb filloni pipeline-in GitlabCI manualisht n\u00eb deg\u00ebn master. Pas k\u00ebsaj <code>kubectl<\/code> duhet t\u00eb dal\u00eb e m\u00ebposhtme:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Canary Deployment n\u00eb Kubernetes #1: Gitlab CI\" src=\"\/wp-content\/uploads\/2020\/07\/e8ea95fe6c3925f46f6430ce2293063c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<p>Ne shohim <code>app<\/code> deployment me 10 replika dhe app-canary me 0. Po ashtu ka LoadBalancer nga i cili mund t\u00eb qasemi p\u00ebrmes <code>curl<\/code> n\u00eb IP t\u00eb Jashtme:<\/p>\n<p><\/p>\n<p><code>while true; do curl -s 35.198.149.232 | grep label; sleep 0.1; done<\/code><\/p>\n<p>\n<img decoding=\"async\" alt=\"Canary Deployment n\u00eb Kubernetes #1: Gitlab CI\" src=\"\/wp-content\/uploads\/2020\/07\/06e6928002532dbe03b65356964110c7.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<p>Ne e shembulli jon\u00eb i testit q\u00eb aplikacioni yn\u00eb kthen vet\u00ebm \"v1\".<\/p>\n<p><\/p>\n<h3 id=\"vypolnenie-canary-deploya\">Kryerja e deploy-it Canary<\/h3>\n<p><\/p>\n<h4 id=\"shag-1-vypustit-novuyu-versiyu-dlya-chasti-polzovateley\">Hapi 1: l\u00ebshoni nj\u00eb version t\u00eb ri p\u00ebr nj\u00eb pjes\u00eb t\u00eb p\u00ebrdoruesve<\/h4>\n<p><\/p>\n<p>Ne e kemi caktuar numrin e kopjeve n\u00eb 1 n\u00eb skedarin deploy-canary.yaml dhe imazhin e versionit t\u00eb ri:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">kind: Deployment\nmetadata:\n name: app-canary\nspec:\n replicas: 1\n selector:\n   matchLabels:\n     id: app\n     type: canary\n template:\n   metadata:\n     labels:\n       id: app\n       type: canary\n   spec:\n     containers:\n     - image: registry.gitlab.com\/wuestkamp\/k8s-deployment-example-app:v2\n       name: app\n       resources:\n         limits:\n           cpu: 100m\n           memory: 100Mi<\/code><\/pre>\n<p><\/p>\n<p>N\u00eb skedar <code>deploy.yaml<\/code> ne e ndryshuam numrin e kopjeve n\u00eb 9:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">kind: Deployment\nmetadata:\n name: app\nspec:\n replicas: 9\n selector:\n   matchLabels:\n     id: app\n...<\/code><\/pre>\n<p><\/p>\n<p>Ne po e d\u00ebrgojm\u00eb k\u00ebt\u00eb ndryshim n\u00eb repository, nga e cila do t\u00eb startohet deploy-i (p\u00ebrmes GitlabCI) dhe shohim n\u00eb fund:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Canary Deployment n\u00eb Kubernetes #1: Gitlab CI\" src=\"\/wp-content\/uploads\/2020\/07\/b639716b31e41e8eac573fd365ad6780.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<p>Sh\u00ebrbimi yn\u00eb do t\u00eb tregoj\u00eb p\u00ebr t\u00eb dy deploy-t, pasi t\u00eb dy kan\u00eb selektorin app. P\u00ebr shkak t\u00eb shp\u00ebrndarjes s\u00eb rast\u00ebsishme sipas t\u00eb dh\u00ebnave n\u00eb Kubernetes, ne duhet t\u00eb shohim p\u00ebrgjigje t\u00eb ndryshme n\u00eb ~ 10% t\u00eb k\u00ebrkesave:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Canary Deployment n\u00eb Kubernetes #1: Gitlab CI\" src=\"\/wp-content\/uploads\/2020\/07\/d1177207ebd8952fd1994ed0ebdda6a3.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<p>Shteti aktual i aplikacionit ton\u00eb (GitOps, marr\u00eb nga Git si Burimi i Vet\u00ebm t\u00eb V\u00ebrtet\u00eb) \u00ebsht\u00eb q\u00eb ka dy deploymente me kopje aktive, nj\u00eb p\u00ebr \u00e7do version.<\/p>\n<p><\/p>\n<p>~10% e p\u00ebrdoruesve njohin versionin e ri dhe pa dashje e testojn\u00eb at\u00eb. Tani \u00ebsht\u00eb koha p\u00ebr t\u00eb kontrolluar p\u00ebr gabime n\u00eb logjet dhe t\u00eb dh\u00ebnat e monitorimit p\u00ebr t\u00eb gjetur probleme.<\/p>\n<p><\/p>\n<h4 id=\"shag-2-vypustit-novuyu-versiyu-dlya-vseh-polzovateley\">Hapi 2: l\u00ebshoni versionin e ri p\u00ebr t\u00eb gjith\u00eb p\u00ebrdoruesit<\/h4>\n<p><\/p>\n<p>Ne vendos\u00ebm se gjith\u00e7ka shkoi mir\u00eb dhe tani na nevojitet t\u00eb implementojm\u00eb versionin e ri p\u00ebr t\u00eb gjith\u00eb p\u00ebrdoruesit. P\u00ebr k\u00ebt\u00eb, thjesht p\u00ebrdit\u00ebsojm\u00eb <code>deploy.yaml<\/code> duke instaluar versionin e ri t\u00eb imazhit dhe numrin e replicave, i barabart\u00eb me 10. N\u00eb <code>deploy-canary.yaml<\/code> ne vendosim numrin e replicave t\u00eb rikthehet n\u00eb 0. Pas implementimit, rezultati do t\u00eb jet\u00eb si n\u00eb vijim:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Canary Deployment n\u00eb Kubernetes #1: Gitlab CI\" src=\"\/wp-content\/uploads\/2020\/07\/a31aafe96a09c6d2651b2bf7add4dd29.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3 id=\"podvodya-itog\">N\u00eb p\u00ebrfundim<\/h3>\n<p><\/p>\n<p>P\u00ebr mua, nisja e implementimit manualisht n\u00eb k\u00ebt\u00eb m\u00ebnyr\u00eb ndihmon n\u00eb kuptimin e leht\u00ebsis\u00eb s\u00eb konfigurimit t\u00eb tij p\u00ebrmes k8s. Duke qen\u00eb se Kubernetes lejon p\u00ebrdit\u00ebsimin e gjith\u00e7kaje p\u00ebrmes API, k\u00ebto hapa mund t\u00eb automatizohen p\u00ebrmes skriptesh.<\/p>\n<p><\/p>\n<p>Nj\u00eb gj\u00eb tjet\u00ebr q\u00eb duhet t\u00eb realizohet \u00ebsht\u00eb pik\u00ebprerja e testuesit (LoadBalancer ose p\u00ebrmes Ingress), p\u00ebrmes s\u00eb cil\u00ebs mund t\u00eb aksesoni vet\u00ebm versionin e ri. Ajo mund t\u00eb p\u00ebrdoret p\u00ebr t\u00eb par\u00eb manualisht.<\/p>\n<p><\/p>\n<p>N\u00eb artikujt e ardhsh\u00ebm do t\u00eb shqyrtojm\u00eb zgjidhje t\u00eb tjera t\u00eb automatizuara q\u00eb realizojn\u00eb shumic\u00ebn e asaj q\u00eb kemi b\u00ebr\u00eb.<\/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\/ru\/company\/nixys\/blog\/468779\/\">\u00c7far\u00eb rezultati kishte migrimi nga ClickHouse pa autorizim n\u00eb ClickHouse me autorizim?<\/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\/news\/t\/502658\/\">P\u00ebrdit\u00ebsimi i nxs-build-tools \u2014 ndihm\u00ebsit n\u00eb nd\u00ebrtimin e paketave deb dhe rpm<\/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\/ru\/company\/nixys\/blog\/504762\/\">Me q\u00eb po p\u00ebrballeshim kur p\u00ebrdorim utilitarin Csync2<\/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\/512766\/\">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 Gitlab CI \u0438 \u0440\u0443\u0447\u043d\u043e\u0439 GitOps \u0434\u043b\u044f \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u044f \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f Canary-\u0434\u0435\u043f\u043b\u043e\u044f \u0432 Kubernetes \u0421\u0442\u0430\u0442\u044c\u0438 \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430: (\u044d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f) Canary Deployment \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 ArgoCI Canary Deployment \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 Istio Canary Deployment \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 Jenkins-X Istio Flagger \u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c Canary-\u0434\u0435\u043f\u043b\u043e\u0439 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0440\u0443\u043a\u0430\u043c\u0438 \u0447\u0435\u0440\u0435\u0437 GitOps \u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435\/\u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 Kubernetes. \u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0430 \u0432 \u043f\u0435\u0440\u0432\u0443\u044e [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":90273,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-90272","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 Gitlab CI \u0438 \u0440\u0443\u0447\u043d\u043e\u0439 GitOps \u0434\u043b\u044f \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u044f \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f Canary-\u0434\u0435\u043f\u043b\u043e\u044f \u0432 Kubernetes \u0421\u0442\u0430\u0442\u044c\u0438 \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430: (\u044d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f) Canary Deployment \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 ArgoCI Canary Deployment \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 Istio Canary Deployment \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 Jenkins-X Istio Flagger \u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c Canary-\u0434\u0435\u043f\u043b\u043e\u0439 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0440\u0443\u043a\u0430\u043c\u0438 \u0447\u0435\u0440\u0435\u0437 GitOps \u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435\/\u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 Kubernetes. \u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0430 \u0432 \u043f\u0435\u0440\u0432\u0443\u044e\" \/>\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-1-gitlab-ci\" \/>\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 #1: Gitlab CI | 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 Gitlab CI \u0438 \u0440\u0443\u0447\u043d\u043e\u0439 GitOps \u0434\u043b\u044f \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u044f \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f Canary-\u0434\u0435\u043f\u043b\u043e\u044f \u0432 Kubernetes \u0421\u0442\u0430\u0442\u044c\u0438 \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430: (\u044d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f) Canary Deployment \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 ArgoCI Canary Deployment \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 Istio Canary Deployment \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 Jenkins-X Istio Flagger \u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c Canary-\u0434\u0435\u043f\u043b\u043e\u0439 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0440\u0443\u043a\u0430\u043c\u0438 \u0447\u0435\u0440\u0435\u0437 GitOps \u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435\/\u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 Kubernetes. \u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0430 \u0432 \u043f\u0435\u0440\u0432\u0443\u044e\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/canary-deployment-v-kubernetes-1-gitlab-ci\" \/>\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-30T11:42:02+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-07-30T11:42:02+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 #1: Gitlab CI | ProHoster","description":"Ne do t\u00eb p\u00ebrdorim Gitlab CI dhe GitOps manual p\u00ebr t\u00eb implementuar dhe p\u00ebrdorur Canary-deploy n\u00eb Kubernetes. Artikuj nga ky cik\u00ebl: (ky artikull) Canary Deployment me ArgoCI, Canary Deployment me Istio, Canary Deployment me Jenkins-X, Istio Flagger. Ne do ta realizojm\u00eb Canary-deploy me duar p\u00ebrmes GitOps dhe krijimin\/modifikimin e burimeve kryesore t\u00eb Kubernetes. Ky artikull \u00ebsht\u00eb dedikuar n\u00eb m\u00ebnyr\u00eb","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/canary-deployment-v-kubernetes-1-gitlab-ci","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 #1: Gitlab CI | ProHoster","og:description":"\u041c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Gitlab CI \u0438 \u0440\u0443\u0447\u043d\u043e\u0439 GitOps \u0434\u043b\u044f \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u044f \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f Canary-\u0434\u0435\u043f\u043b\u043e\u044f \u0432 Kubernetes \u0421\u0442\u0430\u0442\u044c\u0438 \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430: (\u044d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f) Canary Deployment \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 ArgoCI Canary Deployment \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 Istio Canary Deployment \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 Jenkins-X Istio Flagger \u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c Canary-\u0434\u0435\u043f\u043b\u043e\u0439 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0440\u0443\u043a\u0430\u043c\u0438 \u0447\u0435\u0440\u0435\u0437 GitOps \u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435\/\u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 Kubernetes. \u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0430 \u0432 \u043f\u0435\u0440\u0432\u0443\u044e","og:url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/canary-deployment-v-kubernetes-1-gitlab-ci","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-30T11:42:02+00:00","article:modified_time":"2020-07-30T11:42:02+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"90272","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:55:28","updated":"2022-09-27 23:09:11"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/90272","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=90272"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/90272\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media\/90273"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=90272"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=90272"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=90272"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}