{"id":35594,"date":"2019-10-31T22:05:15","date_gmt":"2019-10-31T19:05:15","guid":{"rendered":"https:\/\/prohoster.info\/blog\/gitops-sravnenie-metodov-pull-i-push\/"},"modified":"2019-10-31T22:05:15","modified_gmt":"2019-10-31T19:05:15","slug":"gitops-sravnenie-metodov-pull-i-push","status":"publish","type":"post","link":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/gitops-sravnenie-metodov-pull-i-push","title":{"rendered":"GitOps: confronto tra i metodi Pull e Push","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><i><b>Nota di traduzione.<\/b>: Nella comunit\u00e0 Kubernetes sta guadagnando sempre pi\u00f9 popolarit\u00e0 una tendenza chiamata GitOps, di cui abbiamo avuto personalmente conferma, <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/454184\/\">visitando<\/a><\/noindex> KubeCon Europe 2019. Questo termine \u00e8 stato coniato relativamente di recente <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/gitops-operations-by-pull-request\">dal capo dell'azienda Weaveworks \u2014 Alexis Richardson \u2014 e si riferisce all'utilizzo di strumenti familiari agli sviluppatori (soprattutto Git, da cui il nome) per risolvere le sfide operative. In particolare, si tratta dell'operativit\u00e0 di Kubernetes tramite l'archiviazione delle sue configurazioni in Git e il rilascio automatico delle modifiche nel cluster. Di due approcci a questo rilascio parla Matthias Jg in questo articolo.<\/a><\/noindex> Lo scorso anno<\/i><\/p>\n<p><img decoding=\"async\" alt=\"GitOps: confronto tra i metodi Pull e Push\" src=\"\/wp-content\/uploads\/2862627cedb4347679d0c14876a24869.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n(in realt\u00e0, formalmente \u00e8 avvenuto ad agosto 2017 \u2014 nota del traduttore) <i>\u00e8 emerso un nuovo approccio per il deployment delle applicazioni in Kubernetes. Si chiama GitOps e si basa sul concetto fondamentale che il monitoraggio delle versioni dei deployment avviene in un ambiente Git sicuro.<\/i> I principali vantaggi di questo approccio sono i seguenti<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p><b>Versionamento dei deployment e cronologia delle modifiche<\/b>:<\/p>\n<ol>\n<li> <b>. Lo stato dell'intero cluster \u00e8 archiviato in un repository Git, e i deployment vengono aggiornati solo tramite commit. Inoltre, tutte le modifiche possono essere monitorate grazie alla cronologia dei commit.<\/b>Rollback utilizzando i comandi Git familiari<\/li>\n<li> <b>. \u00c8 semplice<\/b>restituire modifiche ai deployment; passati stati sono sempre disponibili. <code>git reset<\/code> Controllo degli accessi gi\u00e0 pronto<\/li>\n<li> <b>. Di solito, un sistema Git contiene molti dati riservati, quindi la maggior parte delle aziende presta particolare attenzione alla sua protezione. Di conseguenza, questa protezione si applica anche alle operazioni sui deployment.<\/b>Politiche per i deployment<\/li>\n<li> <b>. La maggior parte dei sistemi Git supporta politiche per diversi branch \u2014 ad esempio, solo le pull request possono aggiornare il master, e le modifiche devono essere verificate e approvate da un altro membro del team. Come per il controllo degli accessi, le stesse politiche si applicano agli aggiornamenti dei deployment.<\/b>Come potete vedere, il metodo GitOps ha numerosi vantaggi. Nell'ultimo anno, due approcci hanno guadagnato particolare popolarit\u00e0. Uno \u00e8 basato sul push, l'altro sul pull. Prima di esaminarli, diamo un'occhiata a come appaiono i tradizionali deployment di Kubernetes.<\/li>\n<\/ol>\n<p>\nMetodi di deployment<\/p>\n<h2>Negli ultimi anni, in Kubernetes si sono consolidati diversi metodi e strumenti per i deployment:<\/h2>\n<p>\nBasati su modelli nativi Kubernetes\/Kustomize<\/p>\n<ol>\n<li> <b>Basato su modelli nativi di Kubernetes\/Kustomize<\/b>. Questo \u00e8 il modo pi\u00f9 semplice per distribuire applicazioni su Kubernetes. Lo sviluppatore crea file YAML di base e li applica. Per evitare di scrivere costantemente gli stessi modelli, \u00e8 stato sviluppato Kustomize (che trasforma i modelli Kubernetes in moduli). <i><b>Nota di traduzione.<\/b>: Kustomize \u00e8 stato integrato in kubectl con <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/445196\/\">il rilascio di Kubernetes 1.14<\/a><\/noindex>.<\/i><\/li>\n<li> <b>Chart di Helm<\/b>. I Chart di Helm permettono di creare set di modelli, init-container, sidecar e cos\u00ec via, che vengono applicati per distribuire applicazioni con possibilit\u00e0 di configurazione pi\u00f9 flessibili rispetto all'approccio basato su modelli. Alla base di questo metodo ci sono file YAML templated. Helm li riempie di vari parametri e poi li invia a Tiller \u2014 il componente cluster che li distribuisce nel cluster e consente di eseguire aggiornamenti e rollback. \u00c8 importante notare che sostanzialmente Helm inserisce solo i valori necessari nei modelli e poi li applica proprio come si fa nell'approccio tradizionale <i>(per maggiori dettagli su come funziona tutto ci\u00f2 e come si pu\u00f2 utilizzare, leggi il nostro <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/423239\/\">articolo su Helm<\/a><\/noindex> \u2014 nota del traduttore.)<\/i>. Esiste una grande variet\u00e0 di Chart di Helm pronti, che coprono un ampio spettro di compiti.<\/li>\n<li> <b>Strumenti alternativi<\/b>. Ci sono molti strumenti alternativi. Tutti loro hanno in comune il fatto che trasformano certi file-modello in chiari file YAML di Kubernetes e poi li applicano.<\/li>\n<\/ol>\n<p>\nNel nostro lavoro utilizziamo costantemente i Chart di Helm per strumenti importanti (poich\u00e9 molte cose sono gi\u00e0 pronte, il che semplifica notevolmente la vita) e file YAML 'puliti' di Kubernetes per distribuire le nostre applicazioni.<\/p>\n<h2>Pull &amp; Push<\/h2>\n<p>\nIn uno dei miei recenti post sul blog, ho presentato uno strumento <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/weaveworks\/flux\">Weave Flux<\/a><\/noindex>, che consente di impegnare i modelli in un repository Git e aggiornare il deployment dopo ogni commit o push del container. La mia esperienza dimostra che questo strumento \u00e8 uno dei principali nel promuovere l'approccio pull, quindi far\u00f2 spesso riferimento ad esso. Se vuoi saperne di pi\u00f9 su come usarlo, ecco <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/@m.k.joerg\/gitops-weave-flux-in-detail-77ce36945646\">il link all'articolo<\/a><\/noindex>.<\/p>\n<p><i><b>NB!<\/b> Tutti i vantaggi dell'utilizzo di GitOps rimangono per entrambi gli approcci.<\/i><\/p>\n<h2>Approccio basato su Pull<\/h2>\n<p>\n<img decoding=\"async\" alt=\"GitOps: confronto tra i metodi Pull e Push\" src=\"\/wp-content\/uploads\/4ed8e6de36bc37d0e747ff99027f8399.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAlla base dell'approccio pull c'\u00e8 il fatto che tutte le modifiche vengono applicate dall'interno del cluster. All'interno del cluster c'\u00e8 un operatore che controlla regolarmente i repository Git e il Docker Registry associati. Se ci sono delle modifiche, lo stato del cluster viene aggiornato dall'interno. Si considera generalmente che questo processo sia piuttosto sicuro, poich\u00e9 nessun cliente esterno ha accesso ai diritti di amministratore del cluster.<\/p>\n<p><b>Pro:<\/b><\/p>\n<ol>\n<li> Nessun cliente esterno ha il diritto di apportare modifiche al cluster, tutti gli aggiornamenti vengono applicati dall'interno.<\/li>\n<li> Alcuni strumenti consentono anche di sincronizzare gli aggiornamenti dei chart di Helm e di collegarli al cluster.<\/li>\n<li> Il Docker Registry pu\u00f2 essere scansionato per nuove versioni. Se viene rilasciata una nuova immagine, il repository Git e il deployment vengono aggiornati alla nuova versione.<\/li>\n<li> Gli strumenti pull possono essere distribuiti in diversi spazi dei nomi con repository Git e diritti di accesso diversi. Questo consente di applicare un modello multi-tenant. Ad esempio, il team A pu\u00f2 utilizzare lo spazio dei nomi A, il team B lo spazio dei nomi B, mentre il team responsabile dell'infrastruttura pu\u00f2 utilizzare lo spazio globale.<\/li>\n<li> In generale, gli strumenti sono piuttosto leggeri.<\/li>\n<li> In combinazione con strumenti come l'operatore <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/bitnami-labs\/sealed-secrets\">Bitnami Sealed Secrets<\/a><\/noindex>, i segreti possono essere archiviati in forma crittografata nel repository Git e estratti all'interno del cluster.<\/li>\n<li> Non esiste un collegamento con i pipeline CD, poich\u00e9 i deployment avvengono all'interno del cluster.<\/li>\n<\/ol>\n<p>\n<b>Contro<\/b>:<\/p>\n<ol>\n<li> Gestire i segreti dei deployment dai chart di Helm \u00e8 pi\u00f9 complesso rispetto a quelli normali, poich\u00e9 devono prima essere generati come, ad esempio, sealed secrets, quindi decrittografati dall'operatore interno e solo dopo diventano accessibili per lo strumento pull. Successivamente, \u00e8 possibile eseguire il rilascio in Helm con i valori gi\u00e0 presenti nei segreti distribuiti. Il modo pi\u00f9 semplice \u00e8 creare un segreto con tutti i valori di Helm utilizzati per il deployment, decrittografarlo e committarlo in Git.<\/li>\n<li> Applicando un approccio pull, sei legato a strumenti che operano tramite pull. Questo limita la possibilit\u00e0 di personalizzare il processo di distribuzione degli deployment nel cluster. Ad esempio, lavorare con Kustomize \u00e8 complicato perch\u00e9 deve essere eseguito prima che i modelli finali vengano inviati in Git. Non dico che non si possano usare strumenti separati, ma \u00e8 pi\u00f9 difficile integrarli nel processo di distribuzione.<\/li>\n<\/ol>\n<p><\/p>\n<h2>Approccio basato su Push<\/h2>\n<p>\n<img decoding=\"async\" alt=\"GitOps: confronto tra i metodi Pull e Push\" src=\"\/wp-content\/uploads\/533fc0bd107c3338d323e908ae9e75ab.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNell'approccio push, un sistema esterno (principalmente pipeline CD) avvia le distribuzioni nel cluster dopo un commit nel repository Git o in caso di esecuzione riuscita di una pipeline CI precedente. In questo approccio, il sistema ha accesso al cluster.<\/p>\n<p><b>Pro<\/b>:<\/p>\n<ol>\n<li> La sicurezza \u00e8 definita dal repository Git e dalla pipeline di build.<\/li>\n<li> Distribuire i chart Helm \u00e8 pi\u00f9 semplice, poich\u00e9 c'\u00e8 supporto per i plugin Helm.<\/li>\n<li> Gestire i segreti \u00e8 pi\u00f9 facile, poich\u00e9 i segreti possono essere utilizzati nelle pipeline e anche memorizzati in Git in forma crittografata (a seconda delle preferenze dell'utente).<\/li>\n<li> Assenza di legame con strumenti specifici, poich\u00e9 possono essere utilizzati tutti i loro tipi.<\/li>\n<li> Gli aggiornamenti delle versioni dei container possono essere avviati dalla pipeline di build.<\/li>\n<\/ol>\n<p>\n<b>Contro<\/b>:<\/p>\n<ol>\n<li> I dati per accedere al cluster si trovano all'interno del sistema di build.<\/li>\n<li> L'aggiornamento dei container degli deployment \u00e8 comunque pi\u00f9 facile con un processo pull.<\/li>\n<li> Forti dipendenze dal sistema CD, poich\u00e9 le pipeline necessarie potrebbero essere state originariamente scritte per i Gitlab Runners, e poi il team decide di passare ad Azure DevOps o Jenkins\u2026 e sar\u00e0 necessario migrare un gran numero di pipeline di build.<\/li>\n<\/ol>\n<p><\/p>\n<h2>Conclusioni: Push o Pull?<\/h2>\n<p>\nCome spesso accade, ogni approccio ha i suoi pro e contro. Alcuni compiti sono pi\u00f9 facili da eseguire con un metodo e pi\u00f9 difficili con un altro. All'inizio eseguivo i deployment manualmente, ma dopo aver scoperto alcuni articoli su Weave Flux, ho deciso di implementare processi GitOps per tutti i progetti. Per i modelli di base \u00e8 stato facile, ma poi ho iniziato a riscontrare difficolt\u00e0 nel lavoro con i chart di Helm. A quel tempo, Weave Flux offriva solo una versione embrionale dell'Operator per Helm Chart, ma anche adesso alcune operazioni sono pi\u00f9 complesse a causa della necessit\u00e0 di creare manualmente i segreti e applicarli. Si pu\u00f2 dire che l'approccio pull \u00e8 molto pi\u00f9 sicuro, poich\u00e9 le credenziali del cluster non sono accessibili al di fuori di esso, il che aumenta cos\u00ec tanto la sicurezza da giustificare lo sforzo aggiuntivo.<\/p>\n<p>Riflettendo un po', sono giunto a una conclusione inaspettata: non \u00e8 cos\u00ec. Se parliamo di componenti che richiedono la massima protezione, un tale elenco includerebbe i repository di segreti e i sistemi CI\/CD, i repository Git. Le informazioni all'interno di essi sono piuttosto vulnerabili e necessitano di protezione massima. Inoltre, se qualcuno riesce a penetrare nel tuo repository Git e pu\u00f2 pushare del codice, pu\u00f2 implementare qualsiasi cosa desideri (indipendentemente dall'approccio scelto, sia esso pull o push) e infiltrarsi nei sistemi del cluster. Pertanto, i componenti pi\u00f9 critici che necessitano di protezione sono il repository Git e i sistemi CI\/CD, non le credenziali del cluster. Se hai politiche e misure di sicurezza ben configurate per sistemi di questo tipo, e le credenziali del cluster vengono estratte nei pipeline solo come segreti, la protezione aggiuntiva dell'approccio pull potrebbe rivelarsi meno preziosa di quanto inizialmente previsto.<\/p>\n<p>Quindi, se l'approccio pull \u00e8 pi\u00f9 laborioso e non offre guadagni in termini di sicurezza, non sarebbe logico utilizzare solo l'approccio push? Ma qualcuno potrebbe obiettare che con l'approccio push sei troppo legato al sistema CD e, forse, sarebbe meglio evitarlo, in modo che in futuro sia pi\u00f9 semplice effettuare migrazioni.<\/p>\n<p>A mio avviso (come sempre), \u00e8 opportuno utilizzare ci\u00f2 che si adatta meglio al caso specifico o combinare le opzioni. Personalmente, utilizzo entrambi gli approcci: Weave Flux per i deployment basati su pull, che includono principalmente i nostri servizi, e l'approccio push con Helm e plugin, che semplifica l'applicazione dei chart Helm al cluster e consente di creare facilmente segreti. Penso che non ci sar\u00e0 mai una soluzione unica adatta a tutte le situazioni, perch\u00e9 ci sono sempre molti dettagli da considerare e dipendono dal caso d'uso specifico. A questo proposito, consiglio vivamente GitOps: facilita notevolmente le operazioni e aumenta la sicurezza.<\/p>\n<p>Spero che la mia esperienza su questo tema possa aiutarti a decidere quale metodo si adatta meglio al tuo tipo di deployment, e sarei felice di conoscere la tua opinione.<\/p>\n<h2>P.S. Nota del traduttore<\/h2>\n<p>\nTra i contro del modello pull c'\u00e8 il fatto che \u00e8 difficile caricare in Git i manifesti renderizzati, tuttavia non c'\u00e8 lo svantaggio che il pipeline CD nel modello pull vive separatamente dal rilascio e praticamente diventa un pipeline di categoria <i>Continuous Apply<\/i>. Pertanto, sar\u00e0 necessario un ulteriore sforzo per raccogliere lo stato di tutti i deployment e fornire accesso ai log\/stato, preferibilmente con un legame al sistema CD.<\/p>\n<p>In questo senso, il modello push consente di fornire alcune garanzie sul rilascio, poich\u00e9 la vita del pipeline pu\u00f2 essere allineata con la vita del rilascio.<\/p>\n<p>Abbiamo testato entrambi i modelli e siamo giunti alle stesse conclusioni dell'autore dell'articolo:<\/p>\n<ol>\n<li> Il modello pull \u00e8 adatto per l'aggiornamento dei componenti di sistema su un gran numero di cluster (vedi <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/455543\/\">l'articolo sul addon-operator<\/a><\/noindex>).<\/li>\n<li> Il modello push basato su GitLab CI \u00e8 ben adatto per il rilascio delle applicazioni utilizzando i chart Helm. Inoltre, il rilascio dei deployment all'interno dei pipeline viene monitorato tramite uno strumento <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/werf\">werf<\/a><\/noindex>. A proposito, nel contesto di questo nostro progetto abbiamo sentito continuamente \"GitOps\" quando discutevamo i problemi urgenti degli ingegneri DevOps al nostro stand di KubeCon Europe '19.<\/li>\n<\/ol>\n<p><\/p>\n<h2>P.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\/441964\/\">Consigli e trucchi per Kubernetes: traduzione delle risorse operative nel cluster sotto Helm 2<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/434160\/\">Presentiamo la libreria kubedog per il monitoraggio delle risorse Kubernetes<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/449096\/\">Espandiamo e completiamo Kubernetes (panoramica e video della presentazione)<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/436910\/\">Consigli per creare flussi di lavoro personalizzati in GitLab CI<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p class=\"for_users_only_msg\">Solo gli utenti registrati possono partecipare al sondaggio. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Accedi<\/a><\/noindex>, per favore.<\/p>\n<h2 class=\"default-block__polling-title\">Utilizzi GitOps?<\/h2>\n<ul class=\"content-list content-list_polling\">\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    S\u00ec, approccio pull<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    S\u00ec, push<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    S\u00ec, pull + push<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    S\u00ec, qualcosa di diverso<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    No<\/p>\n<\/li>\n<\/ul>\n<p>    Hanno votato 30 utenti. 10 utenti si sono astenuti.<br \/>\n<br \/>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/456754\/\">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.: \u0412 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0435 Kubernetes \u044f\u0432\u043d\u0443\u044e \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0431\u0438\u0440\u0430\u0435\u0442 \u0442\u0440\u0435\u043d\u0434 \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c GitOps, \u0432 \u0447\u0451\u043c \u043c\u044b \u043b\u0438\u0447\u043d\u043e \u0443\u0431\u0435\u0434\u0438\u043b\u0438\u0441\u044c, \u043f\u043e\u0441\u0435\u0442\u0438\u0432 KubeCon Europe 2019. \u042d\u0442\u043e\u0442 \u0442\u0435\u0440\u043c\u0438\u043d \u0431\u044b\u043b \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435\u0434\u0430\u0432\u043d\u043e \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043d \u0433\u043b\u0430\u0432\u043e\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Weaveworks \u2014 Alexis Richardson \u2014 \u0438 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u0445 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 (\u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u2014 Git, \u043e\u0442\u043a\u0443\u0434\u0430 \u0438 \u0441\u0430\u043c\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435) \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0447 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438. \u0412 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-35594","post","type-post","status-publish","format-standard","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.\" \/>\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\/gitops-sravnenie-metodov-pull-i-push\" \/>\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\udd47GitOps: \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 Pull \u0438 Push | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u043c.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/gitops-sravnenie-metodov-pull-i-push\" \/>\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=\"2019-10-31T19:05:15+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:05:15+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\udd47GitOps: confronto tra i metodi Pull e Push | ProHoster","description":"Nota.","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/gitops-sravnenie-metodov-pull-i-push","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\udd47GitOps: \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 Pull \u0438 Push | ProHoster","og:description":"\u041f\u0440\u0438\u043c.","og:url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/gitops-sravnenie-metodov-pull-i-push","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":"2019-10-31T19:05:15+00:00","article:modified_time":"2019-10-31T19:05:15+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"35594","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":"2026-01-21 23:54:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 19:05:10","updated":"2026-01-21 23:54:19","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\/35594","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=35594"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/35594\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=35594"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=35594"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=35594"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}