EKS— Workers EC2 ou Fargate?
Olá, neste post gostaria de levantar uma discussão bem interessante sobre orquestramento de pods com o Amazon EKS. Ao final desta publicação teremos alguns pontos de vista, e espero conseguir passar um pouco do pensamento “crítico” que devemos ter ao determinar qual abordagem escolher, afinal, entre EC2 e Fargate, qual e melhor?
Apresentação dos serviços:
Amazon EC2: Conhecido por ser nosso “servidor” na nuvem, o Elastic Compute Cloud (Amazon EC2) oferece uma capacidade de computação escalável, sem a necessidade de adivinhar seus recursos de infraestrutura, uma vez que podemos aumentar e diminuir sob-demanda de uma maneira simples é fácil. Tem um modelo de custo flexível, com varias opções de provisionamento, e atende a maioria dos casos de uso.
Amazon Fargate: A possibilidade de executar containers sem servidor e possível através do AWS Fargate. Com esta tecnologia, podemos focar apenas em nossos aplicativos, e não com a gerencia dos servidores nos quais eles ficarão hospedados.
Vantagens e Desvantagens:
Observação: A tabela acima fala em contexto geral sobre os serviços.
EC2 x Fargate, qual é o melhor para se trabalhar com EKS?
A resposta ideal para está dúvida, seria: DEPENDE. Afinal estamos falando sobre dois serviços extremamente bem arquitetados por parte da AWS, que oferecem um conjunto de benefícios ao cliente final. As EC2 por exemplo, permitem configurações personalizadas, e um modelo de custo variável, sendo que eu poderia trabalhar com instancias do tipo: SPOT, Reservadas, On-Demand, Hosts dedicados e etc. Para ambientes Kubernetes, onde a elasticidade e um fator fundamental, você ter a opção de trabalhar com múltiplos node groups, cada um com seu modelo de custo, e algo extremamente vantajoso dentro da AWS. Um exemplo simples seria:
1° Node Group com capacidade On-Demand ou Reservada, com foco em manter os drivers, softwares essenciais do ambiente (ingress controller, istio ou Prometheus por exemplo) e os pods do Sistema (namespace kube-system).
2° Node Group do tipo SPOT, para orquestrar e atender ao escalonamento repentino de solicitação aos aplicativos WEB de uma maneira rápida e de baixo custo.
Não só poderíamos trabalhar com estas estratégias, como também podemos pensar em configurações personalizadas, uma vez que com as EC2, nós somos os administradores dos workers.
Em contra partida, o uso do AWS Fargate elimina a necessidade de gerenciamento de servidores, sendo desenhado e disponibilizado para oferecer segurança e resiliência aos clientes da AWS. Um exemplo simples que poderíamos apresentar, e o seguinte:
1. Surge a necessidade de aumentar a capacidade do cluster.
2. Atender de maneira RÁPIDA aos acessos repentinos das solicitações.
3. Diminuir a sobrecarga operacional.
Com o Fargate conseguimos reduzir drasticamente o tempo de inicialização dos pods, uma vez que não existem servidores para serem disponibilizados, registrados ao cluster, e então estarem aptos a receber agendamentos (como funcionam as EC2). Não só isso, como também todo o trabalho de gerenciar instâncias já não e mais necessário.
Diante estas opções, uma das melhores alternativas que temos hoje dentro da nuvem e de trabalharmos com ambos JUNTOS. Enquanto as EC2 oferecem estabilidade e facilidade de personalização (podendo atender a recursos essenciais do cluster) o AWS Fargate pode trabalhar disponibilizando de maneira fácil e rápida os sistemas e aplicativos web, sem a necessidade de gerenciamento por parte dos times de Devops/Sysops sobre os servidores subjacentes. O modelo de custo se torna variável, uma vez que as EC2 têm várias opções de cobrança, e com o Fargate não há custos iniciais e você paga apenas pelos recursos que utilizar. Um único ponto negativo que temos ate o momento (28/05/2023) e que o Fargate SPOT não é compatível com o EKS.
Conclusão
Entendemos que a definição de MELHOR se torna bem relativo, pois o que podemos utilizar para definir as melhores ou piores opções, são nossos sistemas, necessidades, padrões existentes e etc. Uma forma “hibrida” de se trabalhar seria um excelente caminho, podendo então aproveitar o melhor que os dois mundos oferecem. As vantagens e desvantagens apresentadas aqui, também devem ser levadas em consideração, o Fargate e um excelente serviço, porém ainda existe uma incompatibilidade com vários recursos (Como DaemonSets ou a execução de containers “privilegiados”) e também tem suas restrições (só e possível ser disponibilizado em sub-redes privadas quando utilizado no EKS).
Alternativas e reflexões, são oque irão nos levar ao melhor caminho de acordo com nossa necessidade!
Refs:
