{"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\/it\/blog\/administrirovanie\/nashi-vyvody-za-god-migraczii-gitlab-com-na-kubernetes","title":{"rendered":"Le nostre conclusioni dopo un anno di migrazione di GitLab.com su Kubernetes","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><i><b>Nota di traduzione.<\/b>: l'adattamento di Kubernetes in GitLab \u00e8 considerato uno dei due principali fattori che contribuiscono alla crescita dell'azienda. Tuttavia, fino a poco tempo fa, l'infrastruttura del servizio online GitLab.com era costruita su macchine virtuali, e solo circa un anno fa \u00e8 iniziata la sua migrazione a K8s, che non \u00e8 ancora terminata. Siamo lieti di presentare la traduzione di un recente articolo di un ingegnere SRE di GitLab su come sta avvenendo questo e quali conclusioni traggono gli ingegneri coinvolti nel progetto.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Le nostre conclusioni dopo un anno di migrazione di GitLab.com su Kubernetes\" src=\"\/wp-content\/uploads\/2020\/09\/58429abf60cd19a49c5ce593051c2fca.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDa circa un anno, il nostro dipartimento infrastrutturale si occupa della migrazione di tutti i servizi operanti su GitLab.com in Kubernetes. Durante questo periodo, abbiamo affrontato problemi non solo legati al trasferimento dei servizi in Kubernetes, ma anche alla gestione del deployment ibrido durante la transizione. Gli insegnamenti preziosi che abbiamo appreso saranno oggetto di questo articolo.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Sin dall'inizio, i server di GitLab.com hanno funzionato nel cloud su macchine virtuali. Queste macchine virtuali sono gestite da Chef, e la loro installazione avviene tramite il nostro <noindex><a rel=\"nofollow\" href=\"https:\/\/about.gitlab.com\/install\/#ubuntu\">pacchetto ufficiale per Linux<\/a><\/noindex>. <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-org\/release\/docs\/-\/blob\/master\/general\/deploy\/gitlab-com-deployer.md\">La strategia di distribuzione<\/a><\/noindex> nel caso in cui sia necessario aggiornare l'applicazione consiste in un semplice aggiornamento del parco server in modo coordinato e sequenziale tramite un pipeline CI. Questo metodo \u2014 sebbene lento e un po' <noindex><a rel=\"nofollow\" href=\"https:\/\/about.gitlab.com\/handbook\/values\/#boring-solutions\">noioso<\/a><\/noindex> \u2014 garantisce che GitLab.com utilizzi gli stessi metodi di installazione e configurazione degli utenti delle installazioni autonome <i>(self-managed)<\/i> di GitLab, utilizzando per questo i nostri pacchetti per Linux.<\/p>\n<p>Utilizziamo questo metodo poich\u00e9 \u00e8 estremamente importante vivere tutte le gioie e i dolori che i membri della comunit\u00e0 affrontano quando installano e configurano le proprie copie di GitLab. Questo approccio ha funzionato bene per un certo periodo, tuttavia quando il numero di progetti su GitLab ha superato i 10 milioni, abbiamo capito che non soddisfaceva pi\u00f9 le nostre esigenze di scalabilit\u00e0 e distribuzione.<\/p>\n<h2>I primi passi verso Kubernetes e GitLab cloud-native<\/h2>\n<p>\nNel 2017 \u00e8 stato creato il progetto <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-org\/charts\">GitLab Charts<\/a><\/noindex> per preparare GitLab al deployment nel cloud e per dare agli utenti la possibilit\u00e0 di installare GitLab in cluster Kubernetes. Allora sapevamo che il trasferimento di GitLab in Kubernetes avrebbe aumentato le capacit\u00e0 di scalabilit\u00e0 della piattaforma SaaS, semplificato i deployment e migliorato l'efficienza nell'uso delle risorse computazionali. Allo stesso tempo, molte funzionalit\u00e0 della nostra applicazione dipendevano da partizioni NFS montate, il che rallentava il passaggio dalle macchine virtuali.<\/p>\n<p>L'aspirazione al cloud native e Kubernetes ha permesso ai nostri ingegneri di pianificare una transizione graduale, durante la quale abbiamo ridotto alcune dipendenze dell'applicazione da archiviazioni di rete, continuando a sviluppare nuove funzionalit\u00e0. Da quando abbiamo iniziato a pianificare la migrazione nell'estate del 2019, molte di queste limitazioni sono state eliminate, e il processo di migrazione di GitLab.com su Kubernetes \u00e8 ora a tutto ritmo!<\/p>\n<h2>Caratteristiche del funzionamento di GitLab.com in Kubernetes<\/h2>\n<p>\nPer GitLab.com utilizziamo un'unica cluster regionale GKE che gestisce tutto il traffico dell'applicazione. Per minimizzare la complessit\u00e0 (gi\u00e0 complessa) della migrazione, ci concentriamo sui servizi che non dipendono da storage locale o NFS. GitLab.com utilizza principalmente una base di codice monolitica su Rails, e indirizziamo il traffico in base alle caratteristiche del carico di lavoro su vari endpoint, isolati in propri pool di nodi.<\/p>\n<p>Nel caso del frontend, questi tipi si suddividono in richieste a web, API, Git SSH\/HTTPS e Registry. Per quanto riguarda il backend, suddividiamo i job in coda in base a diverse caratteristiche a seconda di <noindex><a rel=\"nofollow\" href=\"https:\/\/about.gitlab.com\/blog\/2020\/06\/24\/scaling-our-use-of-sidekiq\/\">limiti di risorse predefiniti<\/a><\/noindex>, che ci consentono di stabilire obiettivi di livello di servizio (Service-Level Objectives, SLOs) per diversi carichi.<\/p>\n<p>Tutti questi servizi di GitLab.com sono configurati utilizzando un Helm chart di GitLab non modificato. La configurazione avviene tramite subchart, che possono essere selettivamente attivati man mano che trasferiamo gradualmente i servizi nel cluster. Anche se \u00e8 stata presa la decisione di non includere nella migrazione alcuni dei nostri servizi stateful, come Redis, Postgres, GitLab Pages e Gitaly, l'uso di Kubernetes consente di ridurre drasticamente il numero di VM gestite da Chef attualmente.<\/p>\n<h2>Trasparenza e gestione della configurazione di Kubernetes<\/h2>\n<p>\nTutte le impostazioni sono gestite dallo stesso GitLab. A tal fine, utilizziamo tre progetti di configurazione basati su Terraform e Helm. Cerchiamo di utilizzare GitLab in ogni modo possibile per eseguire GitLab, ma per compiti operativi abbiamo un'installazione separata di GitLab. Questa \u00e8 necessaria per non dipendere dalla disponibilit\u00e0 di GitLab.com durante i deployment e gli aggiornamenti di GitLab.com.<\/p>\n<p>Sebbene i nostri pipeline per il cluster Kubernetes funzionino su un'installazione separata di GitLab, i repository di codice hanno specchi, accessibili pubblicamente ai seguenti indirizzi:<\/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 integrazione di configurazione di GitLab.com per il chart Helm di 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 contiene configurazioni per i servizi che non sono direttamente legati all'applicazione GitLab. Questi includono configurazioni per la registrazione e il monitoraggio del cluster, nonch\u00e9 per strumenti integrati come PlantUML;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-com\/gitlab-com-infrastructure\">Gitlab-com-infrastructure<\/a><\/noindex> \u2014 configurazione Terraform per Kubernetes e vecchia infrastruttura VM. Qui vengono configurate tutte le risorse necessarie per avviare il cluster, incluso il cluster stesso, i pool di nodi, gli account di servizio, la prenotazione degli indirizzi IP.<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"Le nostre conclusioni dopo un anno di migrazione di GitLab.com su Kubernetes\" src=\"\/wp-content\/uploads\/2020\/09\/612125403171d73106a081bf4244a52b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Quando vengono apportate modifiche, viene mostrato un pubblico <\/i><noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-com\/gl-infra\/k8s-workloads\/gitlab-com\/-\/merge_requests\/315#note_390180361\"><i>riepilogo<\/i><\/a><\/noindex><i> con un collegamento alla differenza dettagliata, che SRE analizza prima di apportare modifiche al cluster.<\/i><\/p>\n<p>Per SRE, il link porta a un dettagliato diff nell'installazione di GitLab utilizzata per le operazioni e a cui l'accesso \u00e8 limitato. Questo consente a dipendenti e alla comunit\u00e0 senza accesso al progetto operativo (aperto solo per SRE) di visualizzare le modifiche proposte nella configurazione. Combinando un'istanza pubblica di GitLab per il codice con un'istanza chiusa per i pipeline CI, manteniamo un flusso di lavoro unificato, garantendo al contempo l'indipendenza da GitLab.com durante gli aggiornamenti di configurazione.<\/p>\n<h2>Cosa abbiamo scoperto durante la migrazione<\/h2>\n<p>\nDurante il trasloco sono state accumulate esperienze che applichiamo a nuove migrazioni e distribuzioni in Kubernetes.<\/p>\n<h3>1. Aumento dei costi a causa del traffico tra le zone di disponibilit\u00e0<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Le nostre conclusioni dopo un anno di migrazione di GitLab.com su Kubernetes\" src=\"\/wp-content\/uploads\/2020\/09\/3dce44b3f803ffcea13e0101e7343d91.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Statistiche giornaliere di egress (byte al giorno) per il parco di repository Git su GitLab.com<\/i><\/p>\n<p>Google suddivide la propria rete in regioni. Queste, a loro volta, sono suddivise in aree di disponibilit\u00e0 (AZ). L'hosting Git \u00e8 legato a grandi volumi di dati, quindi \u00e8 importante controllare l'egress della rete. Nel caso di traffico interno, l'egress \u00e8 gratuito solo se rimane all'interno di un'unica area di disponibilit\u00e0. Al momento della scrittura di questo articolo, stiamo trasferendo circa 100 TB di dati in un giorno lavorativo normale (e questo \u00e8 solo per i repository Git). I servizi che nella nostra vecchia topologia basata su VM si trovavano sulle stesse macchine virtuali ora operano in diversi pod di Kubernetes. Questo significa che una parte del traffico che prima era locale per le VM potrebbe potenzialmente uscire dalle aree di disponibilit\u00e0.<\/p>\n<p>I cluster regionali GKE consentono di coprire pi\u00f9 zone di disponibilit\u00e0 per la riserva. Stiamo considerando di <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-com\/gl-infra\/delivery\/-\/issues\/1175\">dividere il cluster regionale GKE in cluster mono-zona<\/a><\/noindex> per i servizi che generano grandi volumi di traffico. Questo ridurr\u00e0 i costi di egress mantenendo la riserva a livello di cluster.<\/p>\n<h3>2. Limiti, richieste di risorse e scalabilit\u00e0<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Le nostre conclusioni dopo un anno di migrazione di GitLab.com su Kubernetes\" src=\"\/wp-content\/uploads\/2020\/09\/6e2e1ca4d37666b49358d94cd8660c56.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Il numero di repliche che gestiscono il traffico di produzione su registry.gitlab.com. Il traffico raggiunge il suo picco intorno alle 15:00 UTC.<\/i><\/p>\n<p>La nostra storia di migrazione \u00e8 iniziata nell'agosto 2019, quando abbiamo migrato il primo servizio \u2014 il registro dei contenitori GitLab (GitLab Container Registry) \u2014 in Kubernetes. Questo servizio critico ad alto traffico si \u00e8 rivelato adatto per la prima migrazione, poich\u00e9 rappresenta un'applicazione stateless con poche dipendenze esterne. Il primo problema che abbiamo affrontato \u00e8 stato il numero elevato di pod espulsi a causa della mancanza di memoria sui nodi. Di conseguenza, abbiamo dovuto modificare richieste e limiti.<\/p>\n<p>\u00c8 stato scoperto che, nel caso di un'applicazione il cui consumo di memoria cresce nel tempo, valori bassi per le richieste (riservando memoria per ogni pod) insieme a un 'generoso' limite rigido sull'uso portavano a saturazione. <i>(saturazione)<\/i> dei nodi e a un alto livello di espulsioni. Per affrontare questo problema, \u00e8 stato <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-com\/gl-infra\/delivery\/-\/issues\/998#note_388983696\">\u00c8 deciso di aumentare le richieste e ridurre i limiti.<\/a><\/noindex>Questo ha alleviato la pressione sui nodi e ha garantito un ciclo di vita dei pod che non esercitava troppa pressione sul nodo. Ora iniziamo le migrazioni con valori generosi (e quasi identici) per le richieste e i limiti, apportando le necessarie correzioni.<\/p>\n<h3>3. Metriche e log<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Le nostre conclusioni dopo un anno di migrazione di GitLab.com su Kubernetes\" src=\"\/wp-content\/uploads\/2020\/09\/66d1fd47b57d5826f13defa6e6a7fe3c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Il dipartimento infrastrutturale si concentra sui ritardi, sulla percentuale di errori e sulla saturazione rispetto agli obiettivi stabiliti <\/i><noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Service-level_objective\"><i>per il livello di servizio<\/i><\/a><\/noindex><i> (SLO), legati a <\/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>alla disponibilit\u00e0 complessiva del nostro sistema<\/i><\/a><\/noindex><i>.<\/i><\/p>\n<p>Nell'ultimo anno, uno degli eventi chiave nel dipartimento infrastrutturale \u00e8 stato il miglioramento nel monitoraggio e nella gestione degli SLO. Gli SLO ci hanno permesso di stabilire obiettivi per i singoli servizi, che abbiamo monitorato attentamente durante la migrazione. Ma anche con una tale osservabilit\u00e0 migliorata, non sempre \u00e8 possibile vedere immediatamente i problemi utilizzando metriche e allerte. Ad esempio, concentrandoci sui ritardi e sulla percentuale di errori, non copriamo completamente tutti gli scenari di utilizzo del servizio in fase di migrazione.<\/p>\n<p>Questo problema \u00e8 stato individuato quasi subito dopo aver trasferito parte dei carichi di lavoro nel cluster. Si \u00e8 fatto sentire in particolare quando si \u00e8 trattato di verificare funzionalit\u00e0 per le quali il numero di richieste \u00e8 ridotto, ma che hanno dipendenze di configurazione molto specifiche. Una delle lezioni chiave emerse dalla migrazione \u00e8 stata la necessit\u00e0 di considerare nel monitoraggio non solo le metriche, ma anche i log e il 'lungo coda' <i>(riferendosi a <\/i><noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Long_tail\"><i>tale distribuzione<\/i><\/a><\/noindex><i> su un grafico \u2014 ndt.)<\/i> di errori. Ora, per ogni migrazione, includiamo un elenco dettagliato di richieste ai log <i>(log queries)<\/i> e pianifichiamo procedure di rollback chiare, che in caso di problemi possono essere trasferite da un turno all'altro.<\/p>\n<p>Servire in parallelo le stesse richieste sulla vecchia infrastruttura VM e su quella nuova, basata su Kubernetes, ha rappresentato una sfida unica. A differenza della migrazione lift-and-shift <i>(trasferimento rapido delle applicazioni 'cos\u00ec come sono' nella nuova infrastruttura; maggiori dettagli possono essere letti, ad esempio, <\/i><noindex><a rel=\"nofollow\" href=\"https:\/\/www.ibm.com\/cloud\/learn\/lift-and-shift\"><i>qui<\/i><\/a><\/noindex><i> \u2014 nota del traduttore.)<\/i>, il lavoro parallelo su VM \"vecchie\" e Kubernetes richiede che gli strumenti di monitoraggio siano compatibili con entrambe le ambienti e in grado di unire le metriche in un'unica vista. \u00c8 importante che utilizziamo gli stessi dashboard e le stesse query ai log per ottenere una visibilit\u00e0 coerente durante il periodo di transizione.<\/p>\n<h3>4. Reindirizzamento del traffico al nuovo cluster<\/h3>\n<p>\nPer GitLab.com, parte dei server \u00e8 dedicata alla <noindex><a rel=\"nofollow\" href=\"https:\/\/about.gitlab.com\/handbook\/engineering\/#canary-testing\">fase canary (canary)<\/a><\/noindex>. Il parco canary gestisce i nostri progetti interni e pu\u00f2 <noindex><a rel=\"nofollow\" href=\"https:\/\/next.gitlab.com\/\">essere attivato dagli utenti<\/a><\/noindex>. Ma \u00e8 principalmente destinato a testare le modifiche apportate all'infrastruttura e all'applicazione. Il primo servizio migrato ha iniziato ricevendo un volume limitato di traffico interno, e continuiamo a utilizzare questo metodo per assicurarci che vengano rispettati gli SLO prima di indirizzare tutto il traffico al cluster.<\/p>\n<p>In caso di migrazione, ci\u00f2 significa che inizialmente le richieste ai progetti interni vengono inviate a Kubernetes, e poi gradualmente reindirizziamo al cluster il resto del traffico modificando il peso per il backend tramite HAProxy. Durante il passaggio da VM a Kubernetes, \u00e8 diventato chiaro che \u00e8 molto vantaggioso avere un modo semplice per reindirizzare il traffico tra la vecchia e la nuova infrastruttura e, di conseguenza, mantenere la vecchia infrastruttura pronta per un eventuale rollback nei primi giorni dopo la migrazione.<\/p>\n<h3>5. Capacit\u00e0 di riserva dei pod e il loro utilizzo<\/h3>\n<p>\nQuasi subito \u00e8 stata evidenziata la seguente problematica: i pod per il servizio Registry si avviavano rapidamente, tuttavia l'avvio dei pod per Sidekiq richiedeva fino a <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-org\/charts\/gitlab\/-\/issues\/1775\">due minuti<\/a><\/noindex>. Il lungo avvio dei pod per Sidekiq \u00e8 diventato un problema quando abbiamo iniziato a migrare in Kubernetes i carichi di lavoro per i worker, che necessitano di elaborare rapidamente i job e scalare velocemente.<\/p>\n<p>In questo caso, la lezione era che, sebbene l'Horizontal Pod Autoscaler (HPA) in Kubernetes gestisca bene l'aumento del traffico, \u00e8 importante considerare le caratteristiche dei carichi di lavoro e riservare capacit\u00e0 extra ai pod (soprattutto in condizioni di domanda irregolare). Nel nostro caso, abbiamo osservato un'improvvisa impennata di job, che ha portato a una rapida scalabilit\u00e0, saturando le risorse CPU prima che potessimo ampliare il pool di nodi.<\/p>\n<p>C'\u00e8 sempre la tentazione di \"spremere\" il cluster il pi\u00f9 possibile, tuttavia, dopo aver affrontato inizialmente problemi di prestazioni, ora partiamo con un budget di pod generoso e lo riduciamo successivamente, monitorando attentamente gli SLO. Il lancio dei pod per il servizio Sidekiq \u00e8 notevolmente accelerato e ora dura mediamente circa 40 secondi. <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-org\/charts\/gitlab\/-\/issues\/1775\">Dalla riduzione del tempo di avvio dei pod<\/a><\/noindex> ha beneficiato sia GitLab.com che i nostri utenti delle installazioni self-managed che utilizzano l'official Helm chart di GitLab.<\/p>\n<h2>Conclusione<\/h2>\n<p>\nDopo il trasferimento di ciascun servizio, abbiamo goduto dei vantaggi dell'uso di Kubernetes in produzione: distribuzione dell'applicazione pi\u00f9 rapida e sicura, scalabilit\u00e0 e una distribuzione delle risorse pi\u00f9 efficace. Inoltre, i benefici della migrazione vanno oltre il servizio GitLab.com. Ogni miglioramento dell'official Helm chart giova anche ai suoi utenti.<\/p>\n<p>Spero che vi sia piaciuta la storia delle nostre avventure con la migrazione in Kubernetes. Continuiamo a trasferire nuovi servizi nel cluster. Maggiori informazioni possono essere trovate nei seguenti articoli:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/about.gitlab.com\/handbook\/engineering\/infrastructure\/production\/kubernetes\/gitlab-com\/\">Perch\u00e9 stiamo migrando a 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 su Kubernetes<\/a><\/noindex>\u00bb;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/groups\/gitlab-com\/gl-infra\/-\/epics\/112\">Epic sulla migrazione di GitLab.com a Kubernetes<\/a><\/noindex>.<\/li>\n<\/ul>\n<p><\/p>\n<h2>P.S. dal traduttore<\/h2>\n<p>\nLeggi anche nel nostro blog:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/519962\/\">3 anni con Kubernetes in produzione: ecco cosa abbiamo capito<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/504396\/\">10 errori comuni nell'uso di Kubernetes<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/335814\/\">Storie di successo di Kubernetes in produzione. Parte 3: GitHub<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/440278\/\">La transizione di Tinder a Kubernetes<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>Fonte: <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\/it\/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=\"it_IT\" \/>\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\/it\/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\udd47Le nostre conclusioni dopo un anno di migrazione di GitLab.com su Kubernetes | ProHoster","description":"Nota del traduttore: l'adattamento di Kubernetes in GitLab \u00e8 considerato uno dei due principali fattori che contribuiscono alla crescita dell'azienda.","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/nashi-vyvody-za-god-migraczii-gitlab-com-na-kubernetes","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","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\/it\/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\/it\/wp-json\/wp\/v2\/posts\/94977","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=94977"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/94977\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/94978"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=94977"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=94977"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=94977"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}