A jornada do Kubernetes
Diretor de Operações de Software e Segurança
TrustlyA , Inc. (anteriormente conhecida como PayWithMybank) trabalhou com toda a sua operação de nuvem para executar mais de 20 microsserviços desde 2015, que são responsáveis por conectar seus usuários a mais de 1.000 bancos em todo o mundo. Embora a Trustly tivesse uma infraestrutura madura e estável, a jornada começou em 2018 para modernizar a arquitetura do aplicativo para usar contêineres no Kubernetes.
Visão geral
O ambiente da Trusty é totalmente executado no Amazon Web Services (AWS). Durante anos, ele teve principalmente orquestração de nuvem usando o CloudFormation e o Packer. Usamos três camadas do CloudFormation: uma para a rede, uma para o proxy reverso (Nginx) e uma para o aplicativo. Cerca de duas implementações por dia foram feitas diretamente pelo CloudFormation. Esse modelo de implementação contínua nos serviu muito bem. Vamos chamar esse ambiente antigo de classic-infra.
Em 2018, a equipe de DevSecOps da Trustly começou a estudar o Kubernetes (K8s) e transferiu o tráfego de produção para o novo ambiente em maio de 2021. Quando começamos a estudar o Kubernetes, ficou claro que ele não atendia a todos os recursos de nossa interface clássica. Como resultado, pesquisamos as ferramentas essenciais para nosso processo dentro do cluster.
Mas, primeiro, vamos falar sobre o Elastic Kubernetes Service (EKS)...
EKS: como estávamos no AWS, fazia sentido usar o EKS para executar nosso ambiente no K8s. O EKS é um serviço da AWS que fornece segurança e disponibilidade para o plano de controle do Kubernetes. Quando começamos em 2018, a versão do EKS era 1.11, o que criou muitos problemas e exigiu processos manuais para integrar nosso VPC à ferramenta EKSCTL. Por exemplo, você podia provisionar o cluster K8s, mas havia muitas etapas manuais para fazer tudo funcionar. Quando lançamos o cluster K8s em produção em 2021, já estávamos na versão 1.20 do EKS, que fornecia muito mais recursos de automação no EKSCTL.
Ferramentas
OpenSearch: Com o Kubernetes, você precisa coletar e centralizar os logs de alguma forma. Por esse motivo, precisávamos de uma ferramenta para gerenciar os logs de aplicativos no Kubernetes. Um dos motivos pelos quais o projeto levou três anos para ser concluído foi o tempo necessário para aprender e implantar um cluster do ElasticSearch usando o OpenDistroElasticSearch (no início). Recentemente, fizemos o upgrade para o OpenSearch, que é uma ferramenta robusta com todos os recursos necessários para o gerenciamento confiável de logs e que pode ser integrada ao Filebeat e ao Logstash.
Spinnaker: Na jornada para implantar o Kubernetes, notamos limitações nos requisitos de implantação. Para resolvê-las, adotamos a ferramenta Spinnaker, desenvolvida e mantida pela Netflix. O Spinnaker nos permitiu criar um pipeline complexo e a possibilidade de ter uma implantação azul/verde em nosso cluster.
Terraform: Quando começamos nossa jornada, todo o nosso ambiente estava no CloudFormation. Não tínhamos experiência com o Terraform. Para os novos ambientes Kubernetes, toda a configuração da conta do AWS foi criada pelo Terraform. O Terraform é responsável por criar o VPC, os grupos de segurança, as sub-redes, as tabelas de rotas, o gateway nat e os recursos necessários para executar o cluster do K8s.
Eksctl: essa é uma excelente ferramenta para instalar e configurar um cluster EKS. Ela consegue facilitar várias etapas na instalação de um novo cluster EKS.
Com todas essas ferramentas, foi possível manter a mesma visibilidade que tínhamos na interface clássica dentro do cluster EKS, obtendo os benefícios do Kubernetes nessa nova arquitetura.
A vez
Para estarmos preparados para o dinamismo e o ritmo acelerado do desenvolvimento do Kubernetes, projetamos - tanto na VPC quanto nos componentes associados ao cluster - a capacidade de executar nosso aplicativo simultaneamente em dois clusters (roteando o tráfego entre eles por meio do ROUTE53). Essa estratégia nos ajudou a migrar do classic-infra para o Kubernetes, dividindo o tráfego em pequenas porcentagens até atingir 100% de tráfego no K8s.
Aumentamos cuidadosamente o tráfego ao longo das semanas (começando com 1% do tráfego e depois passando para 5% do tráfego). Depois de muitos ajustes e melhorias, acabamos convertendo 100% do tráfego para o Kubernetes. Nesse ponto, estávamos confortáveis com o ambiente e pudemos observar sua estabilidade nos dias seguintes.
A receita para o sucesso de nossa estratégia foi manter o registro do cluster separado do cluster do K8s. Com isso, ambos os ambientes poderiam enviar logs para o OpenSearch e, por meio de tags, poderíamos identificar o cluster em cada linha de log, facilitando a solução de problemas.
Conclusão
O Kubernetes é uma ferramenta avançada, mas requer um esforço extra para instalar, configurar e manter, além de exigir outros componentes para criar um cluster K8s pronto para produção.
Este primeiro artigo é uma visão geral da arquitetura do Kubernetes em Trustly. Se quiser ver mais detalhes sobre dimensionamento automático, estratégia de verificação de integridade de pods e práticas recomendadas de Java usando contêineres, siga este blog para obter conteúdo futuro.
Denner Padilha
Chefe de Operações de Nuvem e Segurança, Trustly América
Denner é chefe de operações de nuvem e segurança na Trustly. No início de 2018, Denner ingressou na Trustly como gerente de operações de TI, onde era responsável por toda a infraestrutura de nuvem e operações de TI para as Américas do Norte.
Denner tem vasta experiência em desempenho de aplicativos, bem como em auditoria de segurança ISO27001, PCI e SSAE18 SOC Tipo 2. Anteriormente, ele trabalhou como professor no Brasil, ensinando disciplinas de TI para alunos de graduação e MBA.