{"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\/no\/blog\/administrirovanie\/nashi-vyvody-za-god-migraczii-gitlab-com-na-kubernetes","title":{"rendered":"V\u00e5re konklusjoner etter et \u00e5r med migrering av GitLab.com til Kubernetes","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><i><b>Obs. overs.<\/b>: tilpassingen av Kubernetes i GitLab anses for \u00e5 v\u00e6re en av to hovedfaktorer som bidrar til selskapets vekst. Likevel, frem til nylig var infrastrukturen for nettjenesten GitLab.com bygget p\u00e5 virtuelle maskiner, og migreringen til K8s begynte f\u00f8rst for omtrent ett \u00e5r siden og er fortsatt ikke fullf\u00f8rt. Vi er glade for \u00e5 presentere oversettelsen av en nylig artikkel fra SRE-ingeni\u00f8ren i GitLab om hvordan dette foreg\u00e5r og hvilke konklusjoner ingeni\u00f8rene som deltar i prosjektet gj\u00f8r.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"V\u00e5re konklusjoner etter et \u00e5r med migrering av GitLab.com til Kubernetes\" src=\"\/wp-content\/uploads\/2020\/09\/58429abf60cd19a49c5ce593051c2fca.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nI over a year, our infrastructure department has been migrating all services running on GitLab.com to Kubernetes. During this time, we faced challenges not only with moving services to Kubernetes but also with managing a hybrid deployment during the transition. This article will discuss the valuable lessons we learned.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Fra starten av har serverne p\u00e5 GitLab.com jobbet i skyen p\u00e5 virtuelle maskiner. Disse virtuelle maskinene administreres av Chef, og installasjonen skjer ved hjelp av v\u00e5r <noindex><a rel=\"nofollow\" href=\"https:\/\/about.gitlab.com\/install\/#ubuntu\">offisielle Linux-pakken<\/a><\/noindex>. <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-org\/release\/docs\/-\/blob\/master\/general\/deploy\/gitlab-com-deployer.md\">Utrullingsstrategi<\/a><\/noindex> i tilfelle oppdateringer av applikasjonen, best\u00e5r i \u00e5 oppdatere serverparken p\u00e5 en koordinert, sekvensiell m\u00e5te ved hjelp av CI-pipeline. Denne metoden \u2014 selv om den er litt treigere og kanskje <noindex><a rel=\"nofollow\" href=\"https:\/\/about.gitlab.com\/handbook\/values\/#boring-solutions\">kjedelig<\/a><\/noindex> \u2014 garanterer at GitLab.com bruker de samme installasjons- og konfigureringsmetodene som brukerne av selvadministrerte <i>(self-managed)<\/i> GitLab-installasjoner bruker v\u00e5re Linux-pakker for dette.<\/p>\n<p>Vi bruker denne metoden fordi det er ekstremt viktig \u00e5 oppleve alle gledene og utfordringene som vanlige medlemmer av fellesskapet opplever n\u00e5r de installerer og konfigurerer sine versjoner av GitLab. Denne tiln\u00e6rmingen har fungert godt en stund, men da antallet prosjekter p\u00e5 GitLab passerte 10 millioner, inns\u00e5 vi at den ikke lenger tilfredsstilte v\u00e5re behov for skalering og utrulling.<\/p>\n<h2>F\u00f8rste skritt mot Kubernetes og cloud-native GitLab<\/h2>\n<p>\nI 2017 ble prosjektet <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-org\/charts\">GitLab Charts<\/a><\/noindex> for preparing GitLab for deployment in the cloud, as well as to give users the ability to install GitLab in Kubernetes clusters. At that time, we knew that migrating GitLab to Kubernetes would enhance the scalability of our SaaS platform, simplify deployments, and improve the efficiency of resource utilization. At the same time, many features of our application relied on mounted NFS partitions, which slowed the transition from virtual machines.<\/p>\n<p>The push towards cloud native and Kubernetes enabled our engineers to plan a gradual transition, during which we eliminated some of the application's dependencies on network storage, all while continuing to develop new features. Since we began planning the migration in the summer of 2019, many of these constraints have been removed, and the process of moving GitLab.com to Kubernetes is now in full swing!<\/p>\n<h2>Features of GitLab.com operating in Kubernetes<\/h2>\n<p>\nFor GitLab.com, we use a single regional GKE cluster that processes all application traffic. To minimize the complexity of the already convoluted migration, we focus on services that do not rely on local storage or NFS. GitLab.com predominantly uses a monolithic Rails codebase, and we route traffic based on workload characteristics to various endpoints isolated in their own node pools.<\/p>\n<p>In the case of the frontend, these types are divided into web requests, API, Git SSH\/HTTPS, and Registry. For the backend, we break down jobs in the queue based on various characteristics depending on <noindex><a rel=\"nofollow\" href=\"https:\/\/about.gitlab.com\/blog\/2020\/06\/24\/scaling-our-use-of-sidekiq\/\">predetermined resource boundaries<\/a><\/noindex>, allowing us to set Service-Level Objectives (SLOs) for different loads.<\/p>\n<p>All these services on GitLab.com are configured using the unmodified GitLab Helm chart. Configuration is done in subcharts, which can be selectively included as we gradually move services into the cluster. Even considering the decision not to include some of our stateful services, such as Redis, Postgres, GitLab Pages, and Gitaly, using Kubernetes allows for a radical reduction in the number of VMs currently managed by Chef.<\/p>\n<h2>Transparency and configuration management of Kubernetes<\/h2>\n<p>\nAll configurations are managed by GitLab itself. We use three configuration projects based on Terraform and Helm for this. We try to use GitLab itself for deploying GitLab wherever possible, but for operational tasks, we have a separate GitLab installation. This is needed to avoid dependency on the availability of GitLab.com during deployments and updates of GitLab.com.<\/p>\n<p>Selv om v\u00e5re pipelines for Kubernetes-klyngen kj\u00f8rer p\u00e5 en separat GitLab-installasjon, finnes det speil av kode-repoene, offentlig tilgjengelig p\u00e5 f\u00f8lgende adresser:<\/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 konfigurasjonsinnpakning for GitLab.com for Helm-diagrammet til 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 inneholder konfigurasjoner for tjenester som ikke er direkte relatert til applikasjonen GitLab. Blant disse er konfigurasjoner for loggf\u00f8ring og overv\u00e5king av klyngen, samt for integrerte verkt\u00f8y som PlantUML;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-com\/gitlab-com-infrastructure\">Gitlab-com-infrastructure<\/a><\/noindex> \u2014 Terraform-konfigurasjon for Kubernetes og gammel (legacy) VM-infrastruktur. Her konfigureres alle ressursene som trengs for \u00e5 kj\u00f8re klyngen, inkludert selve klyngen, nodepuljer, tjenestekontoer, reservasjon av IP-adresser.<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"V\u00e5re konklusjoner etter et \u00e5r med migrering av GitLab.com til Kubernetes\" src=\"\/wp-content\/uploads\/2020\/09\/612125403171d73106a081bf4244a52b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Ved endringer vises et offentlig <\/i><noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-com\/gl-infra\/k8s-workloads\/gitlab-com\/-\/merge_requests\/315#note_390180361\"><i>kort sammendrag<\/i><\/a><\/noindex><i> med en lenke til en detaljert diff, som SRE analyserer f\u00f8r endringer gj\u00f8res i klyngen.<\/i><\/p>\n<p>For SRE, the link leads to a detailed diff in the GitLab installation used for operations, access to which is restricted. This allows employees and the community without access to the operational project (which is open only to SRE) to review proposed changes in the configuration. By combining a public instance of GitLab for code with a private instance for CI pipelines, we maintain a unified workflow while ensuring independence from GitLab.com during configuration updates.<\/p>\n<h2>Hva vi har l\u00e6rt under migreringen<\/h2>\n<p>\nI l\u00f8pet av flyttingen har vi samlet erfaring som vi bruker p\u00e5 nye migreringer og distribusjoner i Kubernetes.<\/p>\n<h3>1. \u00d8kte kostnader p\u00e5 grunn av trafikk mellom tilgjengelighetssoner<\/h3>\n<p>\n<img decoding=\"async\" alt=\"V\u00e5re konklusjoner etter et \u00e5r med migrering av GitLab.com til Kubernetes\" src=\"\/wp-content\/uploads\/2020\/09\/3dce44b3f803ffcea13e0101e7343d91.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Daglig egress-statistikk (bytes per dag) for Git-repositorier p\u00e5 GitLab.com<\/i><\/p>\n<p>Google deler sitt nettverk opp i regioner. Disse deles videre opp i tilgjengelighetssoner (AZ). Git-hosting er knyttet til store datamengder, s\u00e5 det er viktig for oss \u00e5 kontrollere nettverksutgang. Egress er gratis for intern trafikk hvis den holdes innenfor en tilgjengelighetssone. P\u00e5 tidspunktet for skrivingen av denne artikkelen leverer vi omtrent 100 TB data p\u00e5 en vanlig arbeidsdag (og dette er kun for Git-repositoriene). Tjenestene som i v\u00e5r gamle VM-baserte topologi l\u00e5 p\u00e5 samme virtuelle maskiner, kj\u00f8rer n\u00e5 i forskjellige pods i Kubernetes. Dette betyr at en del av trafikken som f\u00f8r var lokal for VM, potensielt kan g\u00e5 utenfor tilgjengelighetssonene.<\/p>\n<p>Regionale GKE-klynger tillater dekning i flere tilgjengelighetssoner for redundans. Vi vurderer muligheten <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-com\/gl-infra\/delivery\/-\/issues\/1175\">\u00e5 dele en regional GKE-klynge inn i en-sone-klynger<\/a><\/noindex> for tjenester som genererer store mengder trafikk. Dette vil redusere kostnader for egress samtidig som vi opprettholder redundans p\u00e5 klyngeniv\u00e5.<\/p>\n<h3>2. Begrensninger, ressursforesp\u00f8rsel og skalering<\/h3>\n<p>\n<img decoding=\"async\" alt=\"V\u00e5re konklusjoner etter et \u00e5r med migrering av GitLab.com til Kubernetes\" src=\"\/wp-content\/uploads\/2020\/09\/6e2e1ca4d37666b49358d94cd8660c56.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Antall replikater som h\u00e5ndterer produksjonstrafikk p\u00e5 registry.gitlab.com. Trafikken n\u00e5r sitt h\u00f8ydepunkt rundt kl. 15:00 UTC.<\/i><\/p>\n<p>Historien v\u00e5r med migrasjon begynte i august 2019, da vi flyttet den f\u00f8rste tjenesten - GitLab Container Registry - til Kubernetes. Denne kritisk viktige tjenesten med h\u00f8y trafikk var godt egnet for den f\u00f8rste migrasjonen, siden den er et stateless program med f\u00e5 eksterne avhengigheter. Det f\u00f8rste problemet vi st\u00f8tte p\u00e5, var det h\u00f8ye antallet uthviste pods p\u00e5 grunn av mangel p\u00e5 minne p\u00e5 nodene. Dette f\u00f8rte til at vi m\u00e5tte endre foresp\u00f8rslene og begrensningene.<\/p>\n<p>Det ble oppdaget at for en applikasjon hvor minnebruken vokser over tid, f\u00f8rte lave verdier for foresp\u00f8rslene (som reserverer minne for hver pod) i kombinasjon med en \"gener\u00f8s\" hard grense for bruk til metning. <i>(saturation)<\/i> p\u00e5 nodene og h\u00f8y utslutningsrate. For \u00e5 h\u00e5ndtere dette problemet ble det <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-com\/gl-infra\/delivery\/-\/issues\/998#note_388983696\">Det ble besluttet \u00e5 \u00f8ke foresp\u00f8rslene og senke begrensningene.<\/a><\/noindex>Dette lettet presset p\u00e5 nodene og sikret en livssyklus for pods som ikke ut\u00f8vde for stort press p\u00e5 noden. N\u00e5 begynner vi migrasjoner med gener\u00f8se (og nesten identiske) verdier for foresp\u00f8rslene og begrensningene, og justerer dem etter behov.<\/p>\n<h3>3. Metrier og logger<\/h3>\n<p>\n<img decoding=\"async\" alt=\"V\u00e5re konklusjoner etter et \u00e5r med migrering av GitLab.com til Kubernetes\" src=\"\/wp-content\/uploads\/2020\/09\/66d1fd47b57d5826f13defa6e6a7fe3c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Infrastrukturavdelingen fokuserer p\u00e5 forsinkelser, feilprosent og metning i forhold til satte <\/i><noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Service-level_objective\"><i>m\u00e5l for tjenesteniv\u00e5<\/i><\/a><\/noindex><i> (SLO), knyttet til <\/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>den totale tilgjengeligheten av systemet v\u00e5rt.<\/i><\/a><\/noindex><i>.<\/i><\/p>\n<p>Det siste \u00e5ret har en av de viktigste hendelsene i infrastrukturavdelingen v\u00e6rt forbedringer i overv\u00e5king og h\u00e5ndtering av SLO. SLO har gjort det mulig for oss \u00e5 sette m\u00e5l for individuelle tjenester, som vi fulgte n\u00f8ye med p\u00e5 under migrasjonen. Men selv med denne forbedrede observabiliteten er det ikke alltid mulig \u00e5 umiddelbart se problemer, ved hjelp av metrier og alarmer. For eksempel, ved \u00e5 fokusere p\u00e5 forsinkelser og feilprosent, dekker vi ikke alltid alle bruks-scenariene for tjenesten som migrerer.<\/p>\n<p>Dette problemet ble oppdaget nesten umiddelbart etter overf\u00f8ringen av deler av arbeidsbelastningen til klyngen. Det kom s\u00e6rlig tydelig frem n\u00e5r vi m\u00e5tte teste funksjoner, der antallet foresp\u00f8rselene er lite, men hvor konfigurasjonsavhengighetene er sv\u00e6rt spesifikke. En av hovedl\u00e6re fra migrasjonen ble n\u00f8dvendigheten av \u00e5 ta hensyn til b\u00e5de metrier og logger samt den \u00ablange halen\u00bb <i>(det handler om <\/i><noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Long_tail\"><i>denne fordelingen<\/i><\/a><\/noindex><i> p\u00e5 grafen \u2013 anm. oversetter)<\/i> av feil. N\u00e5 for hver migrasjon inkluderer vi en detaljert liste over foresp\u00f8rslene til logger <i>(log queries)<\/i> og planlegger klare tilbaketrekningsprosedyrer som i tilfelle problemer kan overf\u00f8res fra en vakt til en annen.<\/p>\n<p>Parallelt vedlikehold av de samme foresp\u00f8rslene p\u00e5 den gamle VM-infrastrukturen og den nye, basert p\u00e5 Kubernetes, utgjorde en unik utfordring. I motsetning til lift-and-shift-migrasjon <i>(rask overf\u00f8ring av applikasjoner \u00absom de er\u00bb til ny infrastruktur; mer informasjon kan leses om for eksempel, <\/i><noindex><a rel=\"nofollow\" href=\"https:\/\/www.ibm.com\/cloud\/learn\/lift-and-shift\"><i>her<\/i><\/a><\/noindex><i> \u2013 obs. overs.)<\/i>, parallell drift p\u00e5 \u00abgamle\u00bb VM-er og Kubernetes krever at overv\u00e5kingsverkt\u00f8yene er kompatible med begge milj\u00f8ene og kan samle metrikker i \u00e9n visning. Det er viktig at vi bruker de samme dashbordene og loggforesp\u00f8rslene for \u00e5 oppn\u00e5 konsistent observabilitet i overgangsperioden.<\/p>\n<h3>4. Bytte av trafikk til ny klynge<\/h3>\n<p>\nFor GitLab.com er deler av serverne dedikert til <noindex><a rel=\"nofollow\" href=\"https:\/\/about.gitlab.com\/handbook\/engineering\/#canary-testing\">kanaristadiet<\/a><\/noindex>. Kanariparken betjener v\u00e5re interne prosjekter, men kan ogs\u00e5 <noindex><a rel=\"nofollow\" href=\"https:\/\/next.gitlab.com\/\">aktiveres av brukerne<\/a><\/noindex>. Men f\u00f8rst og fremst er den ment for \u00e5 teste endringer som gj\u00f8res i infrastrukturen og applikasjonen. Den f\u00f8rste overf\u00f8rte tjenesten begynte med \u00e5 motta et begrenset volum internt trafikk, og vi fortsetter \u00e5 bruke denne metoden for \u00e5 sikre at SLO-en overholdes f\u00f8r vi sender all trafikk til klyngen.<\/p>\n<p>I tilfelle av migrering betyr dette at foresp\u00f8rslene f\u00f8rst sendes til interne prosjekter i Kubernetes, og deretter gradvis omdirigerer vi resten av trafikken til klyngen ved \u00e5 endre vekten for backend-en via HAProxy. I prosessen med \u00e5 g\u00e5 fra VM til Kubernetes ble det klart at det er veldig fordelaktig \u00e5 ha en enkel metode for \u00e5 omdirigere trafikken mellom det gamle og det nye infrastrukturen, og dermed holde den gamle infrastrukturen klar for tilbaketrekking de f\u00f8rste dagene etter migreringen.<\/p>\n<h3>5. Backupkapasitet for pods og deres bruk<\/h3>\n<p>\nStraks ble det identifisert et nytt problem: pods for Registry-tjenesten startet raskt, men oppstarten av pods for Sidekiq tok opptil <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-org\/charts\/gitlab\/-\/issues\/1775\">to minutter<\/a><\/noindex>. Den langvarige oppstarten av pods for Sidekiq ble et problem da vi begynte migrasjonen av arbeidsbelastninger for arbeiderne i Kubernetes, som m\u00e5tte behandle jobber raskt og kunne skalere raskt.<\/p>\n<p>I dette tilfellet var leksjonen at selv om Horizontal Pod Autoscaler (HPA) i Kubernetes h\u00e5ndterer trafikkvekst godt, er det viktig \u00e5 ta hensyn til belastningsegenskapene og tildele reservede kapasitet til pod'er (spesielt under ujevn ettersp\u00f8rsel). I v\u00e5rt tilfelle opplevde vi en plutselig \u00f8kning i jobber, noe som f\u00f8rte til rask skalering, som mettet CPU-ressursene f\u00f8r vi rakk \u00e5 skalere node-poolen.<\/p>\n<p>Det er alltid fristende \u00e5 presse s\u00e5 mye som mulig ut av klyngen, men vi, som opprinnelig m\u00f8tte ytelsesproblemer, starter n\u00e5 med et gener\u00f8st pod-budget og reduserer det senere mens vi n\u00f8ye overv\u00e5ker SLO. Oppstart av pod'er for Sidekiq-tjenesten har blitt betydelig raskere og tar n\u00e5 i gjennomsnitt omtrent 40 sekunder. <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-org\/charts\/gitlab\/-\/issues\/1775\">Fra reduksjonen av oppstartstiden for pod'er<\/a><\/noindex> har b\u00e5de GitLab.com og v\u00e5re brukere av selvadministrerte installasjoner, som bruker den offisielle Helm-diagrammet til GitLab, hatt fordel.<\/p>\n<h2>Konklusjon<\/h2>\n<p>\nEtter overf\u00f8ringen av hver tjeneste har vi gledet oss over fordelene ved \u00e5 bruke Kubernetes i produksjon: raskere og sikrere distribusjon av applikasjoner, skalerbarhet og mer effektiv ressursfordeling. Fordelene ved migrering g\u00e5r nemlig utover GitLab.com-tjenesten. Brukerne av den offisielle Helm-diagrammet drar ogs\u00e5 nytte av hver forbedring.<\/p>\n<p>Jeg h\u00e5per du likte historien om v\u00e5re eventyr med migrering til Kubernetes. Vi fortsetter \u00e5 flytte flere tjenester inn i klyngen. Ytterligere informasjon kan finnes i f\u00f8lgende publikasjoner:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/about.gitlab.com\/handbook\/engineering\/infrastructure\/production\/kubernetes\/gitlab-com\/\">Hvorfor migrerer vi til 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 p\u00e5 Kubernetes<\/a><\/noindex>\u00bb;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/groups\/gitlab-com\/gl-infra\/-\/epics\/112\">Epic for migrering av GitLab.com til Kubernetes<\/a><\/noindex>.<\/li>\n<\/ul>\n<p><\/p>\n<h2>P.S. from the translator<\/h2>\n<p>\nAlso read in our blog:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/519962\/\">3 \u00e5r med Kubernetes i produksjon: dette er hva vi har l\u00e6rt<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/504396\/\">10 typiske feil ved bruk av Kubernetes<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/335814\/\">Kubernetes suksesshistorier i produksjon. Del 3: GitHub<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/440278\/\">Tinders overgang til Kubernetes<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>Kilde: <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\/no\/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=\"nn_NO\" \/>\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\/no\/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 V\u00e5re erfaringer etter et \u00e5r med migrering av GitLab.com til Kubernetes | ProHoster","description":"Merk. overs.: tilpasningen av Kubernetes i GitLab anses som en av to hovedfaktorer som bidrar til selskapets vekst.","canonical_url":"https:\/\/prohoster.info\/no\/blog\/administrirovanie\/nashi-vyvody-za-god-migraczii-gitlab-com-na-kubernetes","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"nn_NO","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\/no\/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\/no\/wp-json\/wp\/v2\/posts\/94977","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/comments?post=94977"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/posts\/94977\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/media\/94978"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/media?parent=94977"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/categories?post=94977"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/tags?post=94977"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}