O blog da AWS

Boas práticas de utilização de instâncias Spot no Amazon EKS

Por Lucas Duarte, Arquiteto Especialista Containers AWS e
Vinicius Silva, Arquiteto de Soluções AWS

 

As instâncias spot do Amazon EC2 permitem aproveitar a capacidade não utilizada do EC2 na Nuvem AWS. Em comparação com a definição de preço sob demanda, as instâncias spot oferecem descontos de até 90%. Elas podem ser utilizadas para diversas aplicações sem estado (stateless), tolerantes a falhas e flexíveis como big data, cargas de trabalho de container, CI/CD, servidores Web, computação de alta performance (HPC) e cargas de trabalho de teste e desenvolvimento. Como as instâncias spot são integradas a outros serviços da AWS como Auto Scaling, EMR, ECS, CloudFormation, Data Pipeline e AWS Batch, você pode escolher como iniciar e manter as aplicações em execução nas instâncias spot.

Além disso, você pode combinar facilmente instâncias spot com instâncias sob demanda e estratégias de economia de reserva e de Savings Plans para otimizar ainda mais o custo e a performance dos workloads.

Neste blogpost abordaremos maneiras e boas práticas de utilização de instâncias Spot com o Amazon EKS, e como a utilização desse tipo de estratégia pode reduzir significativamente o custo dos Node Groups em descontos de até 90% se comparado com instâncias sob demanda.

 

Melhores práticas para a utilização no Amazon EKS

Para melhor utilização do Amazon EKS com instâncias Spot é necessário algumas configurações para que seja evitado o Downtime das aplicações que estão rodando no cluster.

Para definir quais tipos e famílias de instâncias devemos utilizar, o primeiro passo necessário é consultar o Spot Instance Advisor. O Spot Instance Advisor ajuda a determinar grupos com a menor chance de interrupção e oferece economias sobre as taxas sob demanda. Você deve ponderar a tolerância a interrupções do aplicativo e as metas de redução de custo quando seleciona uma instância spot. Quanto menor a taxa de interrupção, maior o período provável de execução das instâncias spot.

Dessa forma, logo abaixo, falaremos sobre algumas recomendações relevantes que devem ser consideradas em uma implementação de instâncias spot em um cluster do Amazon EKS seguindo as boas práticas:

  • Realizar um mix de capacidade, família de instâncias e zonas de disponibilidade disponíveis nos Node Groups do Amazon EKS através do que chamamos de Spot capacity pools, dessa maneira caso alguma instância seja interrompida pela AWS teremos mais opções de instâncias para selecionar e provisionar no lugar da que foi interrompida.
    • Você pode utilizar o EC2 instance selector para verificar quais instâncias tem a capacidade que você espera e montar o seu Spot capacity pool. Exemplo abaixo:
ec2-instance-selector --vcpus=4 --memory=16 --cpu-architecture=x86_64 —gpus=0 —burst-support=false
  • Devemos pensar em nós do cluster Amazon EKS como uma unidade de CPU e memória RAM, assim temos que pensar no total de vCPUs que temos em nosso cluster e não em cada instância individualmente. Com essa estratégia podemos nos planejar e criar o nosso Spot Capacity Pool.

Spot capacity pools = (Zonas de Disponibilidade) * (Tipos de Instância)

  • Utilizar AWS Node Termination Handler, esse projeto garante que o control plane do Amazon EKS responda apropriadamente para os eventos causados pela interrupção das instâncias EC2, fazendo a detecção via metadado das instâncias do cluster e procurando pelo sinal de terminatedas instâncias dos worker nodes que é fornecido 2 minutos antes pela AWS. Então são executados o Cordon que garante que novos Pods não serão alocados ao nó pelo Kube Scheduler, e o Drain para remover Pods do nó que será terminado.
  • Utilizar Cluster Autoscaler, essa aplicação detecta quando os Pods estão em Pending state, ou seja, precisam ser lançados e baseado na capacidade máxima do seu ASG, atualiza o valor desejado para um valor que consiga atender a necessidade dos Pods. Além disso, é importante fazer o deploy dessa aplicação em uma instância On-Demand utilizando nodeSelectore que não pode ser terminada pela AWS.
  • Existem cenários onde clientes desejam que somente as instâncias Spot sejam escaladas para reduzir o custo, para que isso ocorra podemos criar dois node groups, um com as instâncias Spot e outro com instâncias on-demand. No node group on-demand podemos definir os valores de mínimo, máximo e desejado de instâncias, para evitar assim que o Cluster Autoscaler inicie novas instâncias nesse grupo e suba novas instâncias no node group É possível também mudar a operação de escalabilidade alterando a configuração do expander no manifesto do Cluster Autoscaler.
  • Utilizar o AWS Managed Node Groups. Atualmente o Managed Node Groups já suporta a utilização de instâncias Spot, consulte aqui.
  • Para workloads que precisem ser lançados em instâncias específicas ou que não são resilientes ao ponto de se recuperar de falhas (ex: workloads stateful) podemos então utilizar em nosso manifesto da aplicação um nodeSelector baseado na característica da instância, se é Spot ou On-Demand.

 

Solução desenvolvida por parceiros AWS

O Spot.io é um parceiro de tecnologia avançada da AWS Partner Network (APN) com competências da AWS em contêineres e ferramentas de gerenciamento de nuvem. O Spot.io ajuda os clientes a economizar em seus custos de computação da AWS, aproveitando as instâncias spot do Amazon EC2 com facilidade e confiança.

O Spot Ocean, serviço oferecido pelo parceiro, é um serviço de escalabilidade de aplicativos. Semelhante aos grupos de Auto Scaling do Amazon EC2, o Spot Ocean se destina a otimizar o desempenho e os custos, aproveitando Instâncias spot combinadas com instâncias reservadas e sob demanda. Ele simplifica o gerenciamento, o dimensionamento e a operação de clusters do Kubernetes e reduz os custos em até 80% ao provisionar instâncias spot para executar sua carga de trabalho.

O Spot Ocean garante automaticamente que seus containers sejam colocados na melhor combinação possível de instâncias spot, reservadas e sob demanda. Isso ajuda a otimizar o custo, disponibilidade e desempenho de seus clusters do Amazon EKS.

Você pode fazer isso sem o overhead de gerenciar eventos de escalabilidade, escolher tamanhos de instância corretos e, assim, utilizar suas instâncias reservadas, sob demanda e spot de uma maneira ideal que reduz seus gastos em até 80%.

 

Conclusão

Neste blogpost abordamos a utilização de instâncias spot em conjunto com Amazon EKS, e como foi falado a adoção de instâncias Spot pode reduzir significativamente o custo dos node groups do nosso cluster tendo uma economia de até 90% se comparado com instâncias on-demand. Para que possamos construir ambientes resilientes a falhas utilizando spot é importante ficar atento a algumas configurações e ter a previsibilidade de cenários que podem ocorrer caso a instância seja terminada.

Seguindo as boas práticas mencionadas, é possível retirar o máximo da experiência de um ambiente misto entre instâncias Spot e instâncias On-demand de forma a balancear custo, disponibilidade e escalabilidade.

Além disso podemos considerar uma solução de parceiro como o Spot Ocean para diminuir o overhead de gerenciamento das instâncias dos tipos spot, reservadas e on-demand do cluster do Amazon EKS, dessa maneira é possível focar no desenvolvimento das aplicações e ainda ter uma otimização de custo interessante ao negócio.

 

Referências

https://aws.amazon.com/blogs/compute/cost-optimization-and-resilience-eks-with-spot-instances/

https://aws.amazon.com/blogs/containers/amazon-eks-now-supports-provisioning-and-managing-ec2-spot-instances-in-managed-node-groups/

https://aws.amazon.com/pt/quickstart/architecture/spotinst-ocean-eks/

https://aws.amazon.com/pt/blogs/apn/running-applications-on-amazon-eks-using-amazon-ec2-spot-instances-with-spotinst-ocean/

 

 


Sobre os autores

Lucas Duarte é um Arquiteto Especialista em Containers na AWS com focos em clientes LATAM. Entusiasta de automação, Cloud, e cultura DevOps. Com experiência prévia em projetos focados nesse segmento em empresas como IFood, Guiabolso e Mandic. Tem trabalhado em diferentes projetos relacionados principalmente a orquestração de containers e microsserviços.

 

 

 

Vinicius Silva é um arquiteto de Soluções na AWS e apoia clientes do setor de energia e utilidades a atingirem seus objetivos com a nuvem da AWS. Interessado em desenvolvimento e na cultura DevOps, possui contribuições anteriores no desenvolvimento de plataformas web distribuídas e escaláveis.