{"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\/nl\/blog\/administrirovanie\/nashi-vyvody-za-god-migraczii-gitlab-com-na-kubernetes","title":{"rendered":"Onze conclusies na een jaar migratie van GitLab.com naar Kubernetes","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><i><b>Opmerking vertaler.<\/b>: de aanpassing van Kubernetes in GitLab wordt beschouwd als een van de twee belangrijkste factoren die bijdragen aan de groei van het bedrijf. Tot voor kort was de infrastructuur van de online service GitLab.com echter gebouwd op virtuele machines, en het migreren naar K8s begon slechts ongeveer een jaar geleden, een proces dat nog steeds gaande is. We zijn blij om een vertaling te presenteren van een recent artikel van een SRE-engineer van GitLab over hoe dit verloopt en welke lessen de ingenieurs, die bij dit project betrokken zijn, hieruit trekken.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Onze conclusies na een jaar migratie van GitLab.com naar Kubernetes\" src=\"\/wp-content\/uploads\/2020\/09\/58429abf60cd19a49c5ce593051c2fca.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAl bijna een jaar is onze infrastructuurafdeling bezig met de migratie van alle diensten die draaien op GitLab.com naar Kubernetes. In die tijd zijn we tegen problemen aangelopen, niet alleen met het verplaatsen van diensten naar Kubernetes, maar ook met het beheren van een hybride deployment tijdens de overgang. In dit artikel bespreken we de waardevolle lessen die we hebben geleerd.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Vanaf het begin werkte GitLab.com op servers in de cloud op virtuele machines. Deze virtuele machines worden beheerd door Chef, en hun installatie gebeurt met behulp van onze <noindex><a rel=\"nofollow\" href=\"https:\/\/about.gitlab.com\/install\/#ubuntu\">offici\u00eble Linux-pakket<\/a><\/noindex>. <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-org\/release\/docs\/-\/blob\/master\/general\/deploy\/gitlab-com-deployer.md\">De uitrolstrategie<\/a><\/noindex> voor het geval er een update van de applicatie nodig is, bestaat uit het eenvoudig bijgewerkt houden van de serverpark op een geco\u00f6rdineerde, geleidelijke manier door middel van een CI-pipeline. Deze methode - hoewel langzaam en een beetje <noindex><a rel=\"nofollow\" href=\"https:\/\/about.gitlab.com\/handbook\/values\/#boring-solutions\">saai<\/a><\/noindex> garandeert dat GitLab.com dezelfde installatie- en configuratiemethoden gebruikt als gebruikers van de zelf-gehoste <i>(self-managed)<\/i> installaties van GitLab die onze Linux-pakketten gebruiken.<\/p>\n<p>We gebruiken deze methode omdat het cruciaal is om de vreugdes en zorgen die reguliere leden van de gemeenschap ervaren tijdens het installeren en configureren van hun eigen kopie\u00ebn van GitLab, zelf te ervaren. Deze aanpak heeft een tijdje goed gewerkt, maar toen het aantal projecten op GitLab meer dan 10 miljoen overschreed, realiseerden we ons dat deze methode niet langer voldeed aan onze schaal- en uitrolbehoeften.<\/p>\n<h2>Eerste stappen naar Kubernetes en cloud-native GitLab<\/h2>\n<p>\nIn 2017 werd het project opgericht <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-org\/charts\">GitLab Charts<\/a><\/noindex> voor de voorbereiding van GitLab voor implementatie in de cloud, en om gebruikers in staat te stellen GitLab in Kubernetes-clusters te installeren. We wisten toen al dat het verplaatsen van GitLab naar Kubernetes de schaalbaarheid van het SaaS-platform zou vergroten, implementaties zou vereenvoudigen en de effici\u00ebntie van het gebruik van rekenbronnen zou verbeteren. Tegelijkertijd waren veel functies van onze applicatie afhankelijk van gemounte NFS-volume's, wat de overgang van virtuele machines vertraagde.<\/p>\n<p>De drang naar cloud native en Kubernetes stelde onze ingenieurs in staat om een geleidelijke overstap te plannen, waarbij we enkele afhankelijkheden van de applicatie van netwerklocy's hebben opgegeven, terwijl we tegelijkertijd nieuwe functies bleven ontwikkelen. Sinds we in de zomer van 2019 zijn begonnen met het plannen van de migratie, zijn veel van deze beperkingen weggenomen en de migratie van GitLab.com naar Kubernetes is nu in volle gang!<\/p>\n<h2>Kenmerken van GitLab.com op Kubernetes<\/h2>\n<p>\nVoor GitLab.com gebruiken we een enkele regionale GKE-cluster die al het verkeer van de applicatie verwerkt. Om de complexiteit van de (al ingewikkelde) migratie te minimaliseren, richten we ons op diensten die niet afhankelijk zijn van lokale opslag of NFS. GitLab.com heeft voornamelijk een monolithische codebase op Rails, en we leiden het verkeer af afhankelijk van de kenmerken van de werkbelasting naar verschillende endpoints, die zijn ge\u00efsoleerd in hun eigen knooppool.<\/p>\n<p>Voor de frontend worden deze typen onderverdeeld in aanvragen naar web, API, Git SSH\/HTTPS en Registry. Voor de backend splitsen we jobs in de wachtrij op basis van verschillende kenmerken afhankelijk van <noindex><a rel=\"nofollow\" href=\"https:\/\/about.gitlab.com\/blog\/2020\/06\/24\/scaling-our-use-of-sidekiq\/\">vooraf gedefinieerde resourcegrenzen<\/a><\/noindex>, die ons in staat stellen om service level doelen (Service-Level Objectives, SLO's) voor verschillende workloads vast te stellen.<\/p>\n<p>Al deze GitLab.com-services zijn ingesteld met behulp van de ongewijzigde Helm-chart van GitLab. De configuratie wordt uitgevoerd in subcharts die selectief kunnen worden ingeschakeld naarmate we de diensten geleidelijk naar de cluster verplaatsen. Zelfs met het besluit om sommige van onze stateful-services, zoals Redis, Postgres, GitLab Pages en Gitaly, niet in de migratie op te nemen, stelt het gebruik van Kubernetes ons in staat om het aantal VM's dat momenteel door Chef wordt beheerd, drastisch te verminderen.<\/p>\n<h2>Transparantie en configuratiebeheer in Kubernetes<\/h2>\n<p>\nAlle instellingen worden beheerd door GitLab zelf. Hiervoor worden drie configuratieprojecten gebruikt op basis van Terraform en Helm. We proberen waar mogelijk GitLab zelf te gebruiken voor het draaien van GitLab, maar voor operationele taken hebben we een aparte GitLab-installatie die functioneert. Dit is nodig om niet afhankelijk te zijn van de beschikbaarheid van GitLab.com tijdens deployments en updates van GitLab.com.<\/p>\n<p>Hoewel onze pipelines voor de Kubernetes-cluster draaien op een aparte installatie van GitLab, hebben de code repositories spiegels die publiekelijk toegankelijk zijn op de volgende adressen:<\/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 de configuratiewrap voor GitLab.com voor de Helm-chart van 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 bevat configuraties voor services die niet direct met de GitLab-applicatie zijn verbonden. Dit omvat configuraties voor logging en monitoring van de cluster, evenals voor ge\u00efntegreerde tools zoals PlantUML;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-com\/gitlab-com-infrastructure\">Gitlab-com-infrastructure<\/a><\/noindex> \u2014 Terraform-configuratie voor Kubernetes en de oude (legacy) VM-infrastructuur. Hier worden alle bronnen ingesteld die nodig zijn om de cluster te draaien, inclusief de cluster zelf, knooppoolen, service-accounts en IP-adres reserveringen.<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"Onze conclusies na een jaar migratie van GitLab.com naar Kubernetes\" src=\"\/wp-content\/uploads\/2020\/09\/612125403171d73106a081bf4244a52b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Bij het aanbrengen van wijzigingen wordt een openbare <\/i><noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-com\/gl-infra\/k8s-workloads\/gitlab-com\/-\/merge_requests\/315#note_390180361\"><i>samenvatting<\/i><\/a><\/noindex><i> getoond met een link naar de gedetailleerde diff, die SRE analyseert voordat de wijzigingen in de cluster worden aangebracht.<\/i><\/p>\n<p>Voor SRE leidt de link naar een gedetailleerde diff in de GitLab-installatie die wordt gebruikt voor exploitatie en waar de toegang tot beperkt is. Dit stelt medewerkers en de gemeenschap zonder toegang tot het exploitatieproject (dat alleen open is voor SRE) in staat om voorgestelde wijzigingen in de configuratie te bekijken. Door een openbare instantie van GitLab voor de code te combineren met een gesloten instantie voor CI-pijplijnen, behouden we een uniforme workflow en garanderen we tegelijkertijd onafhankelijkheid van GitLab.com bij updates van de configuratie.<\/p>\n<h2>Wat we hebben geleerd tijdens de migratie<\/h2>\n<p>\nTijdens de verhuizing is er ervaring opgedaan die we toepassen op nieuwe migraties en implementaties in Kubernetes.<\/p>\n<h3>1. Stijging van kosten wegens verkeer tussen availability zones<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Onze conclusies na een jaar migratie van GitLab.com naar Kubernetes\" src=\"\/wp-content\/uploads\/2020\/09\/3dce44b3f803ffcea13e0101e7343d91.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Dagelijkse egress-statistiek (bytes per dag) voor het Git-repositories op GitLab.com<\/i><\/p>\n<p>Google verdeelt zijn netwerk in regio's. Deze worden vervolgens onderverdeeld in beschikbaarheidszones (AZ). Git-hosting is verbonden met grote datavolumes, daarom is het belangrijk voor ons om het netwerkverkeer te beheersen. In het geval van intern verkeer is de egress gratis, mits dit binnen \u00e9\u00e9n beschikbaarheidszone blijft. Op het moment van schrijven van dit artikel geven we ongeveer 100 TB gegevens weg op een normale werkdag (en dit is alleen voor Git-repositories). Diensten die in onze oude VM-gebaseerde topologie op dezelfde virtuele machines draaiden, werken nu in verschillende Kubernetes-pods. Dit betekent dat een deel van het verkeer, dat eerder lokaal voor VM was, potentieel buiten de beschikbaarheidszones kan komen.<\/p>\n<p>Regionale GKE-clusters stellen ons in staat om meerdere beschikbaarheidszones te bestrijken voor redundantie. We overwegen om <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-com\/gl-infra\/delivery\/-\/issues\/1175\">de regionale GKE-cluster op te splitsen in unizone-clusters<\/a><\/noindex> voor diensten die grote volumes verkeer genereren. Dit zal helpen om de uitgaven voor egress te verminderen, terwijl we de redundantie op cluster niveau behouden.<\/p>\n<h3>2. Limieten, resource-aanvragen en schaling<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Onze conclusies na een jaar migratie van GitLab.com naar Kubernetes\" src=\"\/wp-content\/uploads\/2020\/09\/6e2e1ca4d37666b49358d94cd8660c56.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Het aantal replicas dat production-verkeer verwerkt op registry.gitlab.com. Het verkeer bereikt zijn piek rond 15:00 UTC.<\/i><\/p>\n<p>Ons migratieverhaal begon in augustus 2019, toen we de eerste dienst - de GitLab Container Registry - naar Kubernetes verhuisden. Deze kritieke, verkeer-intensievere dienst was goed geschikt voor de eerste migratie, omdat het een stateless applicatie is met weinig externe afhankelijkheden. Het eerste probleem dat we tegenkwamen, was het grote aantal verwijderde pods door geheugen-tekorten op de knooppunten. Hierdoor moesten we de aanvragen en limieten aanpassen.<\/p>\n<p>Het werd duidelijk dat bij een applicatie waarvan het geheugengebruik in de loop van de tijd toeneemt, lage waarden voor aanvragen (die geheugen reserveren voor elke pod) in combinatie met een 'gulle' harde limiet voor gebruik leidde tot verzadiging. <i>(saturation)<\/i> van knooppunten en een hoog niveau van verdrijvingen. Om dit probleem het hoofd te bieden, werd <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-com\/gl-infra\/delivery\/-\/issues\/998#note_388983696\">Besloten werd om de aanvragen te verhogen en de limieten te verlagen.<\/a><\/noindex>Dit ontlastte de knooppunten en zorgde voor een levenscyclus van pods die niet te veel druk op de knooppunten uitoefende. Nu beginnen we migraties met genereuze (en bijna identieke) waarden voor aanvragen en limieten, en passen we deze aan indien nodig.<\/p>\n<h3>3. Metrics en logs<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Onze conclusies na een jaar migratie van GitLab.com naar Kubernetes\" src=\"\/wp-content\/uploads\/2020\/09\/66d1fd47b57d5826f13defa6e6a7fe3c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Het infrastructuurteam richt zich op vertragingen, foutpercentages en verzadiging met betrekking tot de vastgestelde <\/i><noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Service-level_objective\"><i>service level doelstellingen<\/i><\/a><\/noindex><i> (SLO), gekoppeld aan <\/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>de algehele beschikbaarheid van ons systeem.<\/i><\/a><\/noindex><i>.<\/i><\/p>\n<p>In het afgelopen jaar waren verbeteringen in monitoring en het werken met SLO's een van de belangrijkste gebeurtenissen in het infrastructuurteam. SLO's stelden ons in staat om doelen te stellen voor afzonderlijke diensten, die we nauwlettend volgden tijdens de migratie. Maar zelfs met zo'n verbeterde zichtbaarheid is het niet altijd mogelijk om problemen snel te zien met alleen metrics en alerts. Bijvoorbeeld, door ons te concentreren op vertragingen en foutpercentages, dekken we niet alle gebruiksscenario's van de migrerende dienst volledig.<\/p>\n<p>Dit probleem werd vrijwel onmiddellijk ontdekt nadat we een deel van de werklasten naar het cluster hadden verplaatst. Het werd vooral duidelijk bij het controleren van functies waarbij het aantal aanvragen gering is, maar die zeer specifieke configuratie-afhankelijkheden hebben. Een van de belangrijkste lessen van de migratie was de noodzaak om bij monitoring niet alleen metrics, maar ook logs en de 'lange staart' in overweging te nemen. <i>(het betreft hun distributie <\/i><noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Long_tail\"><i>op de grafiek - opmerking vertaler)<\/i><\/a><\/noindex><i> van fouten. Nu integreren we voor elke migratie een gedetailleerde lijst van logaanvragen<\/i> (log queries) <i>en plannen we duidelijke roll-back procedures die in geval van problemen van de ene ploeg naar de andere kunnen worden overgedragen.<\/i> Parallelle afhandeling van dezelfde aanvragen op de oude VM-infrastructuur en de nieuwe op basis van Kubernetes vormde een unieke uitdaging. In tegenstelling tot lift-and-shift migratie<\/p>\n<p>(snelle verhuizing van applicaties \u2018zoals ze zijn\u2019 naar de nieuwe infrastructuur, meer hierover kan gelezen worden, bijvoorbeeld, <i>(snelle migratie van applicaties 'zoals ze zijn' naar een nieuwe infrastructuur; meer details kunnen bijvoorbeeld hier worden gelezen, <\/i><noindex><a rel=\"nofollow\" href=\"https:\/\/www.ibm.com\/cloud\/learn\/lift-and-shift\"><i>hier<\/i><\/a><\/noindex><i> \u2013 opmerking vert.)<\/i>, gelijktijdig werken op 'oude' VM's en Kubernetes vereist dat monitoringtools compatibel zijn met beide omgevingen en metrics in \u00e9\u00e9n zicht kunnen combineren. Het is belangrijk dat we dezelfde dashboards en logqueries gebruiken om consistente observatie gedurende de overgangsperiode te bereiken.<\/p>\n<h3>4. Verkeer omleiden naar de nieuwe cluster<\/h3>\n<p>\nVoor GitLab.com is een deel van de servers toegewezen aan <noindex><a rel=\"nofollow\" href=\"https:\/\/about.gitlab.com\/handbook\/engineering\/#canary-testing\">de canary-fase<\/a><\/noindex>. Het canary-park bedient onze interne projecten en kan ook <noindex><a rel=\"nofollow\" href=\"https:\/\/next.gitlab.com\/\">door gebruikers worden ingeschakeld<\/a><\/noindex>. Maar het is voornamelijk bedoeld om veranderingen in de infrastructuur en de applicatie te testen. De eerste overgezette dienst begon met het ontvangen van een beperkte hoeveelheid intern verkeer, en we blijven deze methode gebruiken om ervoor te zorgen dat we voldoen aan de SLO voordat we al het verkeer naar de cluster leiden.<\/p>\n<p>In het geval van migratie betekent dit dat verzoeken naar interne projecten eerst naar Kubernetes worden gestuurd, waarna we geleidelijk de rest van het verkeer naar de cluster omleiden door het gewicht voor de backend via HAProxy aan te passen. Tijdens de overgang van VM naar Kubernetes werd duidelijk dat het zeer voordelig is om een eenvoudige manier te hebben om verkeer tussen de oude en nieuwe infrastructuur om te leiden en om de oude infrastructuur gereed te houden voor terugval in de eerste paar dagen na de migratie.<\/p>\n<h3>5. Reserve-capaciteit van pods en hun gebruik<\/h3>\n<p>\nBijna meteen werd het volgende probleem vastgesteld: de pods voor de Registry-dienst startten snel, maar het opstarten van pods voor Sidekiq duurde tot <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-org\/charts\/gitlab\/-\/issues\/1775\">twee minuten<\/a><\/noindex>. De langdurige opstarttijd van de pods voor Sidekiq werd een probleem toen we begonnen met de migratie van Kubernetes-werkbelasting voor workers, die jobs snel moeten kunnen verwerken en snel moeten kunnen schalen.<\/p>\n<p>In dit geval bestond de les eruit dat, hoewel de Horizontal Pod Autoscaler (HPA) in Kubernetes goed omgaat met een toename van het verkeer, het belangrijk is om rekening te houden met de kenmerken van de werkbelastingen en om reserve capaciteit voor pods vrij te houden (vooral in situaties met ongelijke vraagverdeling). In ons geval was er een plotse piek in jobs, wat leidde tot een snelle schaalvergroting, waardoor de CPU-bronnen verzadigd raakten voordat we de pool van knooppunten konden opschalen.<\/p>\n<p>Er is altijd de verleiding om zoveel mogelijk uit de cluster te halen, maar nadat we aanvankelijk met prestatieproblemen te maken hadden gekregen, beginnen we nu met een genereuze podbudget en verlagen dat later, terwijl we de SLO nauwlettend in de gaten houden. Het opstarten van pods voor de Sidekiq-service is aanzienlijk versneld en duurt nu gemiddeld ongeveer 40 seconden. <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-org\/charts\/gitlab\/-\/issues\/1775\">Van het verkorten van de opstarttijd van pods<\/a><\/noindex> hebben zowel GitLab.com als onze gebruikers van self-managed installaties, die werken met de offici\u00eble Helm-chart van GitLab, geprofiteerd.<\/p>\n<h2>Conclusie<\/h2>\n<p>\nNa het migreren van elke service waren we blij met de voordelen van het gebruik van Kubernetes in productie: snellere en veiligere applicatiedeploys, schaling en efficienter resourcebeheer. Bovendien reiken de voordelen van de migratie verder dan de GitLab.com service. Elke verbetering van de offici\u00eble Helm-chart komt ook de gebruikers ten goede.<\/p>\n<p>Ik hoop dat je genoten hebt van het verhaal over onze avonturen met de migratie naar Kubernetes. We blijven steeds meer services naar de cluster verplaatsen. Meer informatie kun je vinden in de volgende publicaties:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/about.gitlab.com\/handbook\/engineering\/infrastructure\/production\/kubernetes\/gitlab-com\/\">Waarom migreren we naar 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 op Kubernetes<\/a><\/noindex>\u00bb;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/groups\/gitlab-com\/gl-infra\/-\/epics\/112\">Epic van de migratie van GitLab.com naar Kubernetes<\/a><\/noindex>.<\/li>\n<\/ul>\n<p><\/p>\n<h2>P.S. van de vertaler<\/h2>\n<p>\nLees ook op onze blog:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/519962\/\">3 jaar met Kubernetes in productie: dit hebben we geleerd<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/504396\/\">10 veelvoorkomende fouten bij het gebruik van Kubernetes<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/335814\/\">Succesverhalen van Kubernetes in productie. Deel 3: GitHub<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/440278\/\">De overstap van Tinder naar Kubernetes<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>Bron: <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\/nl\/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=\"nl_NL\" \/>\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\/nl\/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\udd47Onze bevindingen na een jaar migratie van GitLab.com naar Kubernetes | ProHoster","description":"Opmerking van de vertaler: de aanpassing van Kubernetes in GitLab wordt beschouwd als een van de twee belangrijkste factoren die bijdragen aan de groei van het bedrijf.","canonical_url":"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/nashi-vyvody-za-god-migraczii-gitlab-com-na-kubernetes","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"nl_NL","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\/nl\/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\/nl\/wp-json\/wp\/v2\/posts\/94977","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/comments?post=94977"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts\/94977\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media\/94978"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media?parent=94977"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/categories?post=94977"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/tags?post=94977"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}