{"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\/de\/blog\/administrirovanie\/nashi-vyvody-za-god-migraczii-gitlab-com-na-kubernetes","title":{"rendered":"Unsere Erkenntnisse nach einem Jahr Migration von GitLab.com auf Kubernetes","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><i><b>Anmerkung des \u00dcbersetzers.<\/b>: Die Anpassung von Kubernetes in GitLab wird als einer der beiden Hauptfaktoren angesehen, die das Wachstum des Unternehmens f\u00f6rdern. Bis vor Kurzem beruhte jedoch die Infrastruktur des Online-Dienstes GitLab.com auf virtuellen Maschinen, und erst vor etwa einem Jahr begann die Migration zu K8s, die bis heute noch nicht abgeschlossen ist. Wir freuen uns, die \u00dcbersetzung eines k\u00fcrzlich ver\u00f6ffentlichten Artikels eines SRE-Ingenieurs von GitLab vorzustellen, der beschreibt, wie dies geschieht und welche Schl\u00fcsse die am Projekt Beteiligten ziehen.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Unsere Erkenntnisse nach einem Jahr Migration von GitLab.com auf Kubernetes\" src=\"\/wp-content\/uploads\/2020\/09\/58429abf60cd19a49c5ce593051c2fca.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSeit etwa einem Jahr besch\u00e4ftigt sich unsere Infrastrukturabteilung mit der Migration aller Dienste, die auf GitLab.com laufen, nach Kubernetes. W\u00e4hrend dieser Zeit sind wir auf Probleme gesto\u00dfen, die nicht nur mit der Verschiebung der Dienste nach Kubernetes, sondern auch mit der Verwaltung des hybriden Deployments w\u00e4hrend des \u00dcbergangs verbunden sind. In diesem Artikel geht es um die wertvollen Lektionen, die wir dabei gelernt haben.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Von Anfang an arbeiteten die Server von GitLab.com in der Cloud auf virtuellen Maschinen. Diese virtuellen Maschinen werden von Chef verwaltet, und ihre Installation erfolgt \u00fcber unser <noindex><a rel=\"nofollow\" href=\"https:\/\/about.gitlab.com\/install\/#ubuntu\">offizielles Linux-Paket<\/a><\/noindex>. <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-org\/release\/docs\/-\/blob\/master\/general\/deploy\/gitlab-com-deployer.md\">Die Deploymentsstrategie<\/a><\/noindex> f\u00fcr den Fall eines App-Updates besteht darin, die Serverlandschaft koordiniert und sequentiell mithilfe eines CI-Pipelines zu aktualisieren. Diese Methode \u2014 auch wenn sie langsam und ein wenig <noindex><a rel=\"nofollow\" href=\"https:\/\/about.gitlab.com\/handbook\/values\/#boring-solutions\">langweilig<\/a><\/noindex> ist \u2014 garantiert, dass GitLab.com dieselben Installations- und Konfigurationsmethoden anwendet wie die Nutzer von <i>(self-managed)<\/i> Installationen von GitLab, die daf\u00fcr unsere Linux-Pakete verwenden.<\/p>\n<p>Wir verwenden diese Methode, weil es von gr\u00f6\u00dfter Bedeutung ist, die Freuden und Sorgen, die die Mitglieder der Community bei der Installation und Konfiguration ihrer GitLab-Kopien erleben, selbst zu sp\u00fcren. Dieser Ansatz hat einige Zeit gut funktioniert, aber als die Anzahl der Projekte auf GitLab \u00fcber 10 Millionen stieg, stellten wir fest, dass er unseren Anforderungen an Skalierung und Deployment nicht mehr gerecht wurde.<\/p>\n<h2>Die ersten Schritte zu Kubernetes und einem cloud-nativen GitLab<\/h2>\n<p>\nIm Jahr 2017 wurde das Projekt <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-org\/charts\">GitLab Charts<\/a><\/noindex> Um GitLab f\u00fcr die Bereitstellung in der Cloud vorzubereiten und den Benutzern zu erm\u00f6glichen, GitLab in Kubernetes-Clustern zu installieren. Zu diesem Zeitpunkt waren wir uns bewusst, dass der Umzug von GitLab nach Kubernetes die Skalierbarkeit der SaaS-Plattform erh\u00f6hen, die Bereitstellung vereinfachen und die Effizienz der Ressourcennutzung steigern w\u00fcrde. Gleichzeitig hingen viele Funktionen unserer Anwendung von gemounteten NFS-Partitionen ab, was den \u00dcbergang von virtuellen Maschinen verlangsamte.<\/p>\n<p>Der Drang nach Cloud-Native und Kubernetes erm\u00f6glichte es unseren Ingenieuren, einen schrittweisen \u00dcbergang zu planen, bei dem wir einige Abh\u00e4ngigkeiten der Anwendung von Netzspeichern aufgegeben haben, w\u00e4hrend wir gleichzeitig neue Funktionen weiterentwickelten. Seit wir im Sommer 2019 mit der Planung der Migration begonnen haben, wurden viele dieser Einschr\u00e4nkungen beseitigt, und der Prozess der \u00dcbertragung von GitLab.com nach Kubernetes l\u00e4uft jetzt auf Hochtouren!<\/p>\n<h2>Funktionsweise von GitLab.com in Kubernetes<\/h2>\n<p>\nF\u00fcr GitLab.com verwenden wir einen einheitlichen regionalen GKE-Cluster, der den gesamten Anwendungsverkehr verarbeitet. Um die (bereits komplexe) Migration zu vereinfachen, konzentrieren wir uns auf Dienste, die nicht von lokalem Speicher oder NFS abh\u00e4ngen. GitLab.com verwendet haupts\u00e4chlich eine monolithische Codebasis auf Rails, und wir leiten den Verkehr je nach Arbeitslastmerkmalen zu verschiedenen Endpunkten, die in ihren eigenen Knotengruppen isoliert sind.<\/p>\n<p>Im Falle des Frontends werden diese Typen in Webanfragen, API, Git SSH\/HTTPS und Registry unterteilt. Im Backend teilen wir Jobs in der Warteschlange nach verschiedenen Merkmalen auf, abh\u00e4ngig von <noindex><a rel=\"nofollow\" href=\"https:\/\/about.gitlab.com\/blog\/2020\/06\/24\/scaling-our-use-of-sidekiq\/\">vordefinierten Ressourcenlimits<\/a><\/noindex>, die es uns erm\u00f6glichen, Zielvorgaben f\u00fcr die Dienstleistungsstufen (Service-Level Objectives, SLOs) f\u00fcr verschiedene Lasten festzulegen.<\/p>\n<p>Alle diese Dienste von GitLab.com sind mit dem unver\u00e4nderten Helm-Chart von GitLab konfiguriert. Die Konfiguration erfolgt in Subcharts, die nach Bedarf aktiviert werden k\u00f6nnen, w\u00e4hrend wir schrittweise Dienste in den Cluster \u00fcbertragen. Selbst wenn beschlossen wurde, einige unserer stateful Dienste wie Redis, Postgres, GitLab Pages und Gitaly nicht in die Migration einzubeziehen, erm\u00f6glicht Kubernetes eine drastische Reduzierung der Anzahl der VMs, die derzeit von Chef verwaltet werden.<\/p>\n<h2>Transparenz und Konfigurationsmanagement von Kubernetes<\/h2>\n<p>\nAlle Konfigurationen werden von GitLab selbst verwaltet. Dazu verwenden wir drei Konfigurationsprojekte, die auf Terraform und Helm basieren. Wo immer m\u00f6glich, versuchen wir, GitLab selbst zu verwenden, um GitLab zu betreiben, aber f\u00fcr betriebliche Aufgaben haben wir eine separate GitLab-Instanz. Diese ist notwendig, um bei Deployments und Updates von GitLab.com nicht von der Verf\u00fcgbarkeit von GitLab.com abh\u00e4ngig zu sein.<\/p>\n<p>Obwohl unsere Pipelines f\u00fcr den Kubernetes-Cluster auf einer separaten Installation von GitLab laufen, gibt es f\u00fcr die Code-Repositories \u00f6ffentliche Spiegel unter den folgenden 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 Konfigurations-H\u00fclle f\u00fcr GitLab.com f\u00fcr das Helm-Chart von 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 enth\u00e4lt Konfigurationen f\u00fcr Dienste, die nicht direkt mit der Anwendung GitLab verbunden sind. Dazu geh\u00f6ren Konfigurationen f\u00fcr das Logging und Monitoring des Clusters sowie f\u00fcr integrierte Tools wie 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 f\u00fcr Kubernetes und alte (Legacy) VM-Infrastruktur. Hier werden alle Ressourcen konfiguriert, die f\u00fcr den Betrieb des Clusters erforderlich sind, einschlie\u00dflich des Clusters selbst, Knotenpools, Dienstkonten und IP-Reservierungen.<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"Unsere Erkenntnisse nach einem Jahr Migration von GitLab.com auf Kubernetes\" src=\"\/wp-content\/uploads\/2020\/09\/612125403171d73106a081bf4244a52b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Bei \u00c4nderungen wird eine \u00f6ffentliche <\/i><noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-com\/gl-infra\/k8s-workloads\/gitlab-com\/-\/merge_requests\/315#note_390180361\"><i>kurze Zusammenfassung<\/i><\/a><\/noindex><i> angezeigt, die auf einen detaillierten Diff verweist, den die SRE vor der Durchf\u00fchrung von \u00c4nderungen im Cluster analysiert.<\/i><\/p>\n<p>F\u00fcr SRE f\u00fchrt der Link zu einem detaillierten Diff in der GitLab-Instanz, die f\u00fcr den Betrieb verwendet wird und deren Zugang eingeschr\u00e4nkt ist. Dies erm\u00f6glicht es Mitarbeitern und der Gemeinschaft, die keinen Zugriff auf das Betriebsprojekt haben (das nur f\u00fcr SRE zug\u00e4nglich ist), die vorgeschlagenen \u00c4nderungen in der Konfiguration zu sehen. Durch die Kombination einer \u00f6ffentlichen GitLab-Instanz f\u00fcr den Code mit einer geschlossenen Instanz f\u00fcr CI-Pipelines bewahren wir einen einheitlichen Arbeitsablauf und stellen gleichzeitig die Unabh\u00e4ngigkeit von GitLab.com bei der Aktualisierung der Konfiguration sicher.<\/p>\n<h2>Was wir w\u00e4hrend der Migration herausgefunden haben<\/h2>\n<p>\nIm Verlauf des Umzugs wurden Erfahrungen gesammelt, die wir auf neue Migrationen und Deployments in Kubernetes anwenden.<\/p>\n<h3>1. Steigende Kosten aufgrund des Datenverkehrs zwischen den Verf\u00fcgbarkeitszonen<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Unsere Erkenntnisse nach einem Jahr Migration von GitLab.com auf Kubernetes\" src=\"\/wp-content\/uploads\/2020\/09\/3dce44b3f803ffcea13e0101e7343d91.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>T\u00e4gliche Egress-Statistik (Byte pro Tag) f\u00fcr den Git-Repo-Park auf GitLab.com<\/i><\/p>\n<p>Google teilt sein Netzwerk in Regionen auf. Diese werden wiederum in Verf\u00fcgbarkeitszonen (AZ) unterteilt. Git-Hosting ist mit gro\u00dfen Datenmengen verbunden, weshalb es wichtig ist, den Netzwerk-Egress zu kontrollieren. Bei internem Traffic ist der Egress nur dann kostenlos, wenn er innerhalb einer Verf\u00fcgbarkeitszone bleibt. Zum Zeitpunkt der Erstellung dieses Artikels geben wir an einem normalen Arbeitstag etwa 100 TB Daten aus (und das nur f\u00fcr Git-Repositorys). Die Dienste, die in unserer alten VM-basierten Topologie auf denselben virtuellen Maschinen waren, laufen jetzt in verschiedenen Kubernetes-Pods. Das bedeutet, dass ein Teil des Traffics, der zuvor lokal f\u00fcr die VMs war, potenziell \u00fcber die Grenzen der Verf\u00fcgbarkeitszonen hinausgehen kann.<\/p>\n<p>Regionale GKE-Cluster erm\u00f6glichen es, mehrere Verf\u00fcgbarkeitszonen zur Sicherstellung der Verf\u00fcgbarkeit abzudecken. Wir pr\u00fcfen die M\u00f6glichkeit, <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-com\/gl-infra\/delivery\/-\/issues\/1175\">den regionalen GKE-Cluster in ein zonales Cluster aufzuteilen<\/a><\/noindex> f\u00fcr Dienste, die gro\u00dfe Datenmengen generieren. Dies wird die egress-Kosten senken, w\u00e4hrend die Clusterverf\u00fcgbarkeit erhalten bleibt.<\/p>\n<h3>2. Limits, Ressourcennachfragen und Skalierung<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Unsere Erkenntnisse nach einem Jahr Migration von GitLab.com auf Kubernetes\" src=\"\/wp-content\/uploads\/2020\/09\/6e2e1ca4d37666b49358d94cd8660c56.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Anzahl der Replikate, die den Produktionsverkehr auf registry.gitlab.com verarbeiten. Der Verkehr erreicht seinen H\u00f6hepunkt um etwa 15:00 UTC.<\/i><\/p>\n<p>Unsere Geschichte mit der Migration begann im August 2019, als wir den ersten Dienst \u2013 das GitLab Container Registry \u2013 nach Kubernetes verschoben. Dieser kritisch wichtige Dienst mit hohem Traffic war ideal f\u00fcr die erste Migration, da es sich um eine zustandslose Anwendung mit wenigen externen Abh\u00e4ngigkeiten handelte. Das erste Problem, mit dem wir konfrontiert wurden, war die hohe Anzahl an verdr\u00e4ngten Pods aufgrund von Speichermangel auf den Knoten. Daher mussten wir die Ressourcennachfragen und Limits anpassen.<\/p>\n<p>Es stellte sich heraus, dass bei einer Anwendung, deren Speicherverbrauch im Laufe der Zeit steigt, niedrige Werte f\u00fcr die Ressourcennachfragen (die Speicher f\u00fcr jeden Pod reservieren) zusammen mit einem \"gro\u00dfz\u00fcgigen\" harten Limit f\u00fcr die Nutzung zu Engp\u00e4ssen f\u00fchrten. <i>(Saturation)<\/i> der Knoten und zu einer hohen Verdr\u00e4ngungsrate f\u00fchrten. Um dieses Problem zu beheben, wurde <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-com\/gl-infra\/delivery\/-\/issues\/998#note_388983696\">Es wurde beschlossen, die Ressourcennachfragen zu erh\u00f6hen und die Limits zu senken.<\/a><\/noindex>. Dies entlastete die Knoten und sorgte f\u00fcr einen Lebenszyklus der Pods, der nicht zu viel Druck auf den Knoten aus\u00fcbte. Nun beginnen wir mit Migrationen mit gro\u00dfz\u00fcgigen (und nahezu identischen) Werten f\u00fcr Ressourcennachfragen und Limits und passen diese bei Bedarf an.<\/p>\n<h3>3. Metriken und Protokolle<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Unsere Erkenntnisse nach einem Jahr Migration von GitLab.com auf Kubernetes\" src=\"\/wp-content\/uploads\/2020\/09\/66d1fd47b57d5826f13defa6e6a7fe3c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Die Infrastrukturabteilung konzentriert sich auf Latenzen, Fehlerraten und die S\u00e4ttigung mit festgelegten <\/i><noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Service-level_objective\"><i>Zielen f\u00fcr den Service-Level<\/i><\/a><\/noindex><i> (SLO), die an <\/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>die Gesamtverf\u00fcgbarkeit unseres Systems<\/i><\/a><\/noindex><i>.<\/i><\/p>\n<p>gebunden sind. Im vergangenen Jahr war eines der Schl\u00fcsselergebnisse in der Infrastrukturabteilung die Verbesserungen im Monitoring und im Umgang mit SLO. SLO haben es uns erm\u00f6glicht, Ziele f\u00fcr einzelne Dienste festzulegen, die wir w\u00e4hrend der Migration genau verfolgt haben. Aber selbst mit dieser verbesserten Sichtbarkeit ist es nicht immer m\u00f6glich, Probleme sofort zu erkennen, indem wir Metriken und Alarme verwenden. Zum Beispiel haben wir uns auf Latenzen und Fehlerraten konzentriert, aber wir decken nicht alle Nutzungsszenarien des Dienstes ab, der migriert wird.<\/p>\n<p>Dieses Problem wurde fast sofort nach dem Transfer eines Teils der Workloads in den Cluster festgestellt. Besonders deutlich wurde es, als wir Funktionen \u00fcberpr\u00fcften, f\u00fcr die die Anzahl der Anfragen gering war, aber sehr spezifische Konfigurationsabh\u00e4ngigkeiten hatten. Eine der wichtigsten Lektionen aus der Migration war die Notwendigkeit, bei der \u00dcberwachung nicht nur Metriken, sondern auch Protokolle und den \"langen Schwanz\" <i>(hier ist das die Verteilung <\/i><noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Long_tail\"><i>auf dem Diagramm \u2013 Anm. d. \u00dc.)<\/i><\/a><\/noindex><i> von Fehlern. Jetzt f\u00fcgen wir f\u00fcr jede Migration eine detaillierte Liste von Abfragen zu den Protokollen<\/i> (log queries) <i>hinzu und planen klare Rollbackverfahren, die im Fall von Problemen von einem Schichtwechsel zum anderen \u00fcbergeben werden k\u00f6nnen.<\/i> Das parallele Bedienen derselben Anfragen auf der alten VM-Infrastruktur und der neuen, die auf Kubernetes basiert, war eine einzigartige Herausforderung. Im Gegensatz zur Lift-and-Shift-Migration<\/p>\n<p>(schnelle \u00dcbertragung von Anwendungen \u201ewie sie sind\u201c in die neue Infrastruktur; weitere Informationen finden Sie zum Beispiel auf <i>(schnelle \u00dcbertragung von Anwendungen \u201ewie sie sind\u201c in die neue Infrastruktur; weitere Informationen finden Sie beispielsweise unter <\/i><noindex><a rel=\"nofollow\" href=\"https:\/\/www.ibm.com\/cloud\/learn\/lift-and-shift\"><i>hier<\/i><\/a><\/noindex><i> \u2014 Anm. d. \u00dcbersetzer)<\/i>, die parallele Arbeit auf \"alten\" VMs und Kubernetes erfordert, dass die \u00dcberwachungstools mit beiden Umgebungen kompatibel sind und in der Lage sind, Metriken in einer einheitlichen Ansicht zu konsolidieren. Es ist wichtig, dass wir dieselben Dashboards und Abfragen f\u00fcr Logs verwenden, um eine konsistente Beobachtbarkeit w\u00e4hrend der \u00dcbergangsphase zu erreichen.<\/p>\n<h3>4. Umleitung des Datenverkehrs auf den neuen Cluster<\/h3>\n<p>\nF\u00fcr GitLab.com sind einige Server reserviert f\u00fcr <noindex><a rel=\"nofollow\" href=\"https:\/\/about.gitlab.com\/handbook\/engineering\/#canary-testing\">die Canary-Phase<\/a><\/noindex>. Der Canary-Park bedient unsere internen Projekte und kann auch <noindex><a rel=\"nofollow\" href=\"https:\/\/next.gitlab.com\/\">von Benutzern aktiviert werden<\/a><\/noindex>. Prim\u00e4r dient er jedoch zur \u00dcberpr\u00fcfung von \u00c4nderungen an der Infrastruktur und der Anwendung. Der erste migrierte Dienst begann mit der Annahme eines begrenzten Volumens internen Verkehrs, und wir setzen diese Methode fort, um sicherzustellen, dass die SLO eingehalten werden, bevor der gesamte Verkehr auf den Cluster geleitet wird.<\/p>\n<p>Im Falle der Migration bedeutet dies, dass zuerst die Anfragen zu internen Projekten in Kubernetes geleitet werden, und anschlie\u00dfend schalten wir schrittweise den restlichen Verkehr auf den Cluster um, indem wir das Gewicht f\u00fcr das Backend \u00fcber HAProxy \u00e4ndern. W\u00e4hrend des \u00dcbergangs von VMs zu Kubernetes wurde deutlich, dass es sehr vorteilhaft ist, eine einfache M\u00f6glichkeit zur Umleitung des Verkehrs zwischen der alten und der neuen Infrastruktur in der Hinterhand zu haben und die alte Infrastruktur w\u00e4hrend der ersten Tage nach der Migration f\u00fcr einen Rollback bereit zu halten.<\/p>\n<h3>5. Backup-Kapazit\u00e4ten der Pods und deren Nutzung<\/h3>\n<p>\nFast sofort trat das n\u00e4chste Problem auf: Die Pods f\u00fcr den Registry-Dienst starteten schnell, jedoch dauerte der Start der Pods f\u00fcr Sidekiq bis zu <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-org\/charts\/gitlab\/-\/issues\/1775\">zwei Minuten<\/a><\/noindex>. Der langwierige Start der Pods f\u00fcr Sidekiq wurde problematisch, als wir mit der Migration der Kubernetes-Workloads f\u00fcr Worker begannen, die Jobs schnell verarbeiten und sich schnell skalieren m\u00fcssen.<\/p>\n<p>In diesem Fall bestand die Lektion darin, dass der Horizontal Pod Autoscaler (HPA) in Kubernetes zwar gut mit dem Anstieg des Datenverkehrs umgeht, es jedoch wichtig ist, die Merkmale der Arbeitslasten zu ber\u00fccksichtigen und Pufferressourcen f\u00fcr Pods bereitzustellen (insbesondere unter Bedingungen mit ungleichm\u00e4\u00dfiger Nachfragverteilung). In unserem Fall gab es einen pl\u00f6tzlichen Anstieg von Jobs, der zu einer schnellen Skalierung f\u00fchrte, was dazu f\u00fchrte, dass die CPU-Ressourcen ges\u00e4ttigt waren, bevor wir den Knotenpool skalieren konnten.<\/p>\n<p>Es gibt immer die Versuchung, so viel wie m\u00f6glich aus dem Cluster herauszuholen, doch wir haben, nachdem wir anf\u00e4nglich auf Leistungsprobleme gesto\u00dfen sind, nun mit einem gro\u00dfz\u00fcgigen Pod-Budget begonnen und verringern es sp\u00e4ter, w\u00e4hrend wir die SLO genau im Auge behalten. Das Starten von Pods f\u00fcr den Sidekiq-Dienst hat sich erheblich beschleunigt und dauert jetzt im Durchschnitt etwa 40 Sekunden. <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-org\/charts\/gitlab\/-\/issues\/1775\">Von der Verk\u00fcrzung der Startzeit der Pods<\/a><\/noindex> profitierte sowohl GitLab.com als auch unsere Benutzer der Self-Managed-Installationen, die mit dem offiziellen Helm-Chart von GitLab arbeiten.<\/p>\n<h2>Fazit<\/h2>\n<p>\nNachdem wir jeden Dienst migriert hatten, freuten wir uns \u00fcber die Vorteile der Nutzung von Kubernetes in der Produktion: schnellere und sicherere Anwendungs-Deployments, Skalierung und eine effizientere Ressourcennutzung. Die Vorteile der Migration gehen \u00fcber den Dienst GitLab.com hinaus. Auch die Benutzer des offiziellen Helm-Charts profitieren von jeder Verbesserung.<\/p>\n<p>Ich hoffe, Ihnen hat die Geschichte \u00fcber unsere Abenteuer mit der Migration zu Kubernetes gefallen. Wir setzen die Migration weiterer Dienste in den Cluster fort. Weitere Informationen finden Sie in den folgenden Ver\u00f6ffentlichungen:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/about.gitlab.com\/handbook\/engineering\/infrastructure\/production\/kubernetes\/gitlab-com\/\">Warum migrieren wir zu 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 auf Kubernetes<\/a><\/noindex>\u00bb;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/groups\/gitlab-com\/gl-infra\/-\/epics\/112\">Epic zur Migration von GitLab.com auf Kubernetes<\/a><\/noindex>.<\/li>\n<\/ul>\n<p><\/p>\n<h2>P.S. vom \u00dcbersetzer<\/h2>\n<p>\nLesen Sie auch in unserem Blog:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/519962\/\">3 Jahre mit Kubernetes in der Produktion: das haben wir verstanden<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/504396\/\">10 h\u00e4ufige Fehler bei der Nutzung von Kubernetes<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/335814\/\">Erfolgsgeschichten von Kubernetes in der Produktion. Teil 3: GitHub<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/440278\/\">Erfolgsgeschichten von Kubernetes in der Produktion. Teil 10: Reddit<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>Quelle: <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.1.1 - 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\/de\/blog\/administrirovanie\/nashi-vyvody-za-god-migraczii-gitlab-com-na-kubernetes\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\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\/de\/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\udd47Unsere Erkenntnisse nach einem Jahr Migration von GitLab.com zu Kubernetes | ProHoster","description":"Anmerkung des \u00dcbersetzers: Die Anpassung von Kubernetes in GitLab wird als einer der beiden Hauptfaktoren betrachtet, die zum Wachstum des Unternehmens beigetragen haben.","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/nashi-vyvody-za-god-migraczii-gitlab-com-na-kubernetes","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","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\/de\/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\/de\/wp-json\/wp\/v2\/posts\/94977","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=94977"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/94977\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/94978"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=94977"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=94977"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=94977"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}