{"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\/hr\/blog\/administrirovanie\/nashi-vyvody-za-god-migraczii-gitlab-com-na-kubernetes","title":{"rendered":"Na\u0161i zaklju\u010dci nakon godine migracije GitLab.com na Kubernetes","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><i><b>Napomena za prijevod.<\/b>: adaptacija Kubernetes u GitLabu smatra se jednim od dva glavna faktora koji pridonose rastu tvrtke. Me\u0111utim, do nedavno je infrastruktura online servisa GitLab.com bila izgra\u0111ena na virtualnim ma\u0161inama, a migracija u K8s, koja jo\u0161 uvijek nije zavr\u0161ena, zapo\u010dela je prije otprilike godine. U\u017eivajte u prijevodu nedavne \u010dlanka SRE in\u017eenjera GitLaba o tome kako sve to izgleda i koje zaklju\u010dke donose in\u017eenjeri uklju\u010deni u projekt.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Na\u0161i zaklju\u010dci nakon godine migracije GitLab.com na Kubernetes\" src=\"\/wp-content\/uploads\/2020\/09\/58429abf60cd19a49c5ce593051c2fca.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVe\u0107 gotovo godinu dana na\u0161e infrastrukturno odjeljenje radi na migraciji svih usluga s GitLab.com na Kubernetes. Tijekom tog vremena suo\u010dili smo se s problemima vezanim ne samo za premje\u0161tanje usluga u Kubernetes, ve\u0107 i za upravljanje hibridnim raspore\u0111ivanjem tijekom prijelaza. O vrijednim lekcijama koje smo nau\u010dili bit \u0107e govora u ovom \u010dlanku.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Od samog po\u010detka GitLab.com njegovi su serveri radili u oblaku na virtualnim ma\u0161inama. Ove virtualne ma\u0161ine upravlja Chef, a njihova instalacija se vr\u0161i pomo\u0107u na\u0161eg <noindex><a rel=\"nofollow\" href=\"https:\/\/about.gitlab.com\/install\/#ubuntu\">slu\u017ebenog 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 razmjene<\/a><\/noindex> za slu\u010daj da je potrebno a\u017eurirati aplikaciju, sastoji se u jednostavnom a\u017euriranju parka servera koordiniranim uzastopnim redom pomo\u0107u CI pipelinea. Ova metoda \u2014 iako spora i pomalo <noindex><a rel=\"nofollow\" href=\"https:\/\/about.gitlab.com\/handbook\/values\/#boring-solutions\">dosadna<\/a><\/noindex> \u2014 jam\u010di da GitLab.com primjenjuje iste metode instalacije i konfiguracije kao i korisnici samostalnih <i>(self-managed)<\/i> instalacija GitLaba, koriste\u0107i za to na\u0161e Linux pakete.<\/p>\n<p>Koristimo ovu metodu jer je izuzetno va\u017eno iskusiti sve brige i radosti koje prolaze obi\u010dni \u010dlanovi zajednice kada instaliraju i postavljaju svoje kopije GitLaba. Ovaj pristup dobro je funkcionirao tijekom odre\u0111enog vremena, no kada je broj projekata na GitLabu pre\u0161ao 10 milijuna, 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 pokrenut je projekt <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-org\/charts\">GitLab Charts<\/a><\/noindex> za pripremu GitLaba za implementaciju u oblaku, kao i za pru\u017eanje korisnicima mogu\u0107nosti instalacije GitLaba u Kubernetes klastere. Tada smo znali da \u0107e premje\u0161tanje GitLaba u Kubernetes pove\u0107ati mogu\u0107nosti skaliranja SaaS platforme, pojednostaviti implementacije i pove\u0107ati efikasnost kori\u0161tenja ra\u010dunalnih resursa. U isto vrijeme, mnoge funkcije na\u0161e aplikacije su ovisile o montiranim NFS particijama, \u0161to je usporavalo prelazak sa virtualnih ma\u0161ina.<\/p>\n<p>Te\u017enja ka cloud native i Kubernetes omogu\u0107ila je na\u0161im in\u017eenjerima da planiraju postepeni prelazak, tijekom kojeg smo se odrekli nekih zavisnosti aplikacije od umre\u017eenih skladi\u0161ta, istovremeno nastavljaju\u0107i s razvojem novih funkcija. Otkako smo zapo\u010deli s planiranjem migracije ljeta 2019., mnoga od tih ograni\u010denja su otklonjena, a proces prelaska GitLab.com na Kubernetes sada te\u010de punom brzinom!<\/p>\n<h2>Karakteristike rada GitLab.com u Kubernetesu<\/h2>\n<p>\nZa GitLab.com koristimo jedinstveni regionalni GKE klaster koji obra\u0111uje sav promet aplikacije. Kako bismo umanjili slo\u017eenost (ionako komplicirane) migracije, usredoto\u010dujemo se na usluge koje ne ovise o lokalnom pohranjivanju ili NFS-u. GitLab.com uglavnom koristi monolitnu kodnu bazu na Rails-u, a promet usmjeravamo prema razli\u010ditim endpoint-ima, izoliranim u vlastitim skupinama \u010dvorova, ovisno o karakteristikama radnog optere\u0107enja.<\/p>\n<p>U slu\u010daju frontend-a, ovi tipovi dijele se na zahtjeve za web, API, Git SSH\/HTTPS i Registry. U slu\u010daju backend-a, razdvajamo poslove u redu prema raznim karakteristikama ovisno o <noindex><a rel=\"nofollow\" href=\"https:\/\/about.gitlab.com\/blog\/2020\/06\/24\/scaling-our-use-of-sidekiq\/\">predodre\u0111enim granicama resursa<\/a><\/noindex>, \u0161to nam omogu\u0107ava postavljanje ciljanih metrika razine usluge (Service-Level Objectives, SLOs) za razli\u010dita optere\u0107enja.<\/p>\n<p>Sve te usluge GitLab.com su konfigurirane pomo\u0107u nemodificiranog Helm chart-a GitLab. Konfiguracija se provodi u subchartovima koji se mogu selektivno uklju\u010divati kako postepeno premje\u0161tamo usluge u klaster. \u010cak i uz ulaganje da se ne uklju\u010de u migraciju neki od na\u0161ih stateful usluga, kao \u0161to su Redis, Postgres, GitLab Pages i Gitaly, kori\u0161tenje Kubernetes omogu\u0107ava radikalno smanjenje broja VM-ova kojima trenutno upravlja Chef.<\/p>\n<h2>Transparentnost i upravljanje konfiguracijom Kubernetes<\/h2>\n<p>\nSve postavke upravlja sam GitLab. Za to se koriste tri konfiguracijska projekta temeljena na Terraformu i Helmu. Trudimo se posvuda koristiti sam GitLab za pokretanje GitLab-a, ali za operativne zadatke imamo odvojenu instalaciju GitLab-a. Ona je potrebna da bismo bili neovisni o dostupnosti GitLab.com tijekom provo\u0111enja raspore\u0111ivanja i a\u017euriranja GitLab.com.<\/p>\n<p>Iako na\u0161i paketi za Kubernetes klaster rade na zasebnoj instalaciji GitLab-a, repozitoriji koda imaju zrcala, javno dostupna na sljede\u0107im adresama:<\/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 obavijest za GitLab.com za Helm grafikon;<\/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 sadr\u017ei konfiguracije za usluge koje nisu izravno povezane s aplikacijom GitLab. To uklju\u010duje konfiguracije za vo\u0111enje evidencije i pra\u0107enje klastera, kao i za integrirane alate poput PlantUML;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-com\/gitlab-com-infrastructure\">Gitlab-com-infrastructure<\/a><\/noindex> \u2014 Terraform konfiguracija za Kubernetes i staru (legacy) VM infrastrukturu. Ovdje se postavljaju svi resursi potrebni za pokretanje klastera, uklju\u010duju\u0107i sam klaster, grupe \u010dvorova, ra\u010dune servisa, rezervaciju IP adresa.<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"Na\u0161i zaklju\u010dci nakon godine migracije GitLab.com na Kubernetes\" src=\"\/wp-content\/uploads\/2020\/09\/612125403171d73106a081bf4244a52b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Prilikom izmjena prikazuje se javno <\/i><noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-com\/gl-infra\/k8s-workloads\/gitlab-com\/-\/merge_requests\/315#note_390180361\"><i>sa\u017eetak<\/i><\/a><\/noindex><i> s linkom na detaljan diff, koji SRE analizira prije nego \u0161to izvr\u0161i promjene u klasteru.<\/i><\/p>\n<p>Za SRE, poveznica vodi na detaljni dif u instalaciji GitLab-a koja se koristi za operaciju i kojoj je pristup ograni\u010den. To omogu\u0107ava zaposlenicima i zajednici bez pristupa operativnom projektu (koji je otvoren samo za SRE) da pregledaju predlo\u017eene izmjene u konfiguraciji. Kombiniranjem javnog primjerka GitLab-a za kod s privatnim primjerkom za CI pipeline-ove, zadr\u017eavamo jedinstveni radni proces, istovremeno osiguravaju\u0107i neovisnost o GitLab.com tijekom a\u017euriranja konfiguracije.<\/p>\n<h2>\u0160to smo saznali tijekom migracije<\/h2>\n<p>\nTijekom preseljenja ste\u010deno je iskustvo koje primjenjujemo na nove migracije i implementacije u Kubernetesu.<\/p>\n<h3>1. Pove\u0107anje tro\u0161kova zbog prometa izme\u0111u zona dostupnosti<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Na\u0161i zaklju\u010dci nakon godine 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 (bajtovi po danu) za park Git repozitorija na GitLab.com<\/i><\/p>\n<p>Google dijeli svoju mre\u017eu na regije. Te se zatim dijele na zone dostupnosti (AZ). Git hosting zahtijeva velike koli\u010dine podataka, stoga je va\u017eno kontrolirati mre\u017eni egress. U slu\u010daju unutarnjeg prometa, egress je besplatan samo ako ostaje unutar jedne zone dostupnosti. U trenutku pisanja ovog \u010dlanka, isporu\u010dujemo pribli\u017eno 100 TB podataka u obi\u010dan radni dan (i to samo za Git repozitorije). Usluge koje su u na\u0161oj staroj topologiji temeljnoj na VM-u bile na istim virtualnim strojevima, sada rade u razli\u010ditim podovima Kubernetes-a. To zna\u010di da neki dio prometa, koji je prije bio lokalni za VM, potencijalno mo\u017ee izlaziti izvan zona dostupnosti.<\/p>\n<p>Regionalni GKE klasteri omogu\u0107uju pokrivanje vi\u0161e zona dostupnosti za rezerviranje. Razmatramo mogu\u0107nost <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-com\/gl-infra\/delivery\/-\/issues\/1175\">podijeliti regionalni GKE klaster na jednonadne klastere<\/a><\/noindex> za usluge koje generiraju velike koli\u010dine prometa. To \u0107e smanjiti tro\u0161kove egress uz odr\u017eavanje rezervacije na razini klastera.<\/p>\n<h3>2. Limitovi, requesti resursa i skaliranje<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Na\u0161i zaklju\u010dci nakon godine migracije GitLab.com na Kubernetes\" src=\"\/wp-content\/uploads\/2020\/09\/6e2e1ca4d37666b49358d94cd8660c56.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Broj replika koje obra\u0111uju produkcijski promet na registry.gitlab.com. Promet dose\u017ee svoj vrhunac oko 15:00 UTC.<\/i><\/p>\n<p>Na\u0161a pri\u010da o migraciji zapo\u010dela je u kolovozu 2019., kada smo prvi servis \u2014 registar kontejnera GitLab (GitLab Container Registry) \u2014 preselili u Kubernetes. Ova kriti\u010dna usluga s visokim prometom bila je savr\u0161ena za prvu migraciju, jer se radi o stateless aplikaciji s malim brojem vanjskih ovisnosti. Prvi problem s kojim smo se susreli bio je veliki broj izba\u010denih podova zbog nedostatka RAM-a na \u010dvorovima. Zbog toga smo morali promijeniti requeste i limitove.<\/p>\n<p>Otkriveno je da su za aplikaciju \u010dija potro\u0161nja memorije raste s vremenom, niske vrijednosti za requeste (rezerviraju\u0107i memoriju za svaki pod) u kombinaciji s \"generoznim\" strogo definiranim limitom potro\u0161nje dovodili do zasi\u0107enja. <i>(saturation)<\/i> \u010dvorova i visoke razine izbacivanja. Da bismo se nosili s ovim problemom, odlu\u010deno je <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-com\/gl-infra\/delivery\/-\/issues\/998#note_388983696\">odlu\u010deno je pove\u0107ati requeste i smanjiti limite<\/a><\/noindex>. To je smanjilo pritisak na \u010dvorove i omogu\u0107ilo ciklus \u017eivota podova koji ne vr\u0161i preveliki pritisak na \u010dvor. Sada po\u010dinjemo migracije s velikim (i gotovo jednakim) vrijednostima requesta i limita, ispravljao ih prema potrebi.<\/p>\n<h3>3. Metri\u010dki pokazatelji i logovi<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Na\u0161i zaklju\u010dci nakon godine migracije GitLab.com na Kubernetes\" src=\"\/wp-content\/uploads\/2020\/09\/66d1fd47b57d5826f13defa6e6a7fe3c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Infrastrukturna jedinica fokusira se na ka\u0161njenja, postotak gre\u0161aka i saturaciju prema postavljenim <\/i><noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Service-level_objective\"><i>ciljevima razine usluge<\/i><\/a><\/noindex><i> (SLO), vezanim za <\/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>ukupnu dostupnost na\u0161eg sustava<\/i><\/a><\/noindex><i>.<\/i><\/p>\n<p>Tijekom protekle godine, jedan od klju\u010dnih doga\u0111aja u infrastrukturnoj jedinici bila su pobolj\u0161anja u pra\u0107enju i radu s SLO. SLO su nam omogu\u0107ili postavljanje ciljeva za pojedine usluge koje smo pomno pratili tijekom migracije. No, \u010dak ni s tako pobolj\u0161anom vidljivo\u0161\u0107u, nije uvijek lako odmah uo\u010diti probleme koriste\u0107i metrike i alarme. Na primjer, fokusiraju\u0107i se na ka\u0161njenja i postotak gre\u0161aka, ne pokrivamo potpuno sve scenarije kori\u0161tenja usluge koja se migrira.<\/p>\n<p>Ovaj problem je otkriven gotovo odmah nakon premje\u0161tanja dijela radnih optere\u0107enja u klaster. Posebno se oglasio kada je trebalo provjeriti funkcije za koje je broj zahtjeva mali, ali koje imaju vrlo specifi\u010dne konfiguracijske ovisnosti. Jedna od klju\u010dnih lekcija nakon migracije bio je potreba za uzimanjem u obzir prilikom pra\u0107enja ne samo metrika, ve\u0107 i logova i \u2018dugog repa\u2019 <i>(govorimo o <\/i><noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Long_tail\"><i>takvom rasporedu<\/i><\/a><\/noindex><i> na grafu \u2014 napomena prev.)<\/i> gre\u0161aka. Sada za svaku migraciju uklju\u010dujemo detaljan popis zahtjeva za logovima <i>(log queries)<\/i> i planiramo jasne postupke povratka, koje se u slu\u010daju problema mogu prenositi s jedne smjene na drugu.<\/p>\n<p>Paralelna obrada istih zahtjeva na staroj VM infrastrukturi i novoj, temeljenoj na Kubernetesu, predstavljala je jedinstveni izazov. Za razliku od migracije tipa lift-and-shift <i>(brzi prijenos aplikacija 'kako jesu' u novu infrastrukturu; vi\u0161e informacija mo\u017ee se pro\u010ditati, na primjer, <\/i><noindex><a rel=\"nofollow\" href=\"https:\/\/www.ibm.com\/cloud\/learn\/lift-and-shift\"><i>ovdje<\/i><\/a><\/noindex><i> \u2014 napomena prev.)<\/i>, paralelni rad na \u00abstarim\u00bb VM i Kubernetes zahtijeva da alati za nadgledanje budu kompatibilni s oba okru\u017eenja i da mogu kombinirati metrike u jedan oblik. Va\u017eno je da koristimo iste nadzorne plo\u010de i upite za logove kako bismo postigli dosljednu preglednost tijekom prijelaznog razdoblja.<\/p>\n<h3>4. Preusmjeravanje prometa na novu klaster<\/h3>\n<p>\nZa GitLab.com dio servera je rezerviran za <noindex><a rel=\"nofollow\" href=\"https:\/\/about.gitlab.com\/handbook\/engineering\/#canary-testing\">kanarinsku (canary) fazu<\/a><\/noindex>. Kanarinski park opslu\u017euje na\u0161e interne projekte, a tako\u0111er mo\u017ee <noindex><a rel=\"nofollow\" href=\"https:\/\/next.gitlab.com\/\">biti aktiviran od strane korisnika<\/a><\/noindex>. No, prvenstveno je namijenjen provjeri promjena unesenih u infrastrukturu i aplikaciju. Prva premje\u0161tena usluga zapo\u010dela je s primanjem ograni\u010denog volumena unutarnjeg prometa, a mi i dalje koristimo ovu metodu kako bismo osigurali po\u0161tivanje SLO-a prije nego \u0161to preusmjerimo sav promet u klaster.<\/p>\n<p>U slu\u010daju migracije to zna\u010di da se najprije u Kubernetes preusmjeravaju upiti k unutarnjim projektima, a zatim postupno preusmjeravamo ostatak prometa na klaster mijenjaju\u0107i te\u017einu za backend putem HAProxy. Tijekom prijelaza s VM na Kubernetes postalo je jasno da je vrlo korisno imati jednostavan na\u010din preusmjeravanja prometa izme\u0111u stare i nove infrastrukture, te odr\u017eavati staru infrastrukturu spremnom za povratak tijekom prvih nekoliko dana nakon migracije.<\/p>\n<h3>5. Rezervne mo\u0107i podova i njihova upotreba<\/h3>\n<p>\nGotovo odmah je identificiran sljede\u0107i problem: podovi za servis Registry brzo su se pokrenuli, no pokretanje podova za Sidekiq trajalo je do <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-org\/charts\/gitlab\/-\/issues\/1775\">dvije minute<\/a><\/noindex>. Produ\u017eeno pokretanje podova za Sidekiq postalo je problem kada smo zapo\u010deli migraciju radnih optere\u0107enja za radnike u Kubernetes, kojima je potrebno brzo obra\u0111ivati poslove i brzo se skalirati.<\/p>\n<p>U ovom slu\u010daju, lekcija je bila da, iako Horizontal Pod Autoscaler (HPA) u Kubernetes-u dobro upravlja porastom saobra\u0107aja, va\u017eno je uzeti u obzir karakteristike radnih optere\u0107enja i odvojiti rezervne resurse podova (posebno u uslovima nejednake raspodele potra\u017enje). U na\u0161em slu\u010daju, do\u0161lo je do naglog porasta poslova, \u0161to je dovelo do brze skalabilnosti, \u0161to je rezultiralo zasi\u0107enjem CPU resursa pre nego \u0161to smo uspeli da skaliramo bazen \u010dvorova.<\/p>\n<p>Uvek postoji napast da se iz klastera izvu\u010de \u0161to vi\u0161e, me\u0111utim, nakon \u0161to smo se prvi put suo\u010dili s problemima u performansama, sada zapo\u010dinjemo s velikim bud\u017eetom za podove i smanjujemo ga kasnije, pa\u017eljivo prate\u0107i SLO. Pokretanje podova za uslugu Sidekiq znatno se ubrzalo i sada u proseku traje oko 40 sekundi. <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-org\/charts\/gitlab\/-\/issues\/1775\">Smanjenje vremena pokretanja podova<\/a><\/noindex> koristi i GitLab.com, kao i na\u0161i korisnici samostalnih instalacija koji koriste slu\u017ebeni Helm dijagram GitLaba.<\/p>\n<h2>Zaklju\u010dak<\/h2>\n<p>\nNakon premje\u0161tanja svake usluge, u\u017eivali smo u prednostima kori\u0161tenja Kubernetes-a u produkciji: br\u017eem i sigurnijem implementiranju aplikacija, skaliranju i u\u010dinkovitijoj raspodjeli resursa. Osim toga, prednosti migracije nadma\u0161uju samu uslugu GitLab.com. Svaka pobolj\u0161anja slu\u017ebenog Helm dijagrama koriste i njegovi korisnici.<\/p>\n<p>Nadam se da vam se svidjela pri\u010da o na\u0161im avanturama s migracijom na Kubernetes. Nastavljamo premje\u0161tati sve nove usluge u klaster. Dodatne informacije mo\u017eete prona\u0107i u sljede\u0107im publikacijama:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/about.gitlab.com\/handbook\/engineering\/infrastructure\/production\/kubernetes\/gitlab-com\/\">Za\u0161to migriramo na 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 Kubernetes-u<\/a><\/noindex>\u00bb;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/groups\/gitlab-com\/gl-infra\/-\/epics\/112\">Epic o migraciji GitLab.com na Kubernetes<\/a><\/noindex>.<\/li>\n<\/ul>\n<p><\/p>\n<h2>P.S. od prevodioca<\/h2>\n<p>\nPro\u010ditajte i na na\u0161em blogu:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/519962\/\">3 godine s Kubernetes-om u produkciji: evo \u0161to smo shvatili<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/504396\/\">10 uobi\u010dajenih gre\u0161aka pri kori\u0161tenju Kubernetes-a<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/335814\/\">Pri\u010de o uspjehu Kubernetes-a u produkciji. Dio 3: GitHub<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/440278\/\">Prelazak Tindera na 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.5 - 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\/hr\/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.5\" \/>\n\t\t<meta property=\"og:locale\" content=\"hr_HR\" \/>\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\/hr\/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 zaklju\u010dci nakon godine migracije GitLab.com na Kubernetes | ProHoster","description":"Napomena: prilagodbu Kubernetes-a u GitLab-u smatraju jednim od dva glavna \u010dimbenika koji su doprinijeli rastu tvrtke.","canonical_url":"https:\/\/prohoster.info\/hr\/blog\/administrirovanie\/nashi-vyvody-za-god-migraczii-gitlab-com-na-kubernetes","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hr_HR","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\/hr\/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\/hr\/wp-json\/wp\/v2\/posts\/94977","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/comments?post=94977"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts\/94977\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/media\/94978"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/media?parent=94977"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/categories?post=94977"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/tags?post=94977"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}