{"id":94977,"date":"2020-09-24T07:43:00","date_gmt":"2020-09-24T05:43:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/nashi-vyvody-za-god-migraczii-gitlab-com-na-kubernetes"},"modified":"2020-09-24T07:43:00","modified_gmt":"2020-09-24T05:43:00","slug":"nashi-vyvody-za-god-migraczii-gitlab-com-na-kubernetes","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/nashi-vyvody-za-god-migraczii-gitlab-com-na-kubernetes","title":{"rendered":"Na\u0161e ugotovitve po letu migracije GitLab.com na Kubernetes","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><i><b>Op. prev.<\/b>: Adaptacija Kubernetes v GitLab se smatra jednim od dva glavna faktora koji doprinose rastu kompanije. Ipak, do nedavno, infrastruktura online usluge GitLab.com je bila izgra\u0111ena na virtuelnim ma\u0161inama, a migracija u K8s je zapo\u010dela pre oko godine, koja jo\u0161 uvek nije zavr\u0161ena. Rado predstavljamo prevod nedavne \u010dlanka SRE in\u017eenjera GitLab-a o tome kako to funkcioni\u0161e i koje zaklju\u010dke donose in\u017eenjeri uklju\u010deni u projekat.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Na\u0161e ugotovitve po letu migracije GitLab.com na Kubernetes\" src=\"\/wp-content\/uploads\/2020\/09\/58429abf60cd19a49c5ce593051c2fca.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNa\u0161e infrastrukturne odjele ve\u0107 gotovo godinu dana se bave migracijom svih usluga koje rade na GitLab.com u Kubernetes. Tokom tog perioda suo\u010dili smo se s problemima koji nisu vezani samo za preme\u0161tanje usluga u Kubernetes, ve\u0107 i za upravljanje hibridnim deploymentom tokom prelaza. O dragocenim lekcima koje smo nau\u010dili govorit \u0107emo u ovom \u010dlanku.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Od samog po\u010detka GitLab.com, njegovi serveri su radili u oblaku na virtuelnim ma\u0161inama. Tim virtuelnim ma\u0161inama upravlja Chef, a njihova instalacija se vr\u0161i pomo\u0107u na\u0161eg <noindex><a rel=\"nofollow\" href=\"https:\/\/about.gitlab.com\/install\/#ubuntu\">official Linux paketa<\/a><\/noindex>. <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-org\/release\/docs\/-\/blob\/master\/general\/deploy\/gitlab-com-deployer.md\">Strategija implementacije<\/a><\/noindex> u slu\u010daju da je potrebno a\u017eurirati aplikaciju, sastoji se u jednostavnom a\u017euriranju servera nagla\u0161eno koordiniranim redosledom uz pomo\u0107 CI pipeline-a. Ova metoda \u2014 iako spora i pomalo <noindex><a rel=\"nofollow\" href=\"https:\/\/about.gitlab.com\/handbook\/values\/#boring-solutions\">dosadna<\/a><\/noindex> garantuje da GitLab.com primenjuje iste metode instaliranja i konfiguracije koje koriste korisnici lokalnih <i>(self-managed)<\/i> instalacija GitLab-a, koje koriste na\u0161e Linux pakete.<\/p>\n<p>Koristimo ovu metodu jer je izuzetno va\u017eno osetiti sve brige i radosti koje obi\u010dni \u010dlanovi zajednice do\u017eivljavaju dok instaliraju i konfiguri\u0161u svoje kopije GitLab-a. Ovaj pristup je dobro funkcionisao odre\u0111eno vreme, me\u0111utim, kada je broj projekata na GitLab-u prema\u0161io 10 miliona, shvatili smo da vi\u0161e ne zadovoljava na\u0161e potrebe za skaliranjem i implementacijom.<\/p>\n<h2>Prvi koraci ka Kubernetes i cloud-native GitLab<\/h2>\n<p>\nU 2017. godini, projekat je stvoren <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-org\/charts\">GitLab Charts<\/a><\/noindex> za pripravo GitLab za implementacijo v oblaku ter da bi uporabnikom omogo\u010dili namestitev GitLab v Kubernetes grozde. Takrat smo vedeli, da bo prenos GitLab v Kubernetes pove\u010dal mo\u017enosti skaliranja SaaS platforme, poenostavil implementacije in pove\u010dal u\u010dinkovitost rabe ra\u010dunalni\u0161kih virov. Hkrati so mnoge funkcije na\u0161e aplikacije temeljile na name\u0161\u010denih NFS particijah, kar je upo\u010dasnilo prehod z virtualnih strojev.<\/p>\n<p>Pot do cloud native in Kubernetes je na\u0161im in\u017eenirjem omogo\u010dila, da so na\u010drtovali postopni prehod, pri katerem smo se odrekli nekaterim odvisnostim aplikacije od omre\u017enih shranjevanj, hkrati pa \u0161e naprej razvijali nove funkcije. Odkar smo za\u010deli na\u010drtovati migracijo poleti 2019, so bila \u0161tevilna ta omejitev odpravljena, proces prenosa GitLab.com na Kubernetes pa sedaj poteka s polno paro!<\/p>\n<h2>Zna\u010dilnosti delovanja GitLab.com v Kubernetesu<\/h2>\n<p>\nZa GitLab.com koristimo jedinstveni regionalni GKE klaster koji obra\u0111uje sav saobra\u0107aj aplikacije. Kako bismo minimalizovali slo\u017eenost (ve\u0107 dovoljno komplikovane) migracije, fokusiramo se na usluge koje ne zavise od lokalne pohrane ili NFS-a. GitLab.com koristi prete\u017eno monolitnu kodnu bazu na Rails-u, a usmeravamo saobra\u0107aj na razli\u010dite endpoint-ove koji su izolovani u svoje vlastite \u010dvorove prema karakteristikama optere\u0107enja.<\/p>\n<p>U slu\u010daju frontenda, ovi tipovi su podeljeni na zahteve za web, API, Git SSH\/HTTPS i Registry. U slu\u010daju backenda, razdvajamo job-ove u redovima prema razli\u010ditim karakteristikama zavisno od <noindex><a rel=\"nofollow\" href=\"https:\/\/about.gitlab.com\/blog\/2020\/06\/24\/scaling-our-use-of-sidekiq\/\">vnaprej dolo\u010denih mejnikov virov<\/a><\/noindex>, ki nam omogo\u010dajo dolo\u010ditev ciljev ravni storitev (Service-Level Objectives, SLOs) za razli\u010dne obremenitve.<\/p>\n<p>Vse te storitve GitLab.com so nastavljene s pomo\u010djo nemodificiranega Helm grafa GitLab. Konfiguracija se izvaja v subgrafih, ki jih lahko izbira vklju\u010dujemo, ko postopoma prena\u0161amo storitve v grozd. Tudi ob upo\u0161tevanju, da smo se odlo\u010dili, da ne vklju\u010dimo v migracijo nekaterih na\u0161ih stateful storitev, kot so Redis, Postgres, GitLab Pages in Gitaly, uporaba Kubernetes omogo\u010da drasti\u010dno zmanj\u0161anje \u0161tevila VM-ov, ki jih trenutno upravlja Chef.<\/p>\n<h2>Pripravljenost in upravljanje konfiguracije Kubernetes<\/h2>\n<p>\nSve postavke upravlja sam GitLab. Za to se koriste tri konfiguracijska projekta zasnovana na Terraform-u i Helm-u. Trudimo se da svuda, gde je to mogu\u0107e, koristimo sam GitLab za pokretanje GitLab-a, ali za operativne zadatke imamo posebnu instalaciju GitLab-a. Ona je potrebna da ne zavisimo od dostupnosti GitLab.com prilikom provo\u0111enja implementacija i a\u017euriranja GitLab.com.<\/p>\n<p>\u010ceprav na\u0161i pipeline-i za Kubernetes klaster delujejo na lo\u010deni namestitvi GitLab, imajo repozitoriji kode zrcaljenja, javno dostopna na naslednjih naslovih:<\/p>\n<ul>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-com\/gl-infra\/k8s-workloads\/gitlab-com\">k8s-workloads\/gitlab-com<\/a><\/noindex> \u2014 konfiguracijska obveznica GitLab.com za Helm chart GitLab;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-com\/gl-infra\/k8s-workloads\/gitlab-helmfiles\/\">k8s-workloads\/gitlab-helmfiles<\/a><\/noindex> \u2014 vsebuje konfiguracije za storitve, ki niso neposredno povezane z aplikacijo GitLab. Sem spadajo konfiguracije za bele\u017eenje in spremljanje klasterja, kot tudi za integrirane instrumente, kot je PlantUML;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-com\/gitlab-com-infrastructure\">Gitlab-com-infrastructure<\/a><\/noindex> \u2014 konfiguracija Terraform za Kubernetes in staro (legacy) VM infrastrukturo. Tukaj se konfigurirajo vsi viri, potrebni za zagon klasterja, vklju\u010dno s samim klasterjem, bazeni vozli\u0161\u010d, ra\u010duni storitev, rezervacijo IP naslovov.<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"Na\u0161e ugotovitve po letu migracije GitLab.com na Kubernetes\" src=\"\/wp-content\/uploads\/2020\/09\/612125403171d73106a081bf4244a52b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Ko so spremembe uvedene, se prika\u017ee javna <\/i><noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-com\/gl-infra\/k8s-workloads\/gitlab-com\/-\/merge_requests\/315#note_390180361\"><i>kratek povzetek<\/i><\/a><\/noindex><i> s povezavo na podroben diff, ki ga SRE analizira pred uvedbo sprememb v klaster.<\/i><\/p>\n<p>Za SRE link vodi na detaljan diff u instalaciji GitLab-a koja se koristi za operaciju i \u010diji je pristup ograni\u010den. Ovo omogu\u0107ava zaposlenima i zajednici bez pristupa operativnom projektu (koji je otvoren samo za SRE) da pregledaju predlo\u017eene izmene u konfiguraciji. Kombinovanjem javnog GitLab-a za kod s privatnim primerkom za CI pipeline-ove, zadr\u017eavamo jedinstven radni tok, istovremeno osiguravaju\u0107i neovisnost od GitLab.com prilikom a\u017euriranja konfiguracije.<\/p>\n<h2>Kaj smo ugotovili med migracijo<\/h2>\n<p>\nMed selitvijo se je nakopi\u010dila izku\u0161nja, ki jo uporabljamo za nove migracije in implementacije v Kubernetes.<\/p>\n<h3>1. Pove\u010danje stro\u0161kov zaradi prometa med obmo\u010dji dostopnosti<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Na\u0161e ugotovitve po letu migracije GitLab.com na Kubernetes\" src=\"\/wp-content\/uploads\/2020\/09\/3dce44b3f803ffcea13e0101e7343d91.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Dnevna egress statistika (bajti na dan) za park Git shranjevanj na GitLab.com<\/i><\/p>\n<p>Google deli svojo mre\u017eo na regije. Te se nato delijo na obmo\u010dja dostopnosti (AZ). Git gostovanje je povezano z velikimi koli\u010dinami podatkov, zato je pomembno, da nadzorujemo omre\u017eni egress. V primeru notranjega prometa je egress brezpla\u010den le, \u010de ostaja znotraj ene same razpolo\u017eljive cona. Ob izdaji tega \u010dlanka predamo pribli\u017eno 100 TB podatkov v obi\u010dajnem delovnem dnevu (in to je samo za Git repozitorije). Storitve, ki so v na\u0161i prej\u0161nji topologiji, temelji na VM, bile na istih virtualnih strojih, zdaj delujejo v razli\u010dnih pod&#8217;ih Kubernetes. To pomeni, da lahko del prometa, ki je bil prej lokaliziran za VM, potencialno prese\u017ee meje obmo\u010dij dostopnosti.<\/p>\n<p>Regionalni GKE klasteri omogu\u0107avaju pokrivanje vi\u0161e zona dostupnosti za rezervaciju. Razmatramo mogu\u0107nost <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-com\/gl-infra\/delivery\/-\/issues\/1175\">podeliti regionalni GKE klaster na jednonozne klastere<\/a><\/noindex> za servise koji generi\u0161u velike koli\u010dine saobra\u0107aja. To \u0107e smanjiti tro\u0161kove egress-a uz o\u010duvanje rezervacije na nivou klastera.<\/p>\n<h3>2. Limit&#8217;i, request&#8217;i virov in prenos<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Na\u0161e ugotovitve po letu migracije GitLab.com na Kubernetes\" src=\"\/wp-content\/uploads\/2020\/09\/6e2e1ca4d37666b49358d94cd8660c56.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Broj replika koji obra\u0111uju production saobra\u0107aj na registry.gitlab.com. Saobra\u0107aj dosti\u017ee svoj vrhunac u ~15:00 UTC.<\/i><\/p>\n<p>Na\u0161a zgodba o migraciji se je za\u010dela avgusta 2019, ko smo prvi\u010d preselili storitev \u2014 register kontejnerjev GitLab (GitLab Container Registry) \u2014 v Kubernetes. Ta kriti\u010dno pomembna storitev z visokim prometom se je dobro prilegala prvi migraciji, saj predstavlja stateless aplikacijo z malo zunanjimi odvisnostmi. Prva te\u017eava, s katero smo se sre\u010dali, je bilo veliko \u0161tevilo izgnanih pod&#8217;ov zaradi pomanjkanja pomnilnika na vozli\u0161\u010dih. Zaradi tega smo morali spremeniti request&#8217;e in limit&#8217;e.<\/p>\n<p>Ugotovili smo, da je v primeru aplikacije, ki s\u010dasoma raste v porabi pomnilnika, nizke vrednosti za request&#8217;e (rezervere pomnilnika za vsak pod&#8217;) skupaj z \"radodarnim\" trdnim limit&#8217;om za uporabo privedlo do saturacije <i>(saturation)<\/i> \u010dvorova i visokom nivou izba\u010denosti. Da bismo re\u0161ili ovaj problem, odlu\u010deno je <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-com\/gl-infra\/delivery\/-\/issues\/998#note_388983696\">odlo\u010deno je bilo pove\u010dati request&#8217;e in zmanj\u0161ati limit&#8217;e<\/a><\/noindex>. To je zmanj\u0161alo pritisk na vozli\u0161\u010da in omogo\u010dilo \u017eivljenjski cikel pod&#8217;ov, ki ni ustvarjal prekomernega pritiska na vozli\u0161\u010de. Sedaj za\u010dnemo migracije s radodarnimi (in skoraj enakimi) vrednostmi request&#8217;ov in limit&#8217;ov ter jih prilagajamo po potrebi.<\/p>\n<h3>3. Merila in dnevni\u0161ki zapisi<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Na\u0161e ugotovitve po letu migracije GitLab.com na Kubernetes\" src=\"\/wp-content\/uploads\/2020\/09\/66d1fd47b57d5826f13defa6e6a7fe3c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Infrastrukturna enota se osredoto\u010da na zakasnitve, odstotek napak in saturacijo z dolo\u010denimi <\/i><noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Service-level_objective\"><i>cilji nivoja storitve<\/i><\/a><\/noindex><i> (SLO), vezanimi na <\/i><noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-com\/dashboards-gitlab-com\/-\/metrics\/sla-dashboard.yml?environment=1790496&amp;duration_seconds=86400\"><i>skupno dostopnost na\u0161ega sistema<\/i><\/a><\/noindex><i>.<\/i><\/p>\n<p>V preteklem letu je bil eden klju\u010dnih dogodkov v infrastrukturni enoti izbolj\u0161anje spremljanja in dela z SLO. SLO so nam omogo\u010dili postaviti cilje za posamezne storitve, za katere smo skrbno spremljali med migracijo. A tudi z izbolj\u0161anim nadzorom ni vedno mogo\u010de takoj opaziti te\u017eav, ob uporabi meril in opozoril. Na primer, osredoto\u010deni na zakasnitve in odstotek napak, ne pokrivamo popolnoma vseh scenarijev uporabe storitve, ki prehaja migracijo.<\/p>\n<p>Ta te\u017eava je bila ugotovljena skoraj takoj po prenosu dela delovnih obremenitev v grozd. \u0160e posebej se je izkazala, ko je bilo treba preveriti funkcije, \u0161tevilo zahtevkov za katere je majhno, vendar imajo zelo specifi\u010dne konfiguracijske odvisnosti. Ena klju\u010dnih lekcij po zaklju\u010dku migracije je bila potreba, da pri spremljanju upo\u0161tevamo ne le merila, temve\u010d tudi dnevnike in 'dolgi rep' <i>(govorimo o <\/i><noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Long_tail\"><i>tak\u0161nem njihovem razporedu<\/i><\/a><\/noindex><i> na grafu \u2014 op. prev.)<\/i> napak. Zdaj za vsako migracijo vklju\u010dujemo podroben seznam zahtevkov za dnevnike <i>(log queries)<\/i> in na\u010drtujemo jasne postopke za vra\u010dilo, ki jih ob morebitnih te\u017eavah lahko prenesemo iz ene izmena na drugo.<\/p>\n<p>Paralelno obravnavanje istih zahtevkov na stari VM-infrastrukturi in novi, ki temelji na Kubernetesu, je predstavljalo edinstven izziv. Nasprotno od migracije tipa lift-and-shift <i>(hitro prenesene aplikacije 'tak\u0161ne, kot so' v novo infrastrukturo; ve\u010d lahko preberete, na primer, <\/i><noindex><a rel=\"nofollow\" href=\"https:\/\/www.ibm.com\/cloud\/learn\/lift-and-shift\"><i>ovde<\/i><\/a><\/noindex><i> \u2014 op. prev.)<\/i>, so\u010dasno delovanje na \"starih\" VM in Kubernetes zahteva, da so orodja za spremljanje zdru\u017eljiva z obema okoljema in znajo zdru\u017eiti metrike v enoten pogled. Pomembno je, da uporabljamo iste nadzorne plo\u0161\u010de in poizvedbe za dnevnike, da dose\u017eemo usklajeno opazovanje med prehodnim obdobjem.<\/p>\n<h3>4. Preusmeritev prometa na nov klaster<\/h3>\n<p>\nZa GitLab.com je del stre\u017enikov namenjen <noindex><a rel=\"nofollow\" href=\"https:\/\/about.gitlab.com\/handbook\/engineering\/#canary-testing\">kanarijski (canary) fazi<\/a><\/noindex>. Kanarijski park podpira na\u0161e interne projekte, hkrati pa lahko <noindex><a rel=\"nofollow\" href=\"https:\/\/next.gitlab.com\/\">vklju\u010duje uporabnike<\/a><\/noindex>. Toda predvsem je namenjen preverjanju sprememb v infrastrukturi in aplikaciji. Prva prenesena storitev je za\u010dela z obravnavo omejene koli\u010dine internega prometa, in ta pristop \u0161e naprej uporabljamo za zagotavljanje SLO pred preusmeritvijo celotnega prometa v klaster.<\/p>\n<p>Pri migraciji to pomeni, da najprej v Kubernetes preusmerimo zahteve za interne projekte, nato pa postopoma preusmerjamo preostali promet v klaster z spremembo te\u017ee za backend prek HAProxy. Med prehodom z VM na Kubernetes se je izkazalo, da je zelo koristno imeti enostaven na\u010din za preusmerjanje prometa med staro in novo infrastrukturo ter ohranjati staro infrastrukturo pripravljeno za povratek v prvih nekaj dneh po migraciji.<\/p>\n<h3>5. Rezervne zmogljivosti pod&#8217;ov in njihova uporaba<\/h3>\n<p>\nSkoraj takoj je bila identificirana naslednja te\u017eava: pod&#8217;i za storitev Registry so se hitro zagnali, medtem ko je zagon pod&#8217;ov za Sidekiq trajal do <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-org\/charts\/gitlab\/-\/issues\/1775\">dveh minut<\/a><\/noindex>. Dolgotrajno zagon pod&#8217;ov za Sidekiq je postal te\u017eava, ko smo za\u010deli migrirati v Kubernetes delovne obremenitve za delavce, ki morajo hitro obdelovati job&#8217;e in se hitro obsegati.<\/p>\n<p>V tem primeru je lekcija, da je, \u010deprav Horizontal Pod Autoscaler (HPA) v Kubernetes dobro voden pri rasti prometa, pomembno upo\u0161tevati zna\u010dilnosti delovnih obremenitev in dodeliti rezervne kapacitete podov (\u0161e posebej v razmerah neenakomerne porazdelitve povpra\u0161evanja). V na\u0161em primeru smo opazili nenaden skok nalog, kar je povzro\u010dilo hitro skaliranje, kar je privedlo do nasi\u010denja virov CPU, preden smo uspeli raz\u0161iriti skupino vozli\u0161\u010d.<\/p>\n<p>Vedno je sku\u0161njava iz klasterja iztisniti \u010dim ve\u010d, a mi, ki smo se sprva soo\u010dili s te\u017eavami pri zmogljivosti, zdaj za\u010dnemo s \u0161irokim prora\u010dunom za pode in ga kasneje zmanj\u0161ujemo, skrbno spremljamo SLO. Zagon podov za storitev Sidekiq se je znatno pospe\u0161il in zdaj povpre\u010dno traja pribli\u017eno 40 sekund. <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-org\/charts\/gitlab\/-\/issues\/1775\">Zmanj\u0161anje \u010dasa zagona podov<\/a><\/noindex> so tako GitLab.com kot na\u0161i uporabniki samostojnih in\u0161talacij, ki delujejo z uradnim Helm chartom GitLab, pridobili.<\/p>\n<h2>Zaklju\u010dek<\/h2>\n<p>\nPo selitvi vsake storitve smo u\u017eivali v prednostih uporabe Kubernetes v proizvodnji: hitrej\u0161e in varnej\u0161e uvajanje aplikacij, skaliranje in bolj u\u010dinkovita dodelitev virov. Prednosti migracije presegajo storitev GitLab.com. Vsako izbolj\u0161avo uradnega Helm charta pridobijo tudi njegovi uporabniki.<\/p>\n<p>Upam, da vam je bila zgodba o na\u0161ih dogodiv\u0161\u010dinah z migracijo v Kubernetes v\u0161e\u010d. Nadaljujemo s selitvijo novih storitev v kluster. Dodatne informacije lahko najdete v naslednjih objavah:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/about.gitlab.com\/handbook\/engineering\/infrastructure\/production\/kubernetes\/gitlab-com\/\">Zakaj se selimo v Kubernetes?<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/about.gitlab.com\/handbook\/engineering\/infrastructure\/production\/architecture\/#gitlab-com-on-kubernetes\">GitLab.com na Kubernetesu<\/a><\/noindex>\u00bb;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/groups\/gitlab-com\/gl-infra\/-\/epics\/112\">Epik o selitvi GitLab.com na Kubernetes<\/a><\/noindex>.<\/li>\n<\/ul>\n<p><\/p>\n<h2>P.S. od prevajalca<\/h2>\n<p>\nPreberite tudi na na\u0161em blogu:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/519962\/\">3 leta s Kubernetes v proizvodnji: to smo ugotovili<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/504396\/\">10 tipi\u010dnih gre\u0161aka pri kori\u0161\u0107enju Kubernetes-a.<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/335814\/\">Zgodbe o uspehu Kubernetes v proizvodnji. Del 3: GitHub<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/440278\/\">\u041f\u0435\u0440\u0435\u0445\u043e\u0434 Tinder \u043d\u0430 Kubernetes<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>Izvor: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/520150\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u043c. \u043f\u0435\u0440\u0435\u0432.: \u0430\u0434\u0430\u043f\u0442\u0430\u0446\u0438\u044e Kubernetes \u0432 GitLab \u0441\u0447\u0438\u0442\u0430\u044e\u0442 \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u0434\u0432\u0443\u0445 \u0433\u043b\u0430\u0432\u043d\u044b\u0445 \u0444\u0430\u043a\u0442\u043e\u0440\u043e\u0432, \u0441\u043f\u043e\u0441\u043e\u0431\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0440\u043e\u0441\u0442\u0443 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438. \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u0434\u043e \u043d\u0435\u0434\u0430\u0432\u043d\u0435\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043e\u043d\u043b\u0430\u0439\u043d-\u0441\u0435\u0440\u0432\u0438\u0441\u0430 GitLab.com \u0431\u044b\u043b\u0430 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u043d\u0430 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u0448\u0438\u043d\u0430\u0445, \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u043a\u043e\u043b\u043e \u0433\u043e\u0434\u0430 \u043d\u0430\u0437\u0430\u0434 \u043d\u0430\u0447\u0430\u043b\u0430\u0441\u044c \u0435\u0451 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044f \u0432 K8s, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u043d\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430. \u0420\u0430\u0434\u044b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u043d\u0435\u0434\u0430\u0432\u043d\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 SRE-\u0438\u043d\u0436\u0435\u043d\u0435\u0440\u0430 GitLab \u043e \u0442\u043e\u043c, \u043a\u0430\u043a [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":94978,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-94977","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.4 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0438\u043c. \u043f\u0435\u0440\u0435\u0432.: \u0430\u0434\u0430\u043f\u0442\u0430\u0446\u0438\u044e Kubernetes \u0432 GitLab \u0441\u0447\u0438\u0442\u0430\u044e\u0442 \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u0434\u0432\u0443\u0445 \u0433\u043b\u0430\u0432\u043d\u044b\u0445 \u0444\u0430\u043a\u0442\u043e\u0440\u043e\u0432, \u0441\u043f\u043e\u0441\u043e\u0431\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0440\u043e\u0441\u0442\u0443 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438.\" \/>\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\/sl\/blog\/administrirovanie\/nashi-vyvody-za-god-migraczii-gitlab-com-na-kubernetes\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sl_SI\" \/>\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\u041d\u0430\u0448\u0438 \u0432\u044b\u0432\u043e\u0434\u044b \u0437\u0430 \u0433\u043e\u0434 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 GitLab.com \u043d\u0430 Kubernetes | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u043c. \u043f\u0435\u0440\u0435\u0432.: \u0430\u0434\u0430\u043f\u0442\u0430\u0446\u0438\u044e Kubernetes \u0432 GitLab \u0441\u0447\u0438\u0442\u0430\u044e\u0442 \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u0434\u0432\u0443\u0445 \u0433\u043b\u0430\u0432\u043d\u044b\u0445 \u0444\u0430\u043a\u0442\u043e\u0440\u043e\u0432, \u0441\u043f\u043e\u0441\u043e\u0431\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0440\u043e\u0441\u0442\u0443 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/nashi-vyvody-za-god-migraczii-gitlab-com-na-kubernetes\" \/>\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-09-24T05:43:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-09-24T05:43:00+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\udd47 Na\u0161i sklepi po letu migracije GitLab.com na Kubernetes | ProHoster","description":"Opomba prev.: Prilagoditev Kubernetes v GitLabu velja za enega od dveh glavnih dejavnikov, ki prispevata k rasti podjetja.","canonical_url":"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/nashi-vyvody-za-god-migraczii-gitlab-com-na-kubernetes","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sl_SI","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\u041d\u0430\u0448\u0438 \u0432\u044b\u0432\u043e\u0434\u044b \u0437\u0430 \u0433\u043e\u0434 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 GitLab.com \u043d\u0430 Kubernetes | ProHoster","og:description":"\u041f\u0440\u0438\u043c. \u043f\u0435\u0440\u0435\u0432.: \u0430\u0434\u0430\u043f\u0442\u0430\u0446\u0438\u044e Kubernetes \u0432 GitLab \u0441\u0447\u0438\u0442\u0430\u044e\u0442 \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u0434\u0432\u0443\u0445 \u0433\u043b\u0430\u0432\u043d\u044b\u0445 \u0444\u0430\u043a\u0442\u043e\u0440\u043e\u0432, \u0441\u043f\u043e\u0441\u043e\u0431\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0440\u043e\u0441\u0442\u0443 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438.","og:url":"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/nashi-vyvody-za-god-migraczii-gitlab-com-na-kubernetes","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-09-24T05:43:00+00:00","article:modified_time":"2020-09-24T05:43:00+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"94977","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 11:14:45","updated":"2022-10-03 07:39:43","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts\/94977","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/comments?post=94977"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts\/94977\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media\/94978"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media?parent=94977"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/categories?post=94977"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/tags?post=94977"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}