{"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\/pt\/blog\/administrirovanie\/gitops-sravnenie-metodov-pull-i-push","title":{"rendered":"GitOps: compara\u00e7\u00e3o entre m\u00e9todos Pull e Push","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><i><b>Nota do tradutor.<\/b>: Na comunidade Kubernetes, a tend\u00eancia chamada GitOps est\u00e1 ganhando popularidade, do que pessoalmente temos certeza, <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/454184\/\">visitando<\/a><\/noindex> o KubeCon Europe 2019. Este termo foi criado relativamente recentemente, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/gitops-operations-by-pull-request\">pelo chefe da Weaveworks \u2014 Alexis Richardson \u2014 e refere-se ao uso de ferramentas familiares para desenvolvedores (principalmente o Git, de onde vem o nome) para resolver problemas de opera\u00e7\u00e3o. Em particular, fala-se da opera\u00e7\u00e3o do Kubernetes atrav\u00e9s do armazenamento de suas configura\u00e7\u00f5es no Git e da implanta\u00e7\u00e3o autom\u00e1tica de altera\u00e7\u00f5es no cluster. Matthias Jg discute esses dois m\u00e9todos de implanta\u00e7\u00e3o neste artigo.<\/a><\/noindex> No ano passado<\/i><\/p>\n<p><img decoding=\"async\" alt=\"GitOps: compara\u00e7\u00e3o entre m\u00e9todos Pull e Push\" src=\"\/wp-content\/uploads\/2862627cedb4347679d0c14876a24869.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n(na verdade, oficialmente isso ocorreu em agosto de 2017 \u2014 nota do tradutor) <i>apareceu uma nova abordagem para a implanta\u00e7\u00e3o de aplica\u00e7\u00f5es no Kubernetes. Ela \u00e9 chamada GitOps, e sua base \u00e9 a ideia de que o rastreamento de vers\u00f5es de implanta\u00e7\u00f5es \u00e9 feito em um ambiente seguro de reposit\u00f3rio Git.<\/i> surgiu uma nova abordagem para a implanta\u00e7\u00e3o de aplicativos no Kubernetes. Chama-se GitOps, e sua base \u00e9 a ideia b\u00e1sica de que o rastreamento de vers\u00f5es das implanta\u00e7\u00f5es \u00e9 feito em um reposit\u00f3rio Git seguro.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p><b>Versionamento de implanta\u00e7\u00f5es e hist\u00f3rico de altera\u00e7\u00f5es<\/b>:<\/p>\n<ol>\n<li> <b>Versionamento de implanta\u00e7\u00f5es e hist\u00f3rico de altera\u00e7\u00f5es<\/b>. O estado de todo o cluster \u00e9 armazenado em um reposit\u00f3rio Git, e as implanta\u00e7\u00f5es s\u00e3o atualizadas apenas por meio de commits. Al\u00e9m disso, todas as altera\u00e7\u00f5es podem ser rastreadas atrav\u00e9s do hist\u00f3rico de commits.<\/li>\n<li> <b>. Simples<\/b>permite desfazer altera\u00e7\u00f5es nas implanta\u00e7\u00f5es; estados anteriores est\u00e3o sempre dispon\u00edveis. <code>git reset<\/code> permite reverter altera\u00e7\u00f5es nas implanta\u00e7\u00f5es; sempre s\u00e3o acess\u00edveis estados anteriores.<\/li>\n<li> <b>. Normalmente, um sistema Git cont\u00e9m muitos dados confidenciais, portanto, a maioria das empresas d\u00e1 grande import\u00e2ncia \u00e0 sua prote\u00e7\u00e3o. Consequentemente, essa prote\u00e7\u00e3o se estende tamb\u00e9m \u00e0s opera\u00e7\u00f5es com implanta\u00e7\u00f5es.<\/b>. Normalmente, sistemas Git cont\u00eam muitos dados confidenciais, por isso a maioria das empresas d\u00e1 aten\u00e7\u00e3o especial \u00e0 sua prote\u00e7\u00e3o. Consequentemente, essa prote\u00e7\u00e3o se estende tamb\u00e9m \u00e0s opera\u00e7\u00f5es com implanta\u00e7\u00f5es.<\/li>\n<li> <b>. A maioria dos sistemas Git originalmente suporta pol\u00edticas para diferentes ramifica\u00e7\u00f5es \u2014 por exemplo, apenas pull requests podem atualizar o master, e as altera\u00e7\u00f5es devem ser revisadas e aprovadas por outro membro da equipe. Assim como no controle de acesso, as mesmas pol\u00edticas se aplicam \u00e0s atualiza\u00e7\u00f5es das implanta\u00e7\u00f5es.<\/b>. A maioria dos sistemas Git inicialmente suporta pol\u00edticas para diferentes ramifica\u00e7\u00f5es \u2014 por exemplo, apenas pull requests podem atualizar a master, e as altera\u00e7\u00f5es devem ser revisadas e aprovadas por outro membro da equipe. Assim como no controle de acesso, essas mesmas pol\u00edticas se aplicam \u00e0s atualiza\u00e7\u00f5es das implanta\u00e7\u00f5es.<\/li>\n<\/ol>\n<p>\nComo voc\u00ea pode ver, o m\u00e9todo GitOps possui v\u00e1rias vantagens. No \u00faltimo ano, dois enfoques ganharam popularidade. Um \u00e9 baseado em push, o outro em pull. Antes de analis\u00e1-los, vamos primeiro olhar como s\u00e3o as implanta\u00e7\u00f5es t\u00edpicas do Kubernetes.<\/p>\n<h2>Nos \u00faltimos anos, surgiram v\u00e1rias maneiras e ferramentas para implanta\u00e7\u00f5es no Kubernetes:<\/h2>\n<p>\nBaseadas em templates nativos do Kubernetes\/Kustomize<\/p>\n<ol>\n<li> <b>Baseado em modelos nativos do Kubernetes\/Kustomize<\/b>Este \u00e9 o m\u00e9todo mais simples de implantar aplicativos no Kubernetes. O desenvolvedor cria arquivos YAML b\u00e1sicos e os aplica. Para evitar a reescrita constante dos mesmos modelos, foi desenvolvido o Kustomize (que transforma os modelos do Kubernetes em m\u00f3dulos). <i><b>Nota do tradutor.<\/b>: O Kustomize foi integrado ao kubectl com <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/445196\/\">o lan\u00e7amento do Kubernetes 1.14<\/a><\/noindex>.<\/i><\/li>\n<li> <b>Charts do Helm<\/b>. Os charts Helm permitem criar conjuntos de modelos, init-containers, sidecars etc., que s\u00e3o aplicados para implantar aplicativos com mais flexibilidade na configura\u00e7\u00e3o do que na abordagem baseada em modelos. Este m\u00e9todo baseia-se em arquivos YAML modelados. O Helm preenche esses arquivos com diferentes par\u00e2metros e, em seguida, os envia para o Tiller \u2014 um componente do cluster que os implanta no cluster e permite realizar atualiza\u00e7\u00f5es e rollbacks. O importante \u00e9 que, essencialmente, o Helm simplesmente insere os valores necess\u00e1rios nos modelos e os aplica da mesma forma que na abordagem tradicional. <i>(para saber mais sobre como tudo isso funciona e como us\u00e1-lo, leia o nosso <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/423239\/\">artigo sobre Helm<\/a><\/noindex> \u2014 nota do tradutor.)<\/i>. Existe uma grande variedade de charts do Helm prontos, cobrindo uma ampla gama de tarefas.<\/li>\n<li> <b>Ferramentas alternativas<\/b>. Existem muitas ferramentas alternativas. Todas elas t\u00eam em comum o fato de transformar certos arquivos-modelo em arquivos YAML compreens\u00edveis para o Kubernetes e, em seguida, aplic\u00e1-los.<\/li>\n<\/ol>\n<p>\nEm nosso trabalho, usamos constantemente charts do Helm para ferramentas importantes (j\u00e1 que muitos deles est\u00e3o prontos, o que facilita muito a vida) e arquivos YAML \"limpos\" do Kubernetes para implantar nossos pr\u00f3prios aplicativos.<\/p>\n<h2>Pull &amp; Push<\/h2>\n<p>\nEm uma de suas publica\u00e7\u00f5es recentes no blog, apresentei a ferramenta <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/weaveworks\/flux\">Weave Flux<\/a><\/noindex>, permitindo comitar modelos no reposit\u00f3rio Git e atualizar a implanta\u00e7\u00f5es ap\u00f3s cada commit ou push do cont\u00eainer. Minha experi\u00eancia mostra que essa ferramenta \u00e9 uma das principais no impulso da abordagem pull, ent\u00e3o vou me referir a ela com frequ\u00eancia. Se voc\u00ea quiser saber mais sobre como us\u00e1-la, aqui est\u00e1 <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/@m.k.joerg\/gitops-weave-flux-in-detail-77ce36945646\">o link para o artigo<\/a><\/noindex>.<\/p>\n<p><i><b>NB!<\/b> Todas as vantagens do uso do GitOps s\u00e3o mantidas para ambas as abordagens.<\/i><\/p>\n<h2>Abordagem baseada em Pull<\/h2>\n<p>\n<img decoding=\"async\" alt=\"GitOps: compara\u00e7\u00e3o entre m\u00e9todos Pull e Push\" src=\"\/wp-content\/uploads\/4ed8e6de36bc37d0e747ff99027f8399.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA abordagem pull baseia-se no fato de que todas as altera\u00e7\u00f5es s\u00e3o aplicadas de dentro do cluster. Dentro do cluster, h\u00e1 um operador que verifica regularmente os reposit\u00f3rios relacionados do Git e do Docker Registry. Se houver alguma altera\u00e7\u00e3o, o estado do cluster \u00e9 atualizado internamente. Geralmente, acredita-se que esse processo \u00e9 bastante seguro, pois nenhum cliente externo tem acesso aos direitos de administrador do cluster.<\/p>\n<p><b>Acesso direto aos sistemas de cabos transpac\u00edficos. Ping m\u00ednimo para a China, Jap\u00e3o, Austr\u00e1lia e costa oeste dos EUA.<\/b><\/p>\n<ol>\n<li> Nenhum cliente externo tem direitos para fazer altera\u00e7\u00f5es no cluster, todas as atualiza\u00e7\u00f5es s\u00e3o aplicadas de dentro.<\/li>\n<li> Algumas ferramentas tamb\u00e9m permitem sincronizar atualiza\u00e7\u00f5es de Helm charts e vincul\u00e1-las ao cluster.<\/li>\n<li> O Docker Registry pode ser escaneado em busca de novas vers\u00f5es. Se uma nova imagem aparecer, o reposit\u00f3rio Git e a implementa\u00e7\u00e3o s\u00e3o atualizados para a nova vers\u00e3o.<\/li>\n<li> As ferramentas pull podem ser distribu\u00eddas em diferentes namespaces com diferentes reposit\u00f3rios Git e direitos de acesso. Isso permite a aplica\u00e7\u00e3o de um modelo multitenant. Por exemplo, a equipe A pode usar o namespace A, a equipe B o namespace B, e a equipe de infraestrutura pode usar o namespace global.<\/li>\n<li> Geralmente, as ferramentas s\u00e3o bastante leves.<\/li>\n<li> Em combina\u00e7\u00e3o com ferramentas como o operador <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/bitnami-labs\/sealed-secrets\">Bitnami Sealed Secrets<\/a><\/noindex>, segredos podem ser armazenados de forma criptografada no reposit\u00f3rio Git e extra\u00eddos dentro do cluster.<\/li>\n<li> N\u00e3o h\u00e1 conex\u00e3o com pipelines de CD, uma vez que as implementa\u00e7\u00f5es ocorrem dentro do cluster.<\/li>\n<\/ol>\n<p>\n<b>Desvantagens<\/b>:<\/p>\n<ol>\n<li> Gerenciar segredos de implanta\u00e7\u00f5es a partir de gr\u00e1ficos Helm \u00e9 mais complicado do que fazer isso com os comuns, pois primeiro \u00e9 necess\u00e1rio ger\u00e1-los como, digamos, segredos selados, depois descriptograf\u00e1-los com um operador interno e s\u00f3 ent\u00e3o eles ficam dispon\u00edveis para a ferramenta de pull. Depois disso, \u00e9 poss\u00edvel iniciar um lan\u00e7amento no Helm com os valores j\u00e1 contidos nos segredos implantados. A maneira mais simples \u00e9 criar um segredo com todos os valores do Helm usados para a implanta\u00e7\u00e3o, descriptograf\u00e1-lo e comit\u00e1-lo no Git.<\/li>\n<li> Ao aplicar a abordagem de pull, voc\u00ea se v\u00ea atado a ferramentas que operam com pulls. Isso limita a possibilidade de personalizar o processo de implanta\u00e7\u00e3o no cluster. Por exemplo, trabalhar com Kustomize torna-se mais complicado, pois ele deve ser executado antes que os modelos finais sejam enviados ao Git. N\u00e3o estou dizendo que n\u00e3o se pode usar ferramentas separadas, mas \u00e9 mais dif\u00edcil integr\u00e1-las no processo de implanta\u00e7\u00e3o.<\/li>\n<\/ol>\n<p><\/p>\n<h2>Abordagem baseada em Push<\/h2>\n<p>\n<img decoding=\"async\" alt=\"GitOps: compara\u00e7\u00e3o entre m\u00e9todos Pull e Push\" src=\"\/wp-content\/uploads\/533fc0bd107c3338d323e908ae9e75ab.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNa abordagem push, um sistema externo (principalmente pipelines de CD) dispara implanta\u00e7\u00f5es no cluster ap\u00f3s um commit no reposit\u00f3rio Git ou em caso de sucesso da execu\u00e7\u00e3o anterior do pipeline de CI. Nessa abordagem, o sistema tem acesso ao cluster.<\/p>\n<p><b>Pr\u00f3s<\/b>:<\/p>\n<ol>\n<li> A seguran\u00e7a \u00e9 determinada pelo reposit\u00f3rio Git e pelo pipeline de constru\u00e7\u00e3o.<\/li>\n<li> Implantar charts do Helm \u00e9 mais simples, j\u00e1 que h\u00e1 suporte para plugins do Helm.<\/li>\n<li> Gerenciar segredos \u00e9 mais f\u00e1cil, pois os segredos podem ser aplicados em pipelines e tamb\u00e9m armazenados no Git de forma criptografada (dependendo das prefer\u00eancias do usu\u00e1rio).<\/li>\n<li> Aus\u00eancia de depend\u00eancia a ferramentas espec\u00edficas, pois \u00e9 poss\u00edvel usar qualquer tipo delas.<\/li>\n<li> Atualiza\u00e7\u00f5es de vers\u00f5es de cont\u00eaineres podem ser iniciadas pelo pipeline de constru\u00e7\u00e3o.<\/li>\n<\/ol>\n<p>\n<b>Desvantagens<\/b>:<\/p>\n<ol>\n<li> Os dados para acesso ao cluster est\u00e3o dentro do sistema de constru\u00e7\u00e3o.<\/li>\n<li> Atualizar os cont\u00eaineres de implanta\u00e7\u00f5es ainda \u00e9 mais f\u00e1cil de realizar com o processo de pull.<\/li>\n<li> Forte depend\u00eancia do sistema de CD, uma vez que os pipelines necess\u00e1rios podem ter sido inicialmente escritos para Gitlab Runners, e depois a equipe decide migrar para Azure DevOps ou Jenkins... e ser\u00e1 necess\u00e1rio migrar um grande n\u00famero de pipelines de constru\u00e7\u00e3o.<\/li>\n<\/ol>\n<p><\/p>\n<h2>Concluindo: Push ou Pull?<\/h2>\n<p>\nComo geralmente acontece, cada abordagem tem seus pr\u00f3s e contras. Algumas tarefas s\u00e3o mais f\u00e1ceis de realizar com uma e mais dif\u00edceis com outra. No in\u00edcio, eu fazia implementa\u00e7\u00f5es manualmente, mas depois de encontrar alguns artigos sobre Weave Flux, decidi implementar processos GitOps para todos os projetos. Para os templates b\u00e1sicos, isso foi f\u00e1cil, mas depois comecei a enfrentar dificuldades ao trabalhar com charts do Helm. Naquela \u00e9poca, o Weave Flux oferecia apenas uma vers\u00e3o inicial do Helm Chart Operator, mas mesmo agora algumas tarefas s\u00e3o mais complicadas devido \u00e0 necessidade de criar segredos manualmente e aplic\u00e1-los. Voc\u00ea pode argumentar que a abordagem pull \u00e9 muito mais segura, pois as credenciais do cluster n\u00e3o est\u00e3o dispon\u00edveis fora dele, o que aumenta tanto a seguran\u00e7a que vale o esfor\u00e7o extra.<\/p>\n<p>Depois de refletir um pouco, cheguei a uma conclus\u00e3o inesperada: isso n\u00e3o \u00e9 verdade. Se falarmos sobre componentes que exigem m\u00e1xima prote\u00e7\u00e3o, essa lista incluir\u00e1 reposit\u00f3rios de segredos e sistemas de CI\/CD, reposit\u00f3rios Git. As informa\u00e7\u00f5es dentro deles s\u00e3o bastante vulner\u00e1veis e precisam de m\u00e1xima prote\u00e7\u00e3o. Al\u00e9m disso, se algu\u00e9m invadir seu reposit\u00f3rio Git e conseguir fazer push de c\u00f3digo, ele poder\u00e1 implantar tudo o que desejar (independentemente da abordagem escolhida, seja pull ou push) e invadir os sistemas do cluster. Assim, os componentes mais importantes que exigem prote\u00e7\u00e3o s\u00e3o os reposit\u00f3rios Git e os sistemas de CI\/CD, e n\u00e3o as credenciais do cluster. Se voc\u00ea tiver pol\u00edticas e medidas de seguran\u00e7a bem configuradas para esses sistemas e as credenciais do cluster forem extra\u00eddas para os pipelines apenas na forma de segredos, a seguran\u00e7a adicional da abordagem de pull pode n\u00e3o ser t\u00e3o valiosa quanto inicialmente se pensava.<\/p>\n<p>Ent\u00e3o, se a abordagem pull \u00e9 mais trabalhosa e n\u00e3o oferece uma vantagem em seguran\u00e7a, n\u00e3o seria mais l\u00f3gico usar apenas a abordagem push? Mas algu\u00e9m pode argumentar que na abordagem push voc\u00ea fica muito dependente do sistema de CD e, talvez, seja melhor n\u00e3o fazer assim, para que seja mais f\u00e1cil realizar migra\u00e7\u00f5es no futuro.<\/p>\n<p>Na minha opini\u00e3o (como sempre), devemos usar o que se adequa melhor ao caso espec\u00edfico ou combinar. Pessoalmente, uso ambas as abordagens: Weave Flux para implanta\u00e7\u00f5es baseadas em pull, que incluem principalmente nossos pr\u00f3prios servi\u00e7os, e a abordagem push com Helm e plugins, que simplifica a aplica\u00e7\u00e3o de charts Helm ao cluster e permite criar segredos sem problemas. Acredito que nunca haver\u00e1 uma solu\u00e7\u00e3o \u00fanica que sirva para todos os casos, pois h\u00e1 sempre muitas nuances que dependem da aplica\u00e7\u00e3o espec\u00edfica. Recomendo fortemente o GitOps \u2014 ele facilita muito a vida e melhora a seguran\u00e7a.<\/p>\n<p>Espero que minha experi\u00eancia sobre esse tema ajude a decidir qual m\u00e9todo \u00e9 mais adequado para seu tipo de implanta\u00e7\u00f5es, e eu ficarei feliz em saber sua opini\u00e3o.<\/p>\n<h2>P.S. Nota do tradutor<\/h2>\n<p>\nNos contras do modelo pull, h\u00e1 o ponto de que \u00e9 dif\u00edcil colocar manifests renderizados no Git, por\u00e9m n\u00e3o h\u00e1 desvantagem de que o pipeline de CD no modelo pull vive separado do rollout e, na verdade, se torna um pipeline da categoria <i>Continuous Apply<\/i>. Portanto, ser\u00e1 necess\u00e1rio um esfor\u00e7o ainda maior para reunir o status de todas as implanta\u00e7\u00f5es e fornecer acesso de alguma forma aos logs\/status, preferencialmente vinculado ao sistema de CD.<\/p>\n<p>Nesse sentido, o modelo push permite garantir alguma seguran\u00e7a na implanta\u00e7\u00e3o, uma vez que a dura\u00e7\u00e3o do pipeline pode ser feita igual \u00e0 dura\u00e7\u00e3o da implementa\u00e7\u00e3o.<\/p>\n<p>Testamos ambos os modelos e chegamos \u00e0s mesmas conclus\u00f5es que o autor do artigo:<\/p>\n<ol>\n<li> O modelo pull se adequa para organizar a atualiza\u00e7\u00e3o de componentes do sistema em um grande n\u00famero de clusters (veja <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/455543\/\">o artigo sobre addon-operator<\/a><\/noindex>).<\/li>\n<li> O modelo push baseado no GitLab CI se adapta bem para a implanta\u00e7\u00e3o de aplica\u00e7\u00f5es usando charts Helm. Assim, a implanta\u00e7\u00e3o das implementa\u00e7\u00f5es dentro dos pipelines \u00e9 monitorada por meio da ferramenta <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/werf\">werf<\/a><\/noindex>. A prop\u00f3sito, no contexto deste nosso projeto, ouvimos constantemente 'GitOps' quando discut\u00edamos os problemas urgentes dos engenheiros DevOps em nosso estande na KubeCon Europe '19.<\/li>\n<\/ol>\n<p><\/p>\n<h2>P.P.S. do tradutor<\/h2>\n<p>\nConfira tamb\u00e9m em nosso blog:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/441964\/\">Dicas e truques do Kubernetes: migrando recursos em execu\u00e7\u00e3o no cluster para o Helm 2<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/434160\/\">Apresentamos a biblioteca kubedog para monitoramento de recursos Kubernetes<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/449096\/\">Expandindo e complementando o Kubernetes (vis\u00e3o geral e v\u00eddeo da apresenta\u00e7\u00e3o)<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/436910\/\">Dicas para criar workflows personalizados no GitLab CI<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p class=\"for_users_only_msg\">Apenas usu\u00e1rios registrados podem participar da pesquisa. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Entre<\/a><\/noindex>, por favor.<\/p>\n<h2 class=\"default-block__polling-title\">Voc\u00ea utiliza GitOps?<\/h2>\n<ul class=\"content-list content-list_polling\">\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Sim, abordagem pull<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Sim, push<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Sim, pull + push<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Sim, algo diferente<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    N\u00e3o<\/p>\n<\/li>\n<\/ul>\n<p>    30 usu\u00e1rios votaram. 10 usu\u00e1rios se abstiveram.<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.3 - 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\/pt\/blog\/administrirovanie\/gitops-sravnenie-metodov-pull-i-push\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"pt_PT\" \/>\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\/pt\/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: compara\u00e7\u00e3o entre os m\u00e9todos Pull e Push | ProHoster","description":"Nota.","canonical_url":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/gitops-sravnenie-metodov-pull-i-push","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pt_PT","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\/pt\/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\/pt\/wp-json\/wp\/v2\/posts\/35594","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/comments?post=35594"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/35594\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media?parent=35594"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/categories?post=35594"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/tags?post=35594"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}