Escrito por ilegra,

5 minutos de leitura

Acelerando iniciativas digitais com Gitops e EKS

Estratégia de plataforma para acelerar o lançamento de MVPs e suportar a escala de produtos digitais no médio e longo prazo.

Compartilhe este post:

Sobre o cliente:

Este cliente é do ramo de entretenimento, baseado na Suíça. A empresa atua no ramo de entretenimento, criando soluções para geração de conteúdo digital via livestream. Contando no seu quadro com algo em torno de 100 pessoas, entre funcionários e prestadores de serviços, ainda é considerada uma startup dentro do mercado Europeu. A empresa tem roadmap agressivo para lançar no mercado uma solução de livestreaming interativa, utilizando técnicas avançadas de machine learning e realidade aumentada como diferencial.

O desafio:

A ilegra iniciou uma parceria estratégica com este cliente, provendo capabilities especializadas em engenharia cloud. O desafio era criar uma plataforma de computação em cloud, capaz de suportar a estratégia do produto para o lançamento de MVPs incrementais com investimentos reduzidos em headcount com perfil de engenharia em cloud.
Com um olhar no futuro, a estratégia de plataforma também precisaria absorver no médio e longo prazo o crescimento orgânico dos times de engenharia, de maneira que estes pudessem operar com o máximo de autonomia possível o provisionamento da infraestrutura para as suas aplicações, seguindo os padrões pré-estabelecidos de governança.

Por que escolher a Amazon Web Services?

Em um contexto onde a prioridade é validação do produto junto ao usuário final, escolhas técnicas que priorizem o uso serviços gerenciados, introduzindo o menor overhead técnico, favorecem a construção de soluções mais robustas em menor espaço de tempo. Neste contexto, a AWS oferece diversas opções para o desenvolvimento de aplicações WEB distribuídas, principalmente no que diz respeito a layer de computação, como EKS, plataforma de containers escolhida para suportar o modelo GitOps da plataforma digital em desenvolvimento.

Solução:

A escolha pela abordagem GitOps tem como premissa o uso do git para definição da infraestrutura. Pipelines construídos utilizando esta abordagem possuem as seguintes características:

  1. Mais visibilidade: A garantia de o que foi definido no git, é o que está aplicado no ambiente. Políticas reativas podem ser definidas de maneira que qualquer divergência encontrada entre o que está definido no git e o ambiente sejam automaticamente desfeitas.
  2. Mais agilidade: Uma vez aplicadas no git, mudanças na infraestrutura da aplicação são aplicadas automaticamente, sem a necessidade de intervenção manual.
  3. Mais Governança: Mesmo tendo a autonomia de definir recursos de infraestrutura via git, políticas podem ser aplicadas de maneira que apenas alguns recursos de infraestrutura possam ser criados/alterados, mantendo um equilíbrio entre autonomia e compliance.

 

O modelo Gitops é 100% compatível com a arquitetura do Kubernetes, onde o provisionamento de recursos de aplicação são definidos de maneira declarativa. Nesta abordagem não é necessário o conhecimento em ferramentas específicas para provisionar a infraestrutura em cloud, como terraform ou cloudformation, por exemplo.
Uma implementação baseada em Gitops com Kubernetes exige que a instalação dos clusters seja feita de maneira específica, utilizando alguns operadores para viabilizar o processo de sincronização da infraestrutura definida no git, bem como a implementação de políticas. Utilizando o AWS organizations para gerenciar múltiplas contas e EKS para a gestão de cluster de Kubernetes, foi possível criar uma estrutura core, capaz de provisionar múltiplas aplicações em diferentes ambientes/contas em escala, conforme o diagrama abaixo.

A setup acima é efetiva em termos de custo, uma vez que um único cluster centralizado é capaz de monitorar múltiplos ambientes.
Além do provisionamento de aplicações distribuídas, a solução também é capaz de provisionar múltiplos clusters EKS. Utilizando o padrão Apps of Apps, é possível definir no git todos os pacotes, configuraçẽos de cluster e helm charts para provisionar uma instalação funcional de EKS on demand.

 

A construção da solução conta com o uso das seguintes serviços gerenciados AWS:

Amazon Elastic Kuberntes Service (EKS): Serviço de gerenciado para a execução de clusters Kubernetes de modo gerenciado. Um de seus principais benefícios se dá pelo da AWS prover como serviço a gestão do Control Plane do cluster, um componente vital para seu funcionamento adequado.

Amazon Elastic Container registry (ECR): Para fazer o armazenamento das imagens de containers das aplciaçẽosn sendo disponibilizadas dentro cluster.

VPC Peering: Para estabelecer conectividade entre diferentes contas utilizadas pelas aplicações. A conectividade entre contas é fundamental neste contexto, uma vez que existe uma conta compartilhada que faz a sincronização da infraestrutura e o git.

Elastic Block Storage (EBS): Serviço de storage para mapeamento de volumes para as aplicações rodando dentro do cluster.

Amazon Elastic Compute (EC2): Serviço utilizado para prover a camada de computação utilizada para rodar os workloads nos clusters das diversas contas provisionadas.

Application Load Balancer (ALB): Utilizado para rotear requisições vindas da internet para as aplicações dentro do cluster nas contas de workload.

Benefícios Gerados:

Um dos principais objetivos nesta solução era viabilizar uma estratégia de plataforma que permitisse a expansão de times de engenharia para acelerar o lançamento de sucessivos MVPs no mercado, mantendo o investimento em cloud e operações estáveis. A abordagem Gitops proposta, no que tange a gestão de recursos de infraestrutura para suporte às aplicações, vai justamente nesta direção. A abordagem proposta permitiu:

  • Maior autonomia – Alterações na infraestrutura da aplicação podem ser promovidas entre ambientes sem a necessidade do envolvimento do time de SRE e operaçẽos
  • Estabilidade – A propagação de mudanças a nível de plataforma pode ser mais facilmente testada. O provisionamento de novos clusters se dá por um processo automatizado, utilizando definições dentro do próprio git. Isso permite ao time de plataforma testar qualquer mudança em uma estrutura segmentada, utilizando uma estratégia de features branches, antes de promover tais mudanças para uso nos ambientes oficiais.
  • Mais governança e controle – Apesar da autonomia que engenheiros e tech leads dos times de produto possuem sobre o provisionamento da infraestrutura, permissões e alguns guardrails foram implementados. Utilizando uma estrutura de segmentação de aplicações por projeto no ArgoCD, bem como a definição de black e whitelists, foi possível definir que algumas aplicações só podem provisionar recursos como Deployments e Services dentro do cluster e como o deploy de recursos somente em namespaces determinados.

 

Apesar dos benefícios, a adoção de processo de release de infraestrutura baseada em Gitops demanda um investimento inicial considerável em planejamento, implementação e estabilização. Uma estratégia Gitops com kubernetes faz sentido em cenários onde os engenheiros tenham um nível de senioridade mais elevado e conhecimento pelo menos fundamentais de computação em cloud e sistemas distribuídos. Por mais simples que pareça promover mudanças via git, operar este tipo de pipeline expõem os usuários a configuração sensível de infraestrutura, que podem causar efeitos colaterais importantes na estabilidade das aplicações em ambientes produtivos.

Compartilhe este post: