{"id":35955,"date":"2019-10-31T22:08:26","date_gmt":"2019-10-31T19:08:26","guid":{"rendered":"https:\/\/prohoster.info\/blog\/razvertyvanie-prilozhenij-na-neskolkih-klasterah-kubernetes-s-helm\/"},"modified":"2019-10-31T22:08:26","modified_gmt":"2019-10-31T19:08:26","slug":"razvertyvanie-prilozhenij-na-neskolkih-klasterah-kubernetes-s-helm","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/razvertyvanie-prilozhenij-na-neskolkih-klasterah-kubernetes-s-helm","title":{"rendered":"Shp\u00ebrndarja e aplikacioneve n\u00eb disa klaster\u00eb Kubernetes me Helm","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<\/p>\n<p><\/p>\n<h2 id=\"kak-dailymotion-ispolzuet-kubernetes-razvertyvanie-prilozheniy\">Si si Dailymotion p\u00ebrdor Kubernetes: implementimi i aplikacioneve<\/h2>\n<p><\/p>\n<p>Ne n\u00eb Dailymotion filluam t\u00eb p\u00ebrdorim Kubernetes n\u00eb prodhim 3 vjet m\u00eb par\u00eb. Por t\u00eb implementosh aplikacione n\u00eb disa klaster\u00eb \u00ebsht\u00eb nj\u00eb k\u00ebnaq\u00ebsi e ve\u00e7ant\u00eb, prandaj gjat\u00eb k\u00ebtyre viteve kemi shkuar p\u00ebr t\u00eb p\u00ebrmir\u00ebsuar mjetet dhe proceset tona t\u00eb pun\u00ebs.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3 id=\"s-chego-nachalos\">Si filloi gjith\u00e7ka<\/h3>\n<p><\/p>\n<p>K\u00ebtu do t\u00eb tregojm\u00eb se si e implementojm\u00eb aplikacionet tona n\u00eb disa klaster\u00eb Kubernetes n\u00eb t\u00eb gjith\u00eb bot\u00ebn.<\/p>\n<p><\/p>\n<p>P\u00ebr t\u00eb implementuar disa objekte Kubernetes nj\u00ebher\u00ebsh, ne p\u00ebrdorim <noindex><a rel=\"nofollow\" href=\"https:\/\/helm.sh\/\">Helm<\/a><\/noindex>, dhe t\u00eb gjith\u00eb kartat tona ruhen n\u00eb nj\u00eb depo git. P\u00ebr t\u00eb implementuar nj\u00eb stack t\u00eb plot\u00eb t\u00eb aplikacionit nga disa sh\u00ebrbime, ne p\u00ebrdorim at\u00eb q\u00eb quhet kart\u00eb e p\u00ebrmbledhur. N\u00eb thelb, kjo \u00ebsht\u00eb nj\u00eb kart\u00eb q\u00eb shpall var\u00ebsit\u00eb dhe lejon inicializimin e API-s\u00eb dhe sh\u00ebrbimeve t\u00eb saj me nj\u00eb komand\u00eb.<\/p>\n<p><\/p>\n<p>Gjithashtu, kemi shkruar nj\u00eb skenar t\u00eb vog\u00ebl n\u00eb Python mbi Helm, p\u00ebr t\u00eb b\u00ebr\u00eb verifikime, krijuar karta, shtuar sekrete dhe implementuar aplikacione. T\u00eb gjitha k\u00ebto detyra kryhen n\u00eb nj\u00eb platform\u00eb CI qendrore duke p\u00ebrdorur nj\u00eb imazh docker.<\/p>\n<p><\/p>\n<p>T\u00eb kalojm\u00eb n\u00eb thelb.<\/p>\n<p><\/p>\n<blockquote><p>Sh\u00ebnim. Kur po e lexoni k\u00ebt\u00eb, kandidati i par\u00eb p\u00ebr l\u00ebshim i Helm 3 \u00ebsht\u00eb shpallur tashm\u00eb. Versioni kryesor p\u00ebrmban nj\u00eb grup t\u00eb t\u00ebr\u00eb p\u00ebrmir\u00ebsimesh, t\u00eb destinuara p\u00ebr t\u00eb zgjidhur disa probleme me t\u00eb cilat u p\u00ebrball\u00ebm n\u00eb t\u00eb kaluar\u00ebn.<\/p><\/blockquote>\n<p><\/p>\n<h3 id=\"rabochiy-process-razrabotki-chartov\">Procesi i pun\u00ebs p\u00ebr zhvillimin e kartave<\/h3>\n<p><\/p>\n<p>P\u00ebr aplikacionet, ne p\u00ebrdorim deg\u00ebzim, dhe ky qasje e kemi aplikuar edhe te kartat.<\/p>\n<p><\/p>\n<ul>\n<li>Dega <strong>dev<\/strong> p\u00ebrdoret p\u00ebr krijimin e kartave q\u00eb do t\u00eb testohet n\u00eb klaster\u00ebt e zhvillimit.<\/li>\n<li>Kur k\u00ebrkesa e pal\u00ebs s\u00eb tret\u00eb d\u00ebrgohet n\u00eb <strong>master<\/strong>, ato kontrollohen n\u00eb sken\u00eb.<\/li>\n<li>M\u00eb n\u00eb fund, ne krijojm\u00eb nj\u00eb k\u00ebrkes\u00eb t\u00eb pal\u00ebs s\u00eb tret\u00eb p\u00ebr t\u00eb transferuar ndryshimet n\u00eb deg\u00eb <strong>prod<\/strong> dhe p\u00ebr t'i aplikuar ato n\u00eb prodhim.<\/li>\n<\/ul>\n<p><\/p>\n<p>\u00c7do mjedis ka depo private q\u00eb ruan kartat tona dhe ne p\u00ebrdorim <noindex><a rel=\"nofollow\" href=\"https:\/\/chartmuseum.com\/\">Chartmuseum<\/a><\/noindex> me API shum\u00eb t\u00eb dobishme. K\u00ebshtu, ne kemi garantuar izolim t\u00eb fort\u00eb midis ambienteve dhe verifikim t\u00eb kartave n\u00eb kushte reale para se t'i p\u00ebrdorim n\u00eb prodhim.<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/rz\/vt\/uk\/rzvtuk6q7b_rkeaxnyujzhmfjog.png\"><\/a><\/noindex><\/p>\n<p><\/p>\n<p><em>Depo kartash n\u00eb ambiente t\u00eb ndryshme<\/em><\/p>\n<p><\/p>\n<p>Vlen t\u00eb theksohet se kur zhvilluesit d\u00ebrgojn\u00eb deg\u00ebn dev, versioni i kart\u00ebs s\u00eb tyre d\u00ebrgohet automatikisht n\u00eb Chartmuseum dev. K\u00ebshtu, t\u00eb gjith\u00eb zhvilluesit p\u00ebrdorin nj\u00eb depo dev, dhe \u00ebsht\u00eb e nevojshme t\u00eb specifikohet me kujdes versioni i kart\u00ebs p\u00ebr t\u00eb mos p\u00ebrdorur rast\u00ebsisht ndryshimet e dikujt tjet\u00ebr.<\/p>\n<p><\/p>\n<p>P\u00ebr m\u00eb tep\u00ebr, skenari yn\u00eb i vog\u00ebl Python kontrollon objektet Kubernetes sipas specifikimeve t\u00eb Kubernetes OpenAPI duke p\u00ebrdorur <noindex><a rel=\"nofollow\" href=\"https:\/\/kubeval.instrumenta.dev\/\">Kubeval<\/a><\/noindex>, para se t'i publikoj\u00eb n\u00eb Chartmuseum.<\/p>\n<p><\/p>\n<h3 id=\"obschee-opisanie-rabochego-processa-razrabotki-charta\">P\u00ebrmbledhje e procesit t\u00eb pun\u00ebs p\u00ebr zhvillimin e kartave<\/h3>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/yd\/cw\/qw\/ydcwqw-vqfitu5bj8ky4nh7xxea.png\"><\/a><\/noindex><\/p>\n<p><\/p>\n<ol>\n<li>Konfigurimi i detyrave t\u00eb pipeline sipas specifikimit <noindex><a rel=\"nofollow\" href=\"https:\/\/gazr.io\/\">gazr.io<\/a><\/noindex> p\u00ebr kontrollin e cil\u00ebsis\u00eb (lint, test t\u00eb nj\u00ebsi).<\/li>\n<li>D\u00ebrgimi i imazhit docker me mjetet Python, t\u00eb cilat implementojn\u00eb aplikacionet tona.<\/li>\n<li>Konfigurimi i mjedisit sipas emrit t\u00eb deg\u00ebs.<\/li>\n<li>Kontrolli i skedar\u00ebve yaml Kubernetes duke p\u00ebrdorur Kubeval.<\/li>\n<li>Rritja automatike e versionit t\u00eb kart\u00ebs dhe kartave t\u00eb saj prind (kartat q\u00eb varen nga karta e ndryshuar).<\/li>\n<li>D\u00ebrgimi i kart\u00ebs n\u00eb Chartmuseum, i cili \u00ebsht\u00eb n\u00eb p\u00ebrputhje me ambientin e saj.<\/li>\n<\/ol>\n<p><\/p>\n<h2 id=\"upravlenie-razlichiyami-v-klasterah\">Menaxhimi i diferencave n\u00eb klaster\u00eb<\/h2>\n<p><\/p>\n<h3 id=\"federaciya-klasterov\">Federata e klaster\u00ebve<\/h3>\n<p><\/p>\n<p>Ishte nj\u00eb her\u00eb nj\u00eb koh\u00eb kur ne p\u00ebrdornim <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/cluster-administration\/federation\/\">federat\u00ebn e klaster\u00ebve Kubernetes<\/a><\/noindex>, ku mund t\u00eb shpallnim objekte Kubernetes nga nj\u00eb pik\u00eb fundore API. Por pat\u00ebm probleme. P\u00ebr shembull, disa objekte Kubernetes nuk mund t\u00eb krijoheshin n\u00eb pik\u00ebn fundore t\u00eb federat\u00ebs, prandaj ishte e v\u00ebshtir\u00eb t\u00eb menaxhoheshin objektet e bashkuara dhe objekte t\u00eb tjera p\u00ebr klaster\u00eb t\u00eb ve\u00e7ant\u00eb.<\/p>\n<p><\/p>\n<p>P\u00ebr t\u00eb zgjidhur problemin, filluam t\u00eb menaxhonim klaster\u00ebt n\u00eb m\u00ebnyr\u00eb t\u00eb pavarur, gj\u00eb q\u00eb e thjeshtoi shum\u00eb procesin (p\u00ebrdor\u00ebm versionin e par\u00eb t\u00eb federat\u00ebs; n\u00eb t\u00eb dytin di\u00e7ka mund t\u00eb ket\u00eb ndryshuar).<\/p>\n<p><\/p>\n<h3 id=\"georaspredelennaya-platforma\">Platforma gjeo-distribuar<\/h3>\n<p><\/p>\n<p>Tani platforma jon\u00eb \u00ebsht\u00eb e shp\u00ebrndar\u00eb n\u00eb 6 regione \u2014 3 lokalisht dhe 3 n\u00eb cloud.<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/jq\/c1\/mr\/jqc1mru36g5byams4wddzducauw.png\"><\/a><\/noindex><br \/>\n<em>Implementimi i shp\u00ebrndar\u00eb<\/em><\/p>\n<p><\/p>\n<h3 id=\"globalnye-znacheniya-helm\">Vlerat globale t\u00eb Helm<\/h3>\n<p><\/p>\n<p>4 vlera globale t\u00eb Helm lejojn\u00eb p\u00ebrcaktimin e diferencave midis klaster\u00ebve. P\u00ebr t\u00eb gjitha kartat tona, ka vlera minimale sipas parazgjedhjes.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">global:\n  cloud: True\n  env: staging\n  region: us-central1\n  clusterName: staging-us-central1<\/code><\/pre>\n<p><\/p>\n<p><em>Vlerat globale<\/em><\/p>\n<p><\/p>\n<p>K\u00ebto vlera ndihmojn\u00eb n\u00eb p\u00ebrcaktimin e kontekstit p\u00ebr aplikacionet tona dhe p\u00ebrdoren p\u00ebr detyra t\u00eb ndryshme: monitorimi, ndjekja, regjistrimi, kryerja e thirrjeve t\u00eb jashtme, shkall\u00ebzimi, etj.<\/p>\n<p><\/p>\n<ul>\n<li>\u00abcloud\u00bb: ne kemi nj\u00eb platform\u00eb hibrid Kubernetes. P\u00ebr shembull, API-ja jon\u00eb implementohet n\u00eb zonat GCP dhe n\u00eb qendrat tona t\u00eb t\u00eb dh\u00ebnave.<\/li>\n<li>\u00abenv\u00bb: disa vlera mund t\u00eb ndryshojn\u00eb p\u00ebr ambientet joaktive. P\u00ebr shembull, p\u00ebrcaktimet e burimeve dhe konfigurimi i automatik\u00eb shkall\u00ebzimin.<\/li>\n<li>\u00abregion\u00bb: kjo informacion ndihmon n\u00eb p\u00ebrcaktimin e vendndodhjes s\u00eb klasterit dhe mund t\u00eb p\u00ebrdoret p\u00ebr t\u00eb p\u00ebrcaktuar pik\u00eb fundore m\u00eb t\u00eb af\u00ebrt p\u00ebr sh\u00ebrbime t\u00eb jashtme.<\/li>\n<li>\u00abclusterName\u00bb: n\u00ebse dhe kur duam t\u00eb p\u00ebrcaktojm\u00eb nj\u00eb vler\u00eb p\u00ebr nj\u00eb klaster t\u00eb ve\u00e7ant\u00eb.<\/li>\n<\/ul>\n<p><\/p>\n<p>Ja nj\u00eb shembull konkret:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">{{\/* Kthe numrin e replikave t\u00eb Horizontal Pod Autoscaler p\u00ebr GraphQL*\/}}\n{{- define \"graphql.hpaReplicas\" -}}\n{{- if eq .Values.global.env \"prod\" }}\n{{- if eq .Values.global.region \"europe-west1\" }}\nminReplicas: 40\n{{- else }}\nminReplicas: 150\n{{- end }}\nmaxReplicas: 1400\n{{- else }}\nminReplicas: 4\nmaxReplicas: 20\n{{- end }}\n{{- end -}}<\/code><\/pre>\n<p><\/p>\n<p><em>Shembulli i shabllonit Helm<\/em><\/p>\n<p><\/p>\n<p>Kjo logjik\u00eb \u00ebsht\u00eb p\u00ebrcaktuar n\u00eb nj\u00eb shabllon ndihm\u00ebs, p\u00ebr t\u00eb mos ngarkuar YAML-n\u00eb e Kubernetes.<\/p>\n<p><\/p>\n<h3 id=\"obyavlenie-prilozheniya\">Deklarata e aplikacionit<\/h3>\n<p><\/p>\n<p>Veglat tona t\u00eb vendosjes bazohen n\u00eb disa skedar\u00eb YAML. M\u00eb posht\u00eb \u00ebsht\u00eb nj\u00eb shembull se si ne deklarojm\u00eb sh\u00ebrbimin dhe topologjin\u00eb e tij t\u00eb shkall\u00ebzimit (numri i replikave) n\u00eb klaster.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">releases:\n  - foo.world\n\nfoo.world:                # Emri i l\u00ebshimit\n  services:               # Lista e aplikacioneve\/projekteve t\u00eb dailymotion\n    foobar:\n      chart_name: foo-foobar\n      repo: git@github.com:dailymotion\/foobar\n      contexts:\n        prod-europe-west1:\n          deployments:\n            - name: foo-bar-baz\n              replicas: 18\n            - name: another-deployment\n              replicas: 3<\/code><\/pre>\n<p><\/p>\n<p><em>P\u00ebrcaktimi i sh\u00ebrbimit<\/em><\/p>\n<p><\/p>\n<p>Kjo \u00ebsht\u00eb skema e t\u00eb gjith\u00eb hapave q\u00eb p\u00ebrcaktojn\u00eb procesin ton\u00eb t\u00eb vendosjes. Hapi i fundit vendos aplikacionin n\u00eb m\u00ebnyr\u00eb t\u00eb nj\u00ebkohshme n\u00eb disa klaster\u00eb t\u00eb pun\u00ebs.<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/iu\/qh\/xk\/iuqhxki4nfqoi0mus258j0feylu.png\"><\/a><\/noindex><br \/>\n<em>Hapat e vendosjes n\u00eb Jenkins<\/em><\/p>\n<p><\/p>\n<h3 id=\"a-sekrety\">Dhe sekretet?<\/h3>\n<p><\/p>\n<p>Sa i p\u00ebrket siguris\u00eb, ne ndjekim t\u00eb gjith\u00eb sekretet nga vende t\u00eb ndryshme dhe i ruajm\u00eb ato n\u00eb nj\u00eb depo unike <noindex><a rel=\"nofollow\" href=\"https:\/\/www.vaultproject.io\/\">Vault<\/a><\/noindex> n\u00eb Paris.<\/p>\n<p><\/p>\n<p>Veglat tona t\u00eb vendosjes nxjerrin vlerat e sekret\u00ebve nga Vault dhe, kur vjen koha e vendosjes, i inkuadrojn\u00eb ato n\u00eb Helm.<\/p>\n<p><\/p>\n<p>P\u00ebr k\u00ebt\u00eb, ne kemi p\u00ebrcaktuar nj\u00eb lidhje mes sekret\u00ebve n\u00eb Vault dhe sekret\u00ebve q\u00eb i nevojiten aplikacioneve tona:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">secrets:                                                                                                                                                                                                        \n     - secret_id: \"stack1-app1-password\"                                                                                                                                                                                  \n       contexts:                                                                                                                                                                                                   \n         - name: \"default\"                                                                                                                                                                                         \n           vaultPath: \"\/kv\/dev\/stack1\/app1\/test\"                                                                                                                                                               \n           vaultKey: \"password\"                                                                                                                                                                                    \n         - name: \"cluster1\"                                                                                                                                                                           \n           vaultPath: \"\/kv\/dev\/stack1\/app1\/test\"                                                                                                                                                               \n           vaultKey: \"password\"<\/code><\/pre>\n<p><\/p>\n<ul>\n<li>Ne kemi p\u00ebrcaktuar rregulla t\u00eb p\u00ebrgjithshme q\u00eb duhet t\u00eb ndiqen kur shkruhen sekretet n\u00eb Vault.<\/li>\n<li>N\u00ebse nj\u00eb sekret i p\u00ebrket <strong>nj\u00eb konteksti ose klasteri t\u00eb caktuar<\/strong>, duhet t\u00eb shtohet nj\u00eb regjist\u00ebr specifik. (K\u00ebtu konteksti cluster1 ka nj\u00eb vler\u00eb t\u00eb vetme p\u00ebr sekretin stack-app1-password).<\/li>\n<li>N\u00eb t\u00eb kund\u00ebrt, p\u00ebrdoret vlera <strong>n\u00eb m\u00ebnyr\u00eb default<\/strong>.<\/li>\n<li>P\u00ebr \u00e7do pik\u00eb n\u00eb k\u00ebt\u00eb list\u00eb n\u00eb <strong>sekretin e Kubernetes<\/strong> shtohet nj\u00eb \u00e7ift \u00e7el\u00ebs-vler\u00eb. Prandaj, shablloni i sekretit n\u00eb chart-\u00ebt tan\u00eb \u00ebsht\u00eb shum\u00eb i thjesht\u00eb.<\/li>\n<\/ul>\n<p><\/p>\n<pre><code class=\"plaintext\">apiVersion: v1\ndata:\n{{- range $key,$value := .Values.secrets }}\n  {{ $key }}: {{ $value | b64enc | quote }}\n{{ end }}\nkind: Secret\nmetadata:\n  name: \"{{ .Chart.Name }}\"\n  labels:\n    chartVersion: \"{{ .Chart.Version }}\"\n    tillerVersion: \"{{ .Capabilities.TillerVersion.SemVer }}\"\ntype: Opaque<\/code><\/pre>\n<p><\/p>\n<h2 id=\"problemy-i-ogranicheniya\">Problemet dhe kufizimet<\/h2>\n<p><\/p>\n<h3 id=\"rabota-s-neskolkimi-repozitoriyami\">Puna me depo t\u00eb shumta<\/h3>\n<p><\/p>\n<p>Aktualisht ne ndajm\u00eb zhvillimin e chart-eve dhe aplikacioneve. Kjo do t\u00eb thot\u00eb q\u00eb zhvilluesit duhet t\u00eb punojn\u00eb n\u00eb dy depo git: nj\u00eb p\u00ebr aplikacionin dhe tjetra p\u00ebr p\u00ebrcaktimin e vendosjes s\u00eb tij n\u00eb Kubernetes. 2 depo git jan\u00eb 2 procese pun\u00eb, dhe nj\u00eb fillestar leht\u00eb mund t\u00eb ngat\u00ebrrohet.<\/p>\n<p><\/p>\n<h3 id=\"upravlyat-obobschennymi-chartami-hlopotno\">T\u00eb menaxhosh chart-et e p\u00ebrgjithsh\u00ebm \u00ebsht\u00eb e lodhshme<\/h3>\n<p><\/p>\n<p>Si\u00e7 e thash\u00eb, chart-et e p\u00ebrgjithsh\u00ebm jan\u00eb shum\u00eb t\u00eb dobishme p\u00ebr p\u00ebrcaktimin e var\u00ebsive dhe p\u00ebr vendosjen e shpejt\u00eb t\u00eb disa aplikacioneve. Por ne p\u00ebrdorim <code>--reuse-values<\/code>, p\u00ebr t\u00eb shmangur transferimin e t\u00eb gjitha vlerave \u00e7do her\u00eb kur vendosim nj\u00eb aplikacion q\u00eb b\u00ebn pjes\u00eb n\u00eb k\u00ebt\u00eb chart t\u00eb p\u00ebrgjithsh\u00ebm.<\/p>\n<p><\/p>\n<p>N\u00eb procesin e vazhduesh\u00ebm t\u00eb furnizimit kemi vet\u00ebm dy vlera q\u00eb ndryshojn\u00eb rregullisht: numri i replikave dhe etiketa e imazhit (versioni). Vlera t\u00eb tjera, m\u00eb t\u00eb q\u00ebndrueshme, ndryshojn\u00eb manualisht, dhe kjo \u00ebsht\u00eb mjaft e v\u00ebshtir\u00eb. P\u00ebr m\u00eb tep\u00ebr, nj\u00eb gabim n\u00eb vendosjen e chart-it t\u00eb p\u00ebrgjithsh\u00ebm mund t\u00eb \u00e7oj\u00eb n\u00eb d\u00ebshtime t\u00eb r\u00ebnda, si\u00e7 e kemi p\u00ebrjetuar n\u00eb p\u00ebrvoj\u00ebn ton\u00eb.<\/p>\n<p><\/p>\n<h3 id=\"obnovlenie-neskolkih-faylov-konfiguracii\">P\u00ebrdit\u00ebsimi i disa skedar\u00ebve t\u00eb konfigurimit<\/h3>\n<p><\/p>\n<p>Kur nj\u00eb zhvillues shton nj\u00eb aplikacion t\u00eb ri, duhet t\u00eb ndryshoj\u00eb disa skedar\u00eb: deklarata e aplikacionit, lista e sekret\u00ebve, shtimi i aplikacionit n\u00eb var\u00ebsi, n\u00ebse b\u00ebn pjes\u00eb n\u00eb chart-in e p\u00ebrgjithsh\u00ebm.<\/p>\n<p><\/p>\n<h3 id=\"razresheniya-jenkins-slishkom-rasshireny-v-vault\">Lejet e Jenkins jan\u00eb shum\u00eb t\u00eb gjera n\u00eb Vault<\/h3>\n<p><\/p>\n<p>Aktualisht kemi nj\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/www.vaultproject.io\/docs\/auth\/approle.html\">AppRole<\/a><\/noindex>, q\u00eb lexon t\u00eb gjitha sekretet nga Vault.<\/p>\n<p><\/p>\n<h3 id=\"process-otkata-ne-avtomatizirovan\">Procesi i rikthimit nuk \u00ebsht\u00eb automatizuar<\/h3>\n<p><\/p>\n<p>P\u00ebr rikthim ne duhet t\u00eb ekzekutojm\u00eb nj\u00eb komand\u00eb n\u00eb disa klaster\u00eb, q\u00eb sjell mund\u00ebsi p\u00ebr gabime. Ne e kryejm\u00eb k\u00ebt\u00eb operacion manualisht, p\u00ebr t\u00eb siguruar q\u00eb t\u00eb tregojm\u00eb identifikuesin e duhur t\u00eb versionit.<\/p>\n<p><\/p>\n<h2 id=\"my-dvizhemsya-v-storonu-gitops\">Ne jemi n\u00eb drejtim t\u00eb GitOps<\/h2>\n<p><\/p>\n<h3 id=\"nasha-cel\">Q\u00ebllimi yn\u00eb<\/h3>\n<p><\/p>\n<p>Duam ta kthejm\u00eb chart-in n\u00eb depozit\u00ebn e aplikacionit q\u00eb po e shp\u00ebrndajm\u00eb.<\/p>\n<p><\/p>\n<p>Procesi do t\u00eb jet\u00eb i nj\u00ebjt\u00eb si p\u00ebr zhvillimin. P\u00ebr shembull, kur dega d\u00ebrgohet n\u00eb master, shp\u00ebrndarja do t\u00eb nis\u00eb automatikisht. Diferenca kryesore midis k\u00ebtij qasjeje dhe procesit aktual do t\u00eb jet\u00eb q\u00eb <strong>gjith\u00e7ka do t\u00eb menaxhohet n\u00eb git<\/strong> (si aplikacioni ashtu edhe m\u00ebnyra e shp\u00ebrndarjes s\u00eb tij n\u00eb Kubernetes).<\/p>\n<p><\/p>\n<p>Ka disa p\u00ebrfitime:<\/p>\n<p><\/p>\n<ul>\n<li>Shum\u00eb <strong>m\u00eb e qart\u00eb<\/strong> p\u00ebr zhvilluesin. M\u00eb e leht\u00eb p\u00ebr t'u m\u00ebsuar t\u00eb aplikosh ndryshime n\u00eb chart-in lokal.<\/li>\n<li>Definimi i shp\u00ebrndarjes s\u00eb sh\u00ebrbimeve mund t\u00eb p\u00ebrcaktohet <strong>aty ku \u00ebsht\u00eb kodi<\/strong> i sh\u00ebrbimit.<\/li>\n<li><strong>Menaxhimi i heqjes s\u00eb chart-\u00ebve t\u00eb p\u00ebrgjithshme<\/strong>. Sh\u00ebrbimi do t\u00eb ket\u00eb l\u00ebshimin e tij Helm. Kjo do t\u00eb lejoj\u00eb menaxhimin e ciklit t\u00eb jet\u00ebs s\u00eb aplikacionit (rikthim, p\u00ebrmir\u00ebsim) n\u00eb nj\u00eb nivel t\u00eb im\u00ebt, p\u00ebr t\u00eb mos prekur sh\u00ebrbimet e tjera.<\/li>\n<li><strong>P\u00ebrfitimet e git<\/strong> p\u00ebr menaxhimin e chart-eve: anulimi i ndryshimeve, regjistri i auditimeve dhe t\u00eb tjera. N\u00ebse \u00ebsht\u00eb e nevojshme t\u00eb anullohet nj\u00eb ndryshim n\u00eb chart, kjo mund t\u00eb b\u00ebhet p\u00ebrmes git. Shp\u00ebrndarja nis automatikisht.<\/li>\n<li>Mund t\u00eb mendohet p\u00ebr p\u00ebrmir\u00ebsimin e procesit t\u00eb zhvillimit me ndihm\u00ebn e mjeteve t\u00eb tilla si <strong>Skaffold<\/strong>, me t\u00eb cilat zhvilluesit mund t\u00eb testojn\u00eb ndryshimet n\u00eb nj\u00eb kontekst t\u00eb ngjash\u00ebm me prodhimin.<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"dvuhetapnaya-migraciya\">Migrimi n\u00eb dy etapa<\/h3>\n<p><\/p>\n<p>Zhvilluesit tan\u00eb e p\u00ebrdorin k\u00ebt\u00eb proces prej 2 vitesh, k\u00ebshtu q\u00eb na nevojitet nj\u00eb migrim sa m\u00eb pa dhimbje. Prandaj, ne vendos\u00ebm t\u00eb shtojm\u00eb nj\u00eb faz\u00eb nd\u00ebrmjet\u00ebse n\u00eb rrug\u00ebn drejt q\u00ebllimit.<br \/>\nFaza e par\u00eb \u00ebsht\u00eb e thjesht\u00eb:<\/p>\n<p><\/p>\n<ul>\n<li>Ne ruajm\u00eb nj\u00eb struktur\u00eb t\u00eb ngjashme p\u00ebr konfigurimin e shp\u00ebrndarjes s\u00eb aplikacioneve, por n\u00eb nj\u00eb objekt me emrin DailymotionRelease.<\/li>\n<\/ul>\n<p><\/p>\n<pre><code class=\"plaintext\">apiVersion: \"v1\"\nkind: \"DailymotionRelease\"\nmetadata:\n  name: \"app1.ns1\"\n  environment: \"dev\"\n  branch: \"mybranch\"\nspec:\n  slack_channel: \"#admin\"\n  chart_name: \"app1\"\n  scaling:\n    - context: \"dev-us-central1-0\"\n      replicas:\n        - name: \"hermes\"\n          count: 2\n    - context: \"dev-europe-west1-0\"\n      replicas:\n        - name: \"app1-deploy\"\n          count: 2\n  secrets:\n    - secret_id: \"app1\"\n      contexts:\n        - name: \"default\"\n          vaultPath: \"\/kv\/dev\/ns1\/app1\/test\"\n          vaultKey: \"password\"\n        - name: \"dev-europe-west1-0\"\n          vaultPath: \"\/kv\/dev\/ns1\/app1\/test\"\n          vaultKey: \"password\"<\/code><\/pre>\n<p><\/p>\n<ul>\n<li>1 l\u00ebshim p\u00ebr aplikacion (pa chart-e t\u00eb p\u00ebrgjithshme).<\/li>\n<li>Chart-e n\u00eb depozit\u00ebn git t\u00eb aplikacionit.<\/li>\n<\/ul>\n<p><\/p>\n<p>Kemi biseduar me t\u00eb gjith\u00eb zhvilluesit, k\u00ebshtu q\u00eb procesi i migrimit ka filluar tashm\u00eb. Faza e par\u00eb ende kontrollohet duke p\u00ebrdorur platform\u00ebn CI. Shpejt do t\u00eb shkruaj nj\u00eb postim tjet\u00ebr p\u00ebr faz\u00ebn e dyt\u00eb: si kaluam n\u00eb procesin GitOps me <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/weaveworks\/flux\">Flux<\/a><\/noindex>. Do t\u00eb tregoj se si e kemi konceptuar gjith\u00e7ka dhe me \u00e7far\u00eb v\u00ebshtir\u00ebsish jemi p\u00ebrballur (disa depozita, sekrete, etj.). Q\u00ebndroni t\u00eb informuar.<\/p>\n<p><\/p>\n<p>K\u00ebtu p\u00ebrpiqemi t\u00eb p\u00ebrshkruajm\u00eb progresin ton\u00eb n\u00eb procesin e shp\u00ebrndarjes s\u00eb aplikacioneve gjat\u00eb viteve t\u00eb fundit, q\u00eb na ka \u00e7uar n\u00eb mendimin p\u00ebr qasjen GitOps. Endae nuk e kemi arritur q\u00ebllimin dhe do t\u00eb raportojm\u00eb rezultatet, por tani jemi t\u00eb bindur se vepruam si duhet kur vendos\u00ebm t\u00eb thjeshtojm\u00eb gjith\u00e7ka dhe ta afrojm\u00eb me zakonet e zhvilluesve.<\/p>\n<p>Burimi: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/458934\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041a\u0430\u043a Dailymotion \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 Kubernetes: \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u041c\u044b \u0432 Dailymotion \u043d\u0430\u0447\u0430\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Kubernetes \u0432 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0435 3 \u0433\u043e\u0434\u0430 \u043d\u0430\u0437\u0430\u0434. \u041d\u043e \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430\u0445 \u0442\u043e \u0435\u0449\u0435 \u0443\u0434\u043e\u0432\u043e\u043b\u044c\u0441\u0442\u0432\u0438\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043b\u0435\u0442 \u043c\u044b \u0441\u0442\u0430\u0440\u0430\u043b\u0438\u0441\u044c \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c \u043d\u0430\u0448\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0438 \u0440\u0430\u0431\u043e\u0447\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b. \u0421 \u0447\u0435\u0433\u043e \u043d\u0430\u0447\u0430\u043b\u043e\u0441\u044c \u0417\u0434\u0435\u0441\u044c \u043c\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u043c, \u043a\u0430\u043a \u043c\u044b \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u0435\u043c \u043d\u0430\u0448\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430\u0445 Kubernetes \u043f\u043e [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-35955","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.0.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041a\u0430\u043a Dailymotion \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 Kubernetes: \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u041c\u044b \u0432 Dailymotion \u043d\u0430\u0447\u0430\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Kubernetes \u0432 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0435 3 \u0433\u043e\u0434\u0430 \u043d\u0430\u0437\u0430\u0434. \u041d\u043e \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430\u0445 \u0442\u043e \u0435\u0449\u0435 \u0443\u0434\u043e\u0432\u043e\u043b\u044c\u0441\u0442\u0432\u0438\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043b\u0435\u0442 \u043c\u044b \u0441\u0442\u0430\u0440\u0430\u043b\u0438\u0441\u044c \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c \u043d\u0430\u0448\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0438 \u0440\u0430\u0431\u043e\u0447\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b. \u0421 \u0447\u0435\u0433\u043e \u043d\u0430\u0447\u0430\u043b\u043e\u0441\u044c \u0417\u0434\u0435\u0441\u044c \u043c\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u043c, \u043a\u0430\u043a \u043c\u044b \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u0435\u043c \u043d\u0430\u0448\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430\u0445 Kubernetes \u043f\u043e\" \/>\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\/razvertyvanie-prilozhenij-na-neskolkih-klasterah-kubernetes-s-helm\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.0.1\" \/>\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\udd47\u0420\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430\u0445 Kubernetes \u0441 Helm | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041a\u0430\u043a Dailymotion \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 Kubernetes: \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u041c\u044b \u0432 Dailymotion \u043d\u0430\u0447\u0430\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Kubernetes \u0432 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0435 3 \u0433\u043e\u0434\u0430 \u043d\u0430\u0437\u0430\u0434. \u041d\u043e \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430\u0445 \u0442\u043e \u0435\u0449\u0435 \u0443\u0434\u043e\u0432\u043e\u043b\u044c\u0441\u0442\u0432\u0438\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043b\u0435\u0442 \u043c\u044b \u0441\u0442\u0430\u0440\u0430\u043b\u0438\u0441\u044c \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c \u043d\u0430\u0448\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0438 \u0440\u0430\u0431\u043e\u0447\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b. \u0421 \u0447\u0435\u0433\u043e \u043d\u0430\u0447\u0430\u043b\u043e\u0441\u044c \u0417\u0434\u0435\u0441\u044c \u043c\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u043c, \u043a\u0430\u043a \u043c\u044b \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u0435\u043c \u043d\u0430\u0448\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430\u0445 Kubernetes \u043f\u043e\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/razvertyvanie-prilozhenij-na-neskolkih-klasterah-kubernetes-s-helm\" \/>\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=\"2019-10-31T19:08:26+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:08:26+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\udd47Shp\u00ebrndarja e aplikacioneve n\u00eb disa klastera Kubernetes me Helm | ProHoster","description":"Si e p\u00ebrdor Dailymotion Kubernetes: shp\u00ebrndarja e aplikacioneve Ne n\u00eb Dailymotion filluam t\u00eb p\u00ebrdorim Kubernetes n\u00eb prodhim 3 vjet m\u00eb par\u00eb. Por shp\u00ebrndarja e aplikacioneve n\u00eb disa klastera \u00ebsht\u00eb nj\u00eb p\u00ebrvoj\u00eb e ve\u00e7ant\u00eb, prandaj gjat\u00eb viteve t\u00eb fundit kemi punuar p\u00ebr t\u00eb p\u00ebrmir\u00ebsuar mjetet dhe proceset tona. Nga ku filloi K\u00ebtu do t\u00eb flasim se si i shp\u00ebrndajm\u00eb aplikacionet tona n\u00eb disa klastera Kubernetes sipas","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/razvertyvanie-prilozhenij-na-neskolkih-klasterah-kubernetes-s-helm","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\udd47\u0420\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430\u0445 Kubernetes \u0441 Helm | ProHoster","og:description":"\u041a\u0430\u043a Dailymotion \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 Kubernetes: \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u041c\u044b \u0432 Dailymotion \u043d\u0430\u0447\u0430\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Kubernetes \u0432 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0435 3 \u0433\u043e\u0434\u0430 \u043d\u0430\u0437\u0430\u0434. \u041d\u043e \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430\u0445 \u0442\u043e \u0435\u0449\u0435 \u0443\u0434\u043e\u0432\u043e\u043b\u044c\u0441\u0442\u0432\u0438\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043b\u0435\u0442 \u043c\u044b \u0441\u0442\u0430\u0440\u0430\u043b\u0438\u0441\u044c \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c \u043d\u0430\u0448\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0438 \u0440\u0430\u0431\u043e\u0447\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b. \u0421 \u0447\u0435\u0433\u043e \u043d\u0430\u0447\u0430\u043b\u043e\u0441\u044c \u0417\u0434\u0435\u0441\u044c \u043c\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u043c, \u043a\u0430\u043a \u043c\u044b \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u0435\u043c \u043d\u0430\u0448\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430\u0445 Kubernetes \u043f\u043e","og:url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/razvertyvanie-prilozhenij-na-neskolkih-klasterah-kubernetes-s-helm","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":"2019-10-31T19:08:26+00:00","article:modified_time":"2019-10-31T19:08:26+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"35955","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":"2026-01-22 01:25:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:53:31","updated":"2026-01-22 01:25:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/35955","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=35955"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/35955\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=35955"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=35955"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=35955"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}