GitOps: O Futuro da automação de infraestrutura

Natura @ Tech
Natura Infra e DevOps
7 min readAug 11, 2020

usando o Git como a “única fonte de verdade”

O que é GitOps?

Basicamente o GitOps é um gerenciador de configuração aplicada a um contexto específico e restrito, considerando que a única fonte de verdade é um repositório Git.

Ele é uma maneira fácil e inteligente de Continuous Deployment de aplicações CloudNative.

É usado principalmente na comunidade Kubernetes, mas há esforços de outras comunidades para trazer esses conceitos para demais ambientes.

GitOps: versioned CI/CD on top of declarative infrastructure. Stop scripting and start shipping. — Kelsey Hightower

Princípios GitOps

Existem princípios do GitOps que impulsionam sua implementação:

  1. Use a configuração declarativa para definir seu aplicativo e serviços.
  2. Todas as alterações precisam passar pelo seu processo de revisão do Git — ninguém deve usar o kubectl diretamente.
  3. Use um operator no cluster para identificar o estado desejado, conforme declarado pela sua configuração no Git.

Como Funciona?

Após um pipeline de CI bem-sucedido, novas imagens docker são enviadas ao registry e as respectivas tags de imagem são alteradas no yaml contido no repositório GitOps.

A ação de sincronização é acionada por meio de um webhook do CI após confirmação ou após um polling regular do operator.

Estamos usando o ArgoCD onde é executado como um controller no cluster Kubernetes que monitora continuamente os aplicativos em execução e compara o estado ativo atual com o estado de destino desejado (conforme especificado no repositório GitOps).

O controlador detecta o estado OutOfSync do aplicativo, e opcionalmente executa as ações corretivas.

ArgoCD

ArgoCD é uma ferramenta que lê a configuração do seu ambiente (escrita como um chart helm, arquivos kustomize, jsonnet ou arquivos yaml simples) do seu repositório git e a aplica aos namespaces do Kubernetes.

Alguns dos recursos do ArgoCD são:

  • automação e rastreabilidade via fluxo de trabalho GitOps
  • suporte para declarações de deployments helm, kustomize e jsonnet
  • IU da web para visualizar recursos do Kubernetes
  • argo cli
  • painel de métricas Grafana
  • trilhas de auditoria para eventos de aplicativos e chamadas de API

Porque as pessoas usam?

  • Recuperação de erro fácil e rápida;

Tudo fica no git, logo você tem um histórico de tudo que mudou em seu ambiente. Isso torna o Rollback tāo fácil executando um simples git revert.

  • Gerenciamento de credenciais mais prático;

O kubectl é o novo ssh. Limite o acesso e use-o quando ferramentas auxiliares não estiverem disponíveis.

  • Deployments com auto-documentação;

Uma mensagem de commit bem elaborada colabora para uma documentação futura da aplicação. Nāo existe a necessidade de acessar via ssh um servidor para entender o que aconteceu ali, tudo fica registrado no git.

  • Conhecimento compartilhado entre as equipes;

Como tudo fica no git, facilmente podemos encontrar exemplos de como configurar novos sistemas baseando-se nos existentes.

Porque decidimos usar aqui na Natura?

Aqui na Natura usamos Kubernetes há mais de 5 anos. Com o passar do tempo veio a adoção de todas as equipes, com isso os pedidos ao time de SRE tornaram-se frequentes e muito simples, dificultando a autonomia e sobrecarregando o time.

Qual desafio o GitOps resolveu?

Como qualquer esforço, a mudança pode ser complicada e o GitOps não é exceção. GitOps é uma mudança de processo que exigirá disciplina de todos os participantes e o compromisso de fazer as coisas de uma nova maneira.

Fundamentalmente, GitOps é uma forma de aumentar a velocidade de sua equipe sem sacrificar a qualidade.

Para muitos que são novos no Kubernetes, por onde começar ou como organizar tudo pode ser um pouco confuso. A maioria das empresas não querem mudar a estrutura de suas equipes para serem produtivos, mas com GitOps não há necessidade de mudar a estrutura de sua equipe.

Ao introduzir o GitOps:

  • Qualquer desenvolvedor que usa Git pode começar a implantar novos recursos no Kubernetes;
  • Os mesmos fluxos de trabalho são mantidos durante o desenvolvimento e as operações;
  • Todas as mudanças podem ser acionadas, armazenadas, validadas e auditadas no Git;
  • As mudanças de operações podem ser feitas via pull, incluindo reverts;
  • As mudanças podem ser observadas e monitoradas;

O que alcançamos?

Um passo fundamental na maturidade DevOps que nos permitiu dar visibilidade e acesso às squads garantindo maior autonomia e diminuição da quantidade de envolvimento do time de operação. Com isso, aumentamos a produtividade dos times; onde através do gitops com um simples commit os times passaram a conseguir controlar melhor a qualidade. Assim herdamos autonomia às squad e interdependência com o time de SRE, sem perder auditoria e Governança.

6 meses com GitOps …

Após o período de testes e implantação (que é simples, rápido e fácil) atingimos os objetivos e geramos autonomia às squads e gestão de configuração dos diversos cluster e em diversas cloud que temos. Foi possível padronizar a atuação dos times e gerar mais qualidade nas alterações.

O que aprendemos?

“A implantação do gitops foi fator decisivo de sucesso para padronização da forma de governança e controle dos nossos cluster além de garantir a tão sonhada gestão de configuração. Conseguimos dar mais autonomia às squads, gerando liberdade mas garantindo Governança, segurança, rastreabilidade e diminuir os atritos entre os times de DEV e OPS. Além disso vindo de uma solução open foi fundamental para para gerar a flexibilidade necessária e com guardrails.”

- Renzo Petri

Não confunda liberdade com libertinagem — Leonardo Lopes

Cuidado ao liberar acessos ao ambiente, atenção dobrada a configuração do módulo RBAC no ArgoCD.

Dúvidas Frequentes

Vamos começar a implementar o Gitops, quais são os primeiros passos?

Vale salientar que para implementar o GitOps você deve estar familiarizado com o mundo DevOps.

Se você está iniciando um projeto do “Zero”, é um pouco fácil adotar o GitOps desde o início. Tudo o que temos a fazer é escolher nossas ferramentas para CI/CD, gerenciamento declarativo de YAML e GitOps Agent para que ele funcione.

Se você está procurando implementar GitOps em um aplicativo existente, os pontos abaixo podem ajudar:

  1. Você pode escolher um aplicação por vez e usar a história de sucesso para espalhar uma adoção mais ampla.
  2. Quando você seleciona a primeira aplicação, escolha aquela que muda com mais frequência. Isso ajudará a construir algumas métricas sólidas para a história de sucesso.
  3. Escolha uma aplicação que “quebre” com mais frequência. Pois com o GitOps você deve obter uma uma melhor resiliência e observabilidade, logo esse aplicativo deve “quebrar menos”

GitOps x DevOps , qual a diferença?

O DevOps trata da mudança cultural em uma organização para fazer as pessoas trabalharem melhor juntas. GitOps é uma técnica para implementar a Entrega Contínua. Embora o DevOps e o GitOps compartilhem princípios como automação e Infraestrutura, não faz sentido compará-los. No entanto, esses princípios compartilhados certamente facilitam a adoção de um fluxo de trabalho GitOps quando você já está empregando ativamente técnicas de DevOps.

Será que meu projeto está pronto para implementar GitOps?

Muito provavelmente sim! O legal do GitOps é que você não precisa escrever nenhum código de maneira diferente. Tudo o que você precisa para começar é uma infraestrutura que possa ser gerenciada com a infraestrutura declarativa como ferramentas de código.

GitOps é o tal do NoOps?

Você pode usar o GitOps para implementar o NoOps, mas isso não torna automaticamente todas as tarefas de operações obsoletas. Se você estiver usando recursos de nuvem de qualquer maneira, o GitOps pode ser usado para automatizá-los. Normalmente, alguma parte da infraestrutura, como a config de rede ou o cluster Kubernetes que você usa, não é gerenciada por você, mas gerenciada centralmente por alguma equipe de operações. Portanto, o Ops nunca desaparece realmente.

E agora, devo contratar engenheiros GitOps para minha equipe?

GitOps não é uma função (nem DevOps). Então a resposta é não. GitOps é um conjunto de práticas. Você pode procurar um desenvolvedor que tenha experiência usando GitOps — ou simplesmente deixar que eles desenvolvam essas práticas.

Não usamos kubernetes. Mesmo assim podemos avaliar o uso do GitOps?

Sim! GitOps não é especificamente para Kubernetes. Você pode usar qualquer infraestrutura que seja declarativa, observada e tenha IAC tools disponíveis. Contudo atualmente a maioria dos Operators de GitOps baseados em pull são implementados para kubernetes.

Tools

  • ArgoCD: Um operator GitOps para Kubernetes com uma interface web
  • Flux: Operator GitOps Kubernetes criado pela Weaveworks
  • Gitkube: Ferramenta para build e deploy de imagens docker no kubernetes via git push
  • Terragrunt: Um wrapper para Terraform para manter configurações DRY, e gerenciar o state.
  • WKSctl: Uma ferramenta para gerenciar a configuração de um cluster Kubernetes baseado nos princípios GitOps.
  • Helm Operator: Um operator para usar o GitOps em Kubernetes com helm.

Palestras

Por Rafael Silva

--

--

Natura @ Tech
Natura Infra e DevOps

Como fazemos tecnologia na maior empresa de venda direta do país