O que é "GitOps" e por que isso é importante?

Shutterstock / Postmodern Studio
GitOps é uma abordagem de infraestrutura que pega as melhores práticas de desenvolvimento de software e as aplica aos sistemas de TI. O GitOps se baseia no modelo de infraestrutura como código para criar um modelo de infraestrutura automatizado que é colaborativo e com controle de versão como o seu código.
Uma equipe de operações moderna rotineiramente criará novos serviços para cada implantação. Instâncias de contêineres, bancos de dados e equipamentos de rede precisam estar disponíveis para que as implantações sejam bem-sucedidas.
GitOps define os recursos a serem fornecidos como arquivos que existem em um repositório Git. Isso permite que todos na equipe inspecionem e contribuam com a infraestrutura que será provisionada. Você pode usar pipelines de CI para verificar sua configuração e, por fim, enviá-la para sua plataforma de nuvem.
Um repositório de infraestrutura acaba se parecendo muito com um repositório de software. Você cria uma ramificação para cada mudança, atualiza seus arquivos de configuração, conclui uma revisão e mescla em sua ramificação principal. Uma ferramenta automatizada, como Ansible ou Terraform, aplica as alterações ao seu ambiente. O fluxo de trabalho é o mesmo modelo de ramificação com versão que os desenvolvedores usam.
O que é Git?
O Git em GitOps se refere ao sistema de controle de versão Git. Git se tornou a ferramenta de controle de origem preferida da maioria dos desenvolvedores. Ele tem um modelo de armazenamento descentralizado e enfatiza o uso de filiais locais para evoluir as mudanças.
Os sistemas de controle de versão facilitam a iteração em seu trabalho. Você pode lidar com componentes independentes em paralelo, usando ramificações, antes de mesclar em uma ramificação principal que representa o “ lançado ” versão do seu projeto. Você envia seu código para um repositório compartilhado, geralmente em um serviço como GitHub ou GitLab, para compartilhá-lo com outras pessoas.
Infraestrutura declarativa
GitOps &’ a maior força reside em seu papel como fonte da verdade. Qualquer pessoa pode aprender como é sua infraestrutura consultando os arquivos em seu repositório Git. Você terá um conjunto de arquivos de configuração que definem as características do seu sistema.
Os arquivos de configuração geralmente são declarativos por natureza — eles descrevem o sistema no tempo presente. Você “ declara ” que deve haver cinco servidores em sua arquitetura, em vez de fornecer uma lista de comandos que iniciam diretamente cinco servidores. Sua ferramenta de provisionamento converte suas instruções em uma sequência de comandos que movem sua infraestrutura em direção ao estado desejado.
É aqui que entra a integração contínua (CI). Um desenvolvedor de software executará pipelines automatizados para executar testes de unidade, realizar análises estáticas e, eventualmente, implantar na produção. Um pipeline de equipe de infraestrutura típico verificará seus arquivos de configuração em busca de erros de sintaxe antes de enviá-los a um agente que aplique as alterações em seus sistemas.
Capacidade de verificar

RELACIONADOComo configurar compilações automáticas para imagens do Docker no GitHub
Ser capaz de usar pipelines de CI para aprovar mudanças na infraestrutura permite que você verifique se essas mudanças realmente funcionarão conforme o planejado. O GitOps também oferece a capacidade de verificação contínua, onde os agentes em sua infraestrutura monitoram constantemente as discrepâncias.
O repositório é a única fonte da verdade. Conclui-se que qualquer diferença observada no sistema real é um erro que deve ser corrigido. Um agente com acesso ao repositório e aos recursos provisionados pode tomar medidas para corrigir o estado atual se ele não corresponder mais às suas declarações.
GitOps ajuda você a observar sua infraestrutura. Os arquivos de configuração declarativos fornecem uma explicação de como seus sistemas entraram em seu estado atual. Você pode inspecionar os commits Git do repositório para entender como a infraestrutura evoluiu ao longo do tempo.
O GitOps também pode oferecer uma maneira de reverter as mudanças de infraestrutura. Em sua forma mais simples, reverter para um commit anterior restaura uma versão anterior de seus arquivos de configuração. Na verdade, aplicá-los pode ser desafiador. Considerando que o código pode ser revertido simplesmente sobrescrevendo a implantação atual, “ revertendo ” a criação — ou exclusão — da infraestrutura é muito menos simples.
Você precisará avaliar o agente de distribuição que está usando para determinar se as reversões são uma possibilidade realista. Se uma implementação in-loco não for possível, você pode pelo menos reverter os commits em seu repositório e reimplantá-los em um ambiente limpo. Você então usaria seus procedimentos de restauração para restabelecer seus dados.
Desafios com GitOps
A falta de maturidade é o maior obstáculo para a adoção do GitOps. O termo permanece obscuro para equipes de operações que podem ser relativamente inexperientes com fluxos de trabalho controlados por versão.

RELACIONADOComo bloquear seu servidor SSH
Muitas equipes de infraestrutura estarão acostumadas com as práticas de trabalho que aprimoraram nas últimas décadas. Eles usam SSH em servidores, fazem suas alterações e documentam-nas em um wiki mantido centralmente. Não é controlado, mas é simples e funciona.
GitOps resolve a falta de controle e pode melhorar a visibilidade do estado dos sistemas. Ao mesmo tempo, há uma curva de aprendizado que envolve um fluxo de trabalho estruturado e um conjunto de ferramentas muito diferente. O acesso SSH direto não é mais apropriado. Em vez disso, você faz alterações editando arquivos e esperando que um pipeline de CI os aplique.
Obter a adesão de equipes relevantes pode ser o maior problema ao apresentar o GitOps a uma nova organização. Esteja preparado para que os tomadores de decisão entendam mal onde reside o valor ou deixem de reconhecê-lo completamente. Alguns ficarão frustrados por ter que fazer commit, fundir e buscar aprovação para mudanças que eles poderiam conseguir manualmente usando um comando SSH rápido. O GitOps permanece onde o DevOps estava alguns anos atrás, esperando para ver uma adoção generalizada fora da literatura técnica.
Além da resistência organizacional, o GitOps também tem pontos fracos práticos. Um desafio comum é implementar em vários ambientes diferentes. Uma abordagem comum é atribuir a cada ambiente sua própria ramificação no repositório. Isso rapidamente se torna desajeitado se você tiver muitos ambientes. Uma abordagem alternativa poderia ser baseada em vários repositórios, talvez usando submódulos Git, mas isso apenas move a redundância para outro lugar.
GitOps ainda é um conceito jovem e não há padrões estabelecidos para sua implementação. Sem uma arquitetura de referência, você precisará experimentar de forma independente. Isso aumenta ainda mais a lista de incógnitas para organizações que avaliam a adequação do modelo.
RELACIONADO: Automatização da entrega contínua em contêineres com CodeBuild, ECR e CodeDeploy
Resumo
GitOps é uma abordagem para gerenciar a infraestrutura de TI que usa um repositório Git como fonte da verdade. Você grava arquivos de configuração declarativos que descrevem os recursos que deseja provisionar. Um sistema automatizado pega esses arquivos e os usa para evoluir o estado da sua infraestrutura.
Como conceito, GitOps faz muito sentido. Ele reduz a lacuna entre as equipes de desenvolvimento e operações unificando o fluxo de trabalho. Você obtém maior visibilidade de sua infraestrutura e a capacidade de alterar a versão e auditar as alterações.
Mesmo assim, a implementação do GitOps continua sendo um desafio em muitos casos. Requer adesão organizacional, aceitação de algumas ineficiências inerentes e um compromisso para resolver problemas técnicos que você pode não necessariamente prever. As organizações que apostam no GitOps podem esperar maior consistência e padronização. Mas para muitos outros, os benefícios fornecidos ainda não são um incentivo suficiente para descartar os comandos CLI em um terminal de administrador de sistema.
Nenhum comentário