{"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\/da\/blog\/administrirovanie\/nashi-vyvody-za-god-migraczii-gitlab-com-na-kubernetes","title":{"rendered":"Vores konklusioner efter et \u00e5r med migration af GitLab.com til Kubernetes","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><i><b>Bem. overs.<\/b>: tilpasningen af Kubernetes i GitLab betragtes som en af de to vigtigste faktorer, der bidrager til virksomhedens v\u00e6kst. Indtil for nylig var infrastrukturen for online-tjenesten GitLab.com bygget p\u00e5 virtuelle maskiner, og f\u00f8rst for omkring et \u00e5r siden begyndte migreringen til K8s, som stadig ikke er afsluttet. Vi er glade for at pr\u00e6sentere overs\u00e6ttelsen af en nylig artikel af SRE-ingeni\u00f8ren fra GitLab om, hvordan dette forl\u00f8ber, og hvilke konklusioner ingeni\u00f8rerne, der deltager i projektet, drager.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Vores konklusioner efter et \u00e5r med migration af GitLab.com til Kubernetes\" src=\"\/wp-content\/uploads\/2020\/09\/58429abf60cd19a49c5ce593051c2fca.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nI over et \u00e5r har vores infrastrukturafdeling arbejdet p\u00e5 at migrere alle tjenester, der k\u00f8rer p\u00e5 GitLab.com, til Kubernetes. I l\u00f8bet af denne tid er vi st\u00f8dt p\u00e5 problemer, der ikke kun relaterer sig til flytning af tjenester til Kubernetes, men ogs\u00e5 til at administrere hybriddeployment under overgangen. Denne artikel vil handle om de v\u00e6rdifulde lektioner, vi har l\u00e6rt.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Fra starten har GitLab.coms servere k\u00f8rt i skyen p\u00e5 virtuelle maskiner. Disse virtuelle maskiner administreres af Chef, og deres installation sker via vores <noindex><a rel=\"nofollow\" href=\"https:\/\/about.gitlab.com\/install\/#ubuntu\">officielle Linux-pakke<\/a><\/noindex>. <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-org\/release\/docs\/-\/blob\/master\/general\/deploy\/gitlab-com-deployer.md\">Udrulningsstrategi<\/a><\/noindex> i tilf\u00e6lde af at en opdatering af applikationen er n\u00f8dvendig, best\u00e5r i simpelthen at opdatere serverparken i en koordineret sekventiel r\u00e6kkef\u00f8lge ved hj\u00e6lp af en CI-pipeline. Denne metode - omend langsom og lidt <noindex><a rel=\"nofollow\" href=\"https:\/\/about.gitlab.com\/handbook\/values\/#boring-solutions\">kedelig<\/a><\/noindex> \u2014 sikrer, at GitLab.com bruger de samme installa- tions- og konfigurationsmetoder som brugerne af de selvadministrerede <i>(self-managed)<\/i> installationer af GitLab, der anvender vores Linux-pakker.<\/p>\n<p>Vi bruger denne metode, fordi det er yderst vigtigt at opleve alle de sorger og gl\u00e6der, som de almindelige medlemmer af f\u00e6llesskabet f\u00f8ler, n\u00e5r de installerer og konfigurerer deres egen GitLab. Denne tilgang har fungeret godt i et stykke tid, men da antallet af projekter p\u00e5 GitLab oversteg 10 millioner, inds\u00e5 vi, at den ikke l\u00e6ngere opfylder vores behov for skalering og udrulning.<\/p>\n<h2>De f\u00f8rste skridt mod Kubernetes og cloud-native GitLab<\/h2>\n<p>\nI 2017 blev projektet <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-org\/charts\">GitLab Charts<\/a><\/noindex> til at forberede GitLab til implementering i skyen samt at give brugerne mulighed for at installere GitLab i Kubernetes-klynger. Dengang vidste vi, at flytningen af GitLab til Kubernetes ville \u00f8ge skaleringsmulighederne for vores SaaS-platform, forenkle implementeringen og forbedre udnyttelsen af beregningressourcer. Samtidig var mange funktioner i vores applikation afh\u00e6ngige af monterede NFS-partitioner, hvilket h\u00e6mmede overgangen fra virtuelle maskiner.<\/p>\n<p>Str\u00e6ben efter cloud-native og Kubernetes har gjort det muligt for vores ingeni\u00f8rer at planl\u00e6gge en gradvis overgang, hvor vi har afvist nogle applikationsafh\u00e6ngigheder til netv\u00e6rkslagring, mens vi fortsat har udviklet nye funktioner. Siden vi begyndte at planl\u00e6gge migrationen sommeren 2019, er mange af disse begr\u00e6nsninger blevet elimineret, og processen med at overf\u00f8re GitLab.com til Kubernetes er nu i fuld gang!<\/p>\n<h2>Funktionerne i GitLab.com i Kubernetes<\/h2>\n<p>\nFor GitLab.com bruger vi et samlet regionalt GKE-klynge, der h\u00e5ndterer al applikationstrafik. For at minimere kompleksiteten (som allerede er ret indviklet) ved migreringen fokuserer vi p\u00e5 tjenester, der ikke er afh\u00e6ngige af lokal lagring eller NFS. GitLab.com bruger prim\u00e6rt en monolitisk kodebase p\u00e5 Rails, og vi dirigerer trafik afh\u00e6ngigt af arbejdsbelastningens egenskaber til forskellige endpoints, der er isolerede i deres egne nodepuljer.<\/p>\n<p>I frontenden opdeles disse typer i anmodninger til web, API, Git SSH\/HTTPS og Registry. I backend opdeler vi job i k\u00f8erne baseret p\u00e5 forskellige karakteristika afh\u00e6ngig af <noindex><a rel=\"nofollow\" href=\"https:\/\/about.gitlab.com\/blog\/2020\/06\/24\/scaling-our-use-of-sidekiq\/\">forudbestemte gr\u00e6nser for ressourcer<\/a><\/noindex>, som g\u00f8r det muligt for os at s\u00e6tte servicem\u00e5l (Service-Level Objectives, SLOs) for forskellige belastninger.<\/p>\n<p>Alle disse tjenester p\u00e5 GitLab.com er konfigureret ved hj\u00e6lp af den u\u00e6ndrede Helm-chart for GitLab. Konfigurationen udf\u00f8res i subcharts, der selektivt kan aktiveres, efterh\u00e5nden som vi gradvist flytter tjenester til klyngen. Selvom det er besluttet ikke at inkludere nogle af vores stateful-tjenester, s\u00e5som Redis, Postgres, GitLab Pages og Gitaly, i migrationen, tillader brugen af Kubernetes os at reducere antallet af VM'er, som Chef for tiden administrerer, radikalt.<\/p>\n<h2>Transparens og konfigurationsstyring i Kubernetes<\/h2>\n<p>\nAlle indstillinger styres af selve GitLab. Til dette anvendes tre konfigurationsprojekter baseret p\u00e5 Terraform og Helm. Vi pr\u00f8ver at bruge GitLab til at k\u00f8re GitLab, hvor det er muligt, men til driftsopgaver har vi en separat GitLab-installation. Denne er n\u00f8dvendig for at undg\u00e5 afh\u00e6ngighed af tilg\u00e6ngeligheden af GitLab.com under deployment og opdatering af GitLab.com.<\/p>\n<p>Selvom vores pipelines til Kubernetes-klyngen k\u00f8rer p\u00e5 en separat installation af GitLab, har kode-repositorierne spejle, der er offentligt tilg\u00e6ngelige 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 konfiguration af GitLab.com til Helm-diagrammet 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 indeholder konfigurationer til tjenester, der ikke er direkte relateret til applikationen GitLab. Disse inkluderer konfigurationer til logf\u00f8ring og overv\u00e5gning af klyngen samt til integrerede v\u00e6rkt\u00f8jer 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-konfiguration for Kubernetes og den gamle (legacy) VM-infrastruktur. Her konfigureres alle ressourcer, der er n\u00f8dvendige for at starte klyngen, herunder selve klyngen, nodepuljer, servicekonti, og reservation af IP-adresser.<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"Vores konklusioner efter et \u00e5r med migration af GitLab.com til Kubernetes\" src=\"\/wp-content\/uploads\/2020\/09\/612125403171d73106a081bf4244a52b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>N\u00e5r der foretages \u00e6ndringer, vises en 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 opsummering<\/i><\/a><\/noindex><i> med et link til en detaljeret diff, som SRE analyserer, f\u00f8r \u00e6ndringerne anvendes i klyngen.<\/i><\/p>\n<p>For SRE er der et link til en detaljeret diff i GitLab-installationen, der bruges til drift og som er begr\u00e6nset tilg\u00e6ngelig. Dette giver medarbejdere og samfundet uden adgang til driftsprojektet (som kun er \u00e5bent for SRE) mulighed for at se de foresl\u00e5ede \u00e6ndringer i konfigurationen. Ved at kombinere en offentlig GitLab-forekomst til kode med en privat forekomst til CI-pipelines bevarer vi en ensartet arbejdsproces og samtidig sikrer uafh\u00e6ngighed af GitLab.com ved konfigurationsopdateringer.<\/p>\n<h2>Hvad vi har l\u00e6rt under migrationen<\/h2>\n<p>\nI l\u00f8bet af flytningen er der opn\u00e5et erfaring, som vi anvender p\u00e5 nye migrationer og implementeringer i Kubernetes.<\/p>\n<h3>1. Stigning i omkostninger p\u00e5 grund af trafik mellem tilg\u00e6ngelighedszoner<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Vores konklusioner efter et \u00e5r med migration af GitLab.com til Kubernetes\" src=\"\/wp-content\/uploads\/2020\/09\/3dce44b3f803ffcea13e0101e7343d91.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Daglig egress-statistik (byte pr. dag) for parken af Git-lager p\u00e5 GitLab.com<\/i><\/p>\n<p>Google opdeler sit netv\u00e6rk i regioner. Disse opdeles derefter i tilg\u00e6ngelighedszoner (AZ). Git-hosting er forbundet med store m\u00e6ngder data, s\u00e5 det er vigtigt for os at kontrollere netv\u00e6rkets egress. I tilf\u00e6lde af intern trafik er egress gratis, hvis den forbliver inden for en enkelt tilg\u00e6ngelighedszon. P\u00e5 tidspunktet for skrivningen af denne artikel sender vi cirka 100 TB data p\u00e5 en gennemsnitlig arbejdsdag (og det er kun for Git-repositorier). Tjenester, der i vores gamle VM-baserede topologi var p\u00e5 de samme virtuelle maskiner, k\u00f8rer nu i forskellige Kubernetes-pods. Det betyder, at en del af trafikken, som tidligere var lokal for VM, nu potentielt kan g\u00e5 ud over tilg\u00e6ngelighedszonerne.<\/p>\n<p>Regionale GKE-klynger muligg\u00f8r d\u00e6kning af flere tilg\u00e6ngelighedszoner for redundans. Vi overvejer muligheden for <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-com\/gl-infra\/delivery\/-\/issues\/1175\">at dele den regionale GKE-klynge op i enkeltzonede klynger<\/a><\/noindex> for tjenester, der genererer store m\u00e6ngder trafik. Dette vil reducere omkostningerne ved egress samtidig med, at klynge-niveauet for redundans opretholdes.<\/p>\n<h3>2. Limit&#8217;er, ressourceanmodninger og skalering<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Vores konklusioner efter et \u00e5r med migration af GitLab.com til Kubernetes\" src=\"\/wp-content\/uploads\/2020\/09\/6e2e1ca4d37666b49358d94cd8660c56.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Antallet af replikaer, der h\u00e5ndterer produktionstrafik p\u00e5 registry.gitlab.com. Trafikken tager mest fart omkring kl. 15:00 UTC.<\/i><\/p>\n<p>Vores historie med migration begyndte i august 2019, da vi flyttede den f\u00f8rste tjeneste \u2014 GitLab Container Registry \u2014 til Kubernetes. Denne kritisk vigtige tjeneste med h\u00f8j trafik var et godt valg til den f\u00f8rste migration, da det er en stateless-applikation med f\u00e5 eksterne afh\u00e6ngigheder. Det f\u00f8rste problem, vi st\u00f8dte p\u00e5, var det store antal forviste pods p\u00e5 grund af mangel p\u00e5 hukommelse p\u00e5 noderne. Dette fik os til at \u00e6ndre anmodninger og gr\u00e6nser.<\/p>\n<p>Det blev opdaget, at i tilf\u00e6lde af en applikation, hvor hukommelsesforbruget stiger over tid, lavere v\u00e6rdier for anmodningerne (som reserverer hukommelse for hver pod) kombineret med en 'gener\u00f8s' hard limit p\u00e5 forbruget f\u00f8rte til m\u00e6tning <i>(saturation)<\/i> af noderne og et h\u00f8jt niveau af udst\u00f8dnings. For at tackle dette problem blev det <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-com\/gl-infra\/delivery\/-\/issues\/998#note_388983696\">besluttet at \u00f8ge anmodningerne og s\u00e6nke begr\u00e6nsningerne<\/a><\/noindex>. Dette lettede trykket p\u00e5 noderne og sikrede en pod-livscyklus, der ikke lagde for meget pres p\u00e5 noden. Nu starter vi migrationer med gener\u00f8se (og n\u00e6sten identiske) v\u00e6rdier for anmodningerne og begr\u00e6nsningerne, justerer dem efter behov.<\/p>\n<h3>3. Metrier og logfiler<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Vores konklusioner efter et \u00e5r med migration af GitLab.com til Kubernetes\" src=\"\/wp-content\/uploads\/2020\/09\/66d1fd47b57d5826f13defa6e6a7fe3c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Infrastrukturafdelingen fokuserer p\u00e5 latens, fejlrater og saturation med fastsatte <\/i><noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Service-level_objective\"><i>service-level m\u00e5l<\/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 samlede tilg\u00e6ngelighed af vores system<\/i><\/a><\/noindex><i>.<\/i><\/p>\n<p>I det forgangne \u00e5r har en af de n\u00f8glebegivenheder i infrastrukturafdelingen v\u00e6ret forbedringerne i overv\u00e5gning og arbejde med SLO. SLO har gjort det muligt for os at fasts\u00e6tte m\u00e5l for de enkelte tjenester, som vi n\u00f8je har overv\u00e5get under migrationen. Men selv med en s\u00e5dan forbedret synlighed er det ikke altid muligt at se problemer med det samme ved hj\u00e6lp af metrier og alarmer. For eksempel, ved at fokusere p\u00e5 latens og fejlrater d\u00e6kker vi ikke fuldt ud alle brugsscenarier for tjenesten, der gennemg\u00e5r migrationen.<\/p>\n<p>Dette problem blev opdaget n\u00e6sten med det samme efter overf\u00f8rslen af en del af arbejdsbelastningen til klyngen. Det kom is\u00e6r til udtryk, n\u00e5r der skulle kontrolleres funktioner, hvor antallet af foresp\u00f8rgsler er lille, men som har meget specifikke konfigurationsafh\u00e6ngigheder. En af de vigtigste l\u00e6ringer fra migrationen var n\u00f8dvendigheden af at tage hensyn til ikke kun metrier, men ogs\u00e5 logfiler og 'lange haler' <i>(det handler om <\/i><noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Long_tail\"><i>s\u00e5dan en fordeling<\/i><\/a><\/noindex><i> p\u00e5 grafen \u2014 bem. overs.)<\/i> af fejl. Nu for hver migration inkluderer vi en detaljeret liste over foresp\u00f8rgsler til logfilerne <i>(log queries)<\/i> og planl\u00e6gger klare tilbagef\u00f8ringsprocedurer, som i tilf\u00e6lde af problemer kan overf\u00f8res fra et skift til et andet.<\/p>\n<p>Parallel betjening af de samme foresp\u00f8rgsler p\u00e5 den gamle VM-infrastruktur og den nye baseret p\u00e5 Kubernetes udgjorde en unik udfordring. I mods\u00e6tning til en lift-and-shift migration <i>(hurtig overf\u00f8rsel af applikationer 'som de er' til den nye infrastruktur; mere info kan findes, for eksempel, <\/i><noindex><a rel=\"nofollow\" href=\"https:\/\/www.ibm.com\/cloud\/learn\/lift-and-shift\"><i>her<\/i><\/a><\/noindex><i> \u2014 red. anm.)<\/i>, parallel arbejdet p\u00e5 \"gamle\" VM og Kubernetes kr\u00e6ver, at overv\u00e5gningsv\u00e6rkt\u00f8jerne er kompatible med begge milj\u00f8er og kan kombinere m\u00e5linger i \u00e9n visning. Det er vigtigt, at vi bruger de samme dashboards og logforesp\u00f8rgsler for at opn\u00e5 konsistent synlighed i overgangsperioden.<\/p>\n<h3>4. Omdannelse af trafikken til det nye cluster<\/h3>\n<p>\nFor GitLab.com tildeles en del af serverne til <noindex><a rel=\"nofollow\" href=\"https:\/\/about.gitlab.com\/handbook\/engineering\/#canary-testing\">kanariefase (canary)<\/a><\/noindex>. Kanariefarmen betjener vores interne projekter, og det kan ogs\u00e5 <noindex><a rel=\"nofollow\" href=\"https:\/\/next.gitlab.com\/\">aktiveres af brugere<\/a><\/noindex>. Men f\u00f8rst og fremmest er den beregnet til at teste de \u00e6ndringer, der foretages i infrastrukturen og applikationen. Den f\u00f8rste overf\u00f8rte service begyndte med at modtage et begr\u00e6nset volumen intern trafik, og vi forts\u00e6tter med at bruge denne metode for at sikre, at SLO overholdes, f\u00f8r vi sender al trafik til clustret.<\/p>\n<p>I tilf\u00e6lde af migration betyder det, at anmodninger til interne projekter f\u00f8rst sendes til Kubernetes, hvorefter vi gradvist skifter resten af trafikken til clustret ved at justere v\u00e6gten for backend via HAProxy. I overgangen fra VM til Kubernetes blev det klart, at det var meget fordelagtigt at have en enkel metode til at omdirigere trafik mellem den gamle og den nye infrastruktur og dermed holde den gamle infrastruktur klar til tilbagevenden i de f\u00f8rste par dage efter migrationen.<\/p>\n<h3>5. Backup-kapacitet for pods og deres anvendelse<\/h3>\n<p>\nN\u00e6sten med det samme blev det n\u00e6ste problem identificeret: pods til Registry-tjenesten startede hurtigt, men opstart af pods til Sidekiq tog op til <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-org\/charts\/gitlab\/-\/issues\/1775\">to minutter<\/a><\/noindex>. Den lange opstartstid for pods til Sidekiq blev et problem, da vi begyndte at migrere Kubernetes-arbejdslastene for arbejdere, der hurtigt skal behandle job og hurtigt skal kunne skaleres.<\/p>\n<p>I denne forbindelse var l\u00e6ringen, at selvom Horizontal Pod Autoscaler (HPA) i Kubernetes h\u00e5ndterer trafikv\u00e6kst godt, er det vigtigt at tage hensyn til arbejdsbelastningernes egenskaber og afs\u00e6tte backup-kapacitet til pods (is\u00e6r under uregelm\u00e6ssig eftersp\u00f8rgsel). I vores tilf\u00e6lde oplevede vi et pludseligt spring i job, hvilket f\u00f8rte til hurtig skalering og resulterede i, at CPU-ressourcerne blev m\u00e6ttet, f\u00f8r vi n\u00e5ede at skalere nodepuljen.<\/p>\n<p>Der er altid en fristelse til at presse s\u00e5 meget som muligt ud af klyngen, men da vi oprindeligt st\u00f8dte p\u00e5 problemer med ydeevnen, starter vi nu med et gener\u00f8st pod-budget og reducerer det senere, mens vi n\u00f8je overv\u00e5ger SLO. K\u00f8rsel af pods til Sidekiq-tjenesten er betydeligt forbedret og tager nu i gennemsnit omkring 40 sekunder. <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-org\/charts\/gitlab\/-\/issues\/1775\">Fra reduktionen af opstartstiden for pods<\/a><\/noindex> fik b\u00e5de GitLab.com og vores self-managed installationsbrugere, der arbejder med den officielle Helm-chart fra GitLab, gl\u00e6de af det.<\/p>\n<h2>Konklusion<\/h2>\n<p>\nEfter at have flyttet hver tjeneste, n\u00f8d vi fordelene ved at bruge Kubernetes i produktion: hurtigere og mere sikker deployment af applikationer, skalering og mere effektiv ressourcefordeling. Desuden str\u00e6kker fordelene ved migrationen sig ud over tjenesten GitLab.com. Alle forbedringer af den officielle Helm-chart gavner ogs\u00e5 dens brugere.<\/p>\n<p>Jeg h\u00e5ber, at I n\u00f8d historien om vores oplevelser med migrationen til Kubernetes. Vi forts\u00e6tter med at flytte flere og flere tjenester til klyngen. Yderligere information kan findes i f\u00f8lgende publikationer:<\/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 om migreringen af GitLab.com til Kubernetes<\/a><\/noindex>.<\/li>\n<\/ul>\n<p><\/p>\n<h2>P.S. fra overs\u00e6tteren<\/h2>\n<p>\nL\u00e6s ogs\u00e5 p\u00e5 vores 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 produktion: Det er, hvad 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 fejl ved brug af Kubernetes<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/335814\/\">Successhistorier om Kubernetes i produktion. 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.3 - 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\/da\/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.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"da_DK\" \/>\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\/da\/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\udd47Vore konklusioner efter et \u00e5rs migration af GitLab.com til Kubernetes | ProHoster","description":"Note fra overs\u00e6tteren: Implementeringen af Kubernetes i GitLab betragtes som en af de to hovedfaktorer, der bidrager til virksomhedens v\u00e6kst.","canonical_url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/nashi-vyvody-za-god-migraczii-gitlab-com-na-kubernetes","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"da_DK","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\/da\/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\/da\/wp-json\/wp\/v2\/posts\/94977","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=94977"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/94977\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media\/94978"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=94977"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=94977"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=94977"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}