Em sua essência, o modelo GitOps usa o padrão do controlador. Isso é reforçado ainda mais pelo padrão de operador, na perspectiva do Kubernetes ou do OpenShift, em que os operadores são extensões de software que usam recursos personalizados para gerenciar aplicações e seus componentes.
Não podemos deixar de mencionar o Argo CD, uma ferramenta de GitOps que auxilia nos fluxos de trabalho de GitOps. O Argo CD é uma ferramenta declarativa de código aberto para a integração contínua e a implementação contínua (CI/CD) de aplicações. Implementado como um controlador do Kubernetes, o Argo CD monitora continuamente as definições e configurações das aplicações em execução, comparando o estado atual e ativo do cluster com o estado desejado definido em um repositório Git.
Mas o GitOps não é um único produto, plug-in ou plataforma. Os fluxos de trabalho do GitOps ajudam as equipes a gerenciar a infraestrutura de TI por meio de processos que elas já utilizam no desenvolvimento de aplicações. Para pegar emprestado de um blog do GitLab, o GitOps requer três componentes principais: GitOps = IaC + PRs ou MRs + CI/CD
- IaC: a infraestrutura como código (IaC) é a prática de manter toda a configuração de infraestrutura armazenada como código. O GitOps usa um repositório Git como fonte única da verdade para as definições de infraestrutura. O Git rastreia todas as mudanças de gerenciamento de código.
- PRs ou MRs: o GitOps usa pull requests (PRs) ou merge requests (MRs) como mecanismo de mudança para todas as atualizações de infraestrutura. É aqui que as equipes podem colaborar por meio de revisões e comentários e onde ocorrem as aprovações formais.
- CI/CD: o GitOps automatiza as atualizações da infraestrutura usando um fluxo de trabalho do Git com integração contínua (CI) e entrega contínua (CD). Quando um novo código é mesclado, o pipeline de CI/CD promulga a mudança no ambiente. Qualquer desvio de configuração, como alterações manuais ou erros, é substituído pela automação do GitOps para que o ambiente convirja para o estado desejado definido no Git, fornecendo, assim, operações contínuas (CO):