Kubernetes é uma tecnologia versátil. É até possível rodá-lo na máquina local para aprender e simular um ambiente completo. No entanto, esse laboratório está há um habismo de distância para ser um Kubernetes pronto para produção.
Portanto, sempre que se considera Kubernetes em um projeto, a pergunta que surge é: Onde exatamente?
Como usar Kubernetes na AWS?
A resposta curta é: Amazon EKS (Elastic Kubernetes Service). No entanto, essa não é a resposta completa.
Assim como você pode criar uma máquina EC2 na AWS com 128 GB de memória e 16 VCPU, e configurar manualmente um banco de dados PostgreSQL para produção, você também poderia configurar e gerenciar um cluster Kubernetes inteiro manualmente. Porém, a AWS entende os desafios de manter um banco de dados em produção, por isso oferece opções de Banco de Dados como Serviço (DBaaS), permitindo que você utilize o serviço enquanto a AWS cuida do hardware e oferece benefícios como backups automáticos.
O EKS é a solução gerenciada da AWS para Kubernetes, fornecendo todo um ecossistema que reduz a fricção na adoção do Kubernetes, minimizando a complexidade operacional e facilitando o uso da ferramenta.
O ponto é que, embora você possa configurar e gerenciar Kubernetes por conta própria, essa é uma decisão questionável para a maioria dos projetos.
O Amazon ECS é uma alternativa ao Kubernetes?
O Amazon ECS (Elastic Container Service) não é exatamente uma alternativa direta ao Kubernetes, mas pode ser uma escolha mais prática em determinados cenários, principalmente se você quer um ambiente mais simples para executar containers sem a complexidade do Kubernetes.
Tanto o ECS quanto o EKS permitem rodar aplicações em container. A diferença é que o ECS é totalmente gerenciado pela AWS e não possui a camada de complexidade que o Kubernetes traz. Ele é otimizado para quem quer gerenciar containers de forma prática, mas não precisa de toda a flexibilidade e funcionalidade que o Kubernetes oferece.
O ECS é ideal para aplicações containerizadas e ambientes com menor complexidade ou para equipes que preferem não lidar com a arquitetura completa do Kubernetes. Ele ainda oferece integrações com outros serviços da AWS, facilitando a escala e a segurança sem a necessidade de grande conhecimento de infraestrutura.
AWS Lambda ou EKS?
Assim como o ECS, AWS Lambda e EKS têm propósitos diferentes, embora ambos possibilitem o uso de containers. O Lambda é uma plataforma serverless para executar funções, com algumas limitações, como um tempo máximo de execução de 15 minutos. O pagamento é apenas pelo tempo de execução. Dependendo da linguagem, o cold start pode ser um problema.
Enquanto o Lambda é ideal para tarefas simples e rápidas que podem ser acionadas por eventos e não requerem uma infraestrutura complexa, o EKS é voltado para cenários mais robustos.
O EKS é serverless?
Essencialmente, não. No entanto, o EKS oferece a opção de usar o AWS Fargate para nodes serverless. Com essa configuração, é possível escalar o cluster automaticamente sem a necessidade de provisionar e gerenciar uma EC2. Embora o Fargate elimine parte da complexidade de gerenciamento dos nodes, ainda é necessário configurar e manter o cluster Kubernetes em si.
Portanto, o "serverless" aqui se refere ao uso de Fargate como nodes sem servidor. Esse é um tópico um pouco mais avançado, mas uma vez que você entende o básico da arquitetura do Kubernetes, consegue entender a "mágica" do Fargate.
Já uso o EKS, faz sentido usar outros serviços de containers, como ECS e Lambda?
A resposta é: Depende. Se você está lidando com aplicações legadas que não foram preparadas para rodar em container, pode fazer sentido utilizar o Lambda, que permite rodar aplicações sem a necessidade de adaptar tudo para Docker. Já no caso do ECS não faz muito sentido, já que você precisa ter uma imagem docker.
Por outro lado, se suas aplicações já suportam containers, usar Lambda é uma decisão questionável. Você já paga pelo EKS e possui uma infraestrutura robusta para gerenciar containers, com controle centralizado e muitos recursos para escalabilidade. Neste caso, manter tudo no EKS é mais eficiente, evitando a fragmentação da sua infraestrutura e centralizando a gestão do ambiente em uma única plataforma.
Conclusão
A AWS oferece diversos serviços que suportam o uso de containers, cada um com propósitos e casos de uso específicos. Em geral, esses serviços buscam fornecer soluções mais simples e acessíveis, evitando a complexidade que o Kubernetes traz. Embora o Kubernetes seja extremamente poderoso e flexível, oferecendo tudo o que um projeto de grande escala pode precisar, ele nem sempre é a opção mais prática. Para muitas aplicações, pode ser uma solução mais complexa e cara do que o necessário — uma "bala de canhão para matar uma formiga".