Objetivo da pilha moderna de Gitops
Introdução
Desde cerca de 2006, a indústria de TI tem sido totalmente perturbada pela conjunção de vários fatores, incluindo a virtualização de recursos e a possibilidade de obtê-los sob demanda. Esta nova forma de gerenciar recursos de TI é amplamente conhecida como “Cloud Computing”. Tornou-se uma espécie de padrão, ou pelo menos um objetivo perseguido também por pessoas que desejam manter infraestruturas locais. O tão esperado sonho de finalmente poder considerar a TI como uma simples mercadoria. Bem, isso é o que muitos acreditavam.
As consequências concretas desta revolução para empresas de TI como a GersonRS têm sido principalmente o incrível crescimento no número de recursos a serem provisionados e gerenciados. A ampla automação de processos realizada por nossas equipes nos permitiu fazer frente a esse crescimento sem diminuir nossos padrões de qualidade, permanecendo competitivos.
Não tivemos trégua nessa jornada de automação e tiramos o melhor proveito de um ecossistema próspero de projetos de código aberto que atendem a todas as necessidades relacionadas a essa mudança de paradigma.
Aprendemos muito durante todos esses anos e o Modern Gitops Stack é a nossa resposta para implementar nossas melhores práticas em um mundo conteinerizado onde o Kubernetes é o padrão de fato para plataformas de aplicativos.
Distribuição Kubernetes Agnóstica em Nuvem
Hoje em dia, a questão não é tanto se existe software para resolver um problema, mas qual usar. Como uma distribuição Linux, temos orquestradores de contêineres (Kubernetes como kernel) e muitos outros projetos que giram em torno dele e oferecem diferentes recursos. Esses recursos às vezes são orientados para desenvolvedores, operadores ou ambos (por exemplo, ferramentas de observabilidade).
Quanto a uma distribuição Linux, o que precisamos é de consistência, componentes que funcionem juntos e que sejam fáceis de instalar e manter. Mas, ao contrário de uma distribuição Linux que é, por definição, centrada no servidor, a promessa dos contêineres e do Kubernetes é a portabilidade. A possibilidade de passar de uma nuvem (ou infraestrutura on-premise) para outra, de distribuir as cargas de trabalho em diferentes plataformas. No final das contas, este Modern Gitops Stack é simplesmente uma "Distribuição Kubernetes Agnóstica em Nuvem".
Sem o Modern Gitops Stack
![Sem a pilha moderna de Gitops](../_images/explanations/without_modern-gitops-stack.png)
A ilustração acima tenta mostrar que embora seja bastante simples gerenciar um projeto Kubernetes, a complexidade aumenta dramaticamente quando você adiciona mais e mais projetos e deseja manter uma certa homogeneidade entre eles. Os principais problemas observados são:
-
Não escala
-
Há muitas duplicações de código
-
Não há referência de implementação
-
As melhorias nem sempre são transferidas para outros projetos
-
É muito difícil manter
-
Todos os projetos acabarão por divergir
-
Cada projeto aponta para diferentes versões de dependências
Este não é um novo problema de TI. Há duas décadas, não era muito fácil gerir milhares, ou mesmo centenas de anfitriões de forma homogénea. Este problema foi resolvido com sucesso por soluções como CFEngine, Puppet ou mais recentemente pelo Ansible. Hoje, devemos adaptar esses princípios ao Kubernetes. Existem muitos componentes de código aberto por aí, apenas uma maneira inteligente de interconectá-los.
Com a pilha moderna de Gitops
![Com a pilha moderna de Gitops](../_images/explanations/with_modern-gitops-stack-2.png)
Ao criar o Modern Gitops Stack (uma espécie de camada de abstração), torna-se possível instanciar todos os componentes através de um processo lógico e coerente. As principais vantagens são:
-
Ele escala
-
Duplicação mínima de código
-
Uma implementação de referência
-
As melhorias podem ser facilmente transferidas para outros projetos
-
O pining de dependência é feito no Modern Gitops Stack para garantir a reprodutibilidade
Resumo
No final, o Modern Gitops Stack fornece:
-
Um Playground para testar/prototipar coisas novas relacionadas ao mundo K8s
-
Uma camada de abstração opinativa para implantar e gerenciar nossas implantações do Kubernetes
-
Aplicar as melhores práticas do Modern Gitops:
-
Infraestrutura como Código (IaC)
-
Gerenciamento de Configuração (CM)
-
GitOps
-
Integração Contínua (CI)
-
Entrega Contínua (CD)
-
Documentação como Código
-
-
Um conjunto de ferramentas consistente
-
Observabilidade (monitoramento, registro, alertas, tendências)
-
Entrega Contínua (gerenciamento de mudanças + recursos Git)
-
Roteamento Web Dinâmico
-
Provisionamento de armazenamento dinâmico
-
Gerenciamento Dinâmico de Certificados
-
Autenticação e autorização
-
Com as seguintes características principais:
-
Suporta múltiplas distribuições Kubernetes (AWS EKS, Azure AKS e KinD para desenvolvimento local e fins de teste);
-
Suporta padrões azul/verde ou prod/qa/int/dev;
-
Infraestrutura como Código com Terraform;
-
Implantação automática de "core apps" (cert-manager, Prometheus, AlertManager, Grafana, Loki, Traefik. etc.) no espírito GitOps com Argo CD;
-
Ponto central de documentação implantado com Antora.