Escrito por Giovanna Gadelha e Willian de Vargas,

7 minutos de leitura

Explorando o orquestrador de containers da AWS – EKS

O EKS oferece o gerenciamento do Kubernetes na AWS, facilitando toda a parte operacional da ferramenta em um ambiente cloud.

Compartilhe este post:

No artigo anterior, discutimos sobre as vantagens que o uso da conteinerização nos traz. A partir disso, ao explorar o universo da conteinerização e estudar sobre os orquestradores de containers, encontramos diversos outros sistemas importantes e conhecidos no mercado.

Por esse motivo, não poderíamos deixar de investigar outras ferramentas e entender como elas podem se integrar com os serviços que a nuvem oferece. O objetivo deste artigo é descrever o conceito dos sistemas de orquestração de containers com foco principal no Kubernetes. Além disso, iremos apresentar o Amazon Elastic Kubernetes Service (EKS) e demonstrar uma prova de conceito, para uma compreensão geral, do funcionamento desses recursos.

 

O que é um sistema de orquestração de containers?

Em um contexto de produção, há uma alta complexidade de sistemas rodando que na maioria dos casos precisam ter o mínimo de downtime por falhas possível. Como já discutido, o uso de containers são essenciais para uma grande demanda de serviços, devido a sua arquitetura. Com isso, quando falamos de cenários que usam essa tecnologia é necessário entender que há uma ferramenta que automatiza o gerenciamento, a implantação e a escala de múltiplos contêineres. Essas ferramentas, justamente por desempenharem esse papel, são conhecidas como orquestradores de containers. Suas principais funções são: gerenciar volumes e rede e cuidar do ciclo de vida dos containers. Esse conceito se relaciona diretamente com a cultura DevOps, muito difundida na maioria das empresas atualmente, pois a partir dessas ferramentas as equipes podem integrar fluxos de trabalho CI/CD e além de aumentar a performance dos serviços, todo o processo torna-se automatizado.

 

Kubernetes

Uma das principais tecnologias de orquestração de containers é o Kubernetes, plataforma open source, criada pela Google que automatiza todas as tarefas de gerenciamento de uma rede de containers. A popularidade do Kubernetes se deve ao fato da alta indicação do uso dele em arquiteturas cloud, ele é capaz de otimizar o processo e possui diversas vantagens como o controle e implantação de atualizações, gerenciamento dos serviços, escala ágil das aplicações em containers e a potencialização dos recursos de hardware necessários, gerando um melhor aproveitamento. Assim, podemos entender que o Kubernetes é uma plataforma altamente declarativa, ou seja, o comportamento de uma aplicação ou sistema é totalmente controlado pela equipe responsável, enquanto que a execução é por conta do Kubernetes.

 

O que é o AWS EKS?

O Amazon Elastic Kubernetes Service (EKS) funciona como um serviço de Kubernetes gerenciado. Isso significa que a partir dele, é possível executar o Kubernetes no ambiente da AWS sem precisar se preocupar com a instalação, operação e manutenção do plano de controle do Kubernetes. O EKS proporciona diversos benefícios como a integração com outros serviços, além disso o gerenciamento dos clusters pode ser feito utilizando o AWS Fargate, abordagem serverless para containers. Em seguida iremos demonstrar os conceitos dos recursos envolvidos em uma construção básica de um ambiente no EKS.

 

+++ Amazon Elastic Container Registry (ECR)

No artigo anterior, abordamos sobre o ECS e também sobre o Amazon Elastic Container Registry, ECR. Portanto, apenas para relembrar, utilizamos o ECR como repositório das imagens de container totalmente gerenciadas pela AWS.

+++ Cluster
E já sabemos o conceito de um Cluster, agrupamento lógico de tarefas e serviços. Para esse exercício prático também será necessário criar um cluster, por isso é importante sabermos o porquê utilizamos ele.

+++ Node Group
E como novidade, temos o Node Group, que é um objeto que representa um grupo de nós gerenciados pela Amazon EKS. Após a criação do cluster, é necessário a criação de um Node Group gerenciado para o cluster EKS. O Node Group nada mais é do que a união de um grupo do Amazon EC2 Auto Scaling e de instâncias associadas do Amazon EC2, gerenciadas pela AWS.

 

Mão na massa

Nesta demonstração, iremos reproduzir o deploy da mesma aplicação do nosso último artigo, que realiza consultas no Twitter a cada 15 minutos em busca de tweets com a hashtag “#AWS”, gerando um arquivo .csv com estes tweets e salvando-o em um bucket na S3.

 

1º Criando um bucket na S3

Primeiramente, é necessário criarmos um bucket no S3 para salvarmos nossos arquivos .csv. Caso você tenha colocado as mãos na massa no nosso último artigo (aquele sobre ECS), você pode pular este passo. Caso contrário, siga as instruções abaixo.

+++ Acesse o serviço S3 no painel da AWS;
+++ Clique em “Create Bucket”;
+++ Insira um nome para o bucket;
+++ Insira suas Tags (passo opcional);
+++ Clique em “Create bucket” no final da página.

 

2º Clonando o repositório com os códigos fonte necessários

+++ Faça um clone do repositório do projeto;
+++ Leia e execute as instruções do README.md presentes no diretório “EKS”.

 

3º Criando um novo repositório ECR

+++ No painel AWS, procure pelo serviço “Elastic Container Repository” e entre nele;
+++ Clique em “Create repository”;

 

+++ Preencha o nome do repositório e em seguida clique em “Create repository”, no fim da página;
+++ Seu repositório deverá aparecer listado, conforme a imagem abaixo.

 

4º Subindo a imagem Docker para o seu repositório

+++ Clique sobre o nome do repositório criado no passo anterior;
+++ Ao adentrar seu repositório, clique em “View push commands”, no canto superior direito da tela;
+++ Na janela que abrir, você vai encontrar 4 linhas de comando (os push commands para o repositório), das quais você deverá reproduzir no mesmo diretório que o Dockerfile se encontra;
+++ Após a execução das 4 linhas de comando, sua imagem deverá aparecer listada no repositório, como na imagem abaixo:

 

5º Preparando o ambiente

Antes de mais nada, precisamos cumprir alguns pré-requisitos para realizarmos os próximos passos:

+++ Kubectl: Se trata de uma ferramenta que realiza a comunicação entre o Cluster Kubernetes e a máquina local.


+++
AWS CLI: Ferramenta utilizada para realizar comandos relacionado às configurações da AWS.


+++
eksctl: Ferramenta CLI oficial para AWS EKS.

 

 

6º Criando um Cluster

+++ No painel AWS, procure pelo serviço “Elastic Kubernetes Service” e entre nele;
+++ Clique em “Add Cluster”

 

+++ Preenchendo as configurações:

  • Step 1: Configure Cluster:
    • Name: twitterApp-cluster
    • Kubernetes version: 1.21
    • Cluster Service Role:
      • Selecione a Role AWS-EKS-ROLE, com permissões para criar Clusters no EKS.
    • Clique em “Next”
  • em Step 2 e Step 3 não modifique nada
  • Step 4: Revise as informações e clique em “Create”.

 

7º Criando um Node Group

+++ Entre no cluster criado no passo anterior e clique na aba “Configuration”;
+++ Desça um pouco a página e clique na aba “Compute”;
+++ Clique em “Add Node Group”;

 

+++ Preenchendo as configurações:

  • Step 1: Configure Node Group
    • Name: twitter-app-ng
    • Node IAM Role:
      • Aqui, devemos criar uma nova role. Para isso, clique no link IAM console.
      • Na página das Roles, clique em “Create role”
        • Create role passo 1:
          • Select type of trusted entity: AWS service
          • Choose a use case: EC2
          • Clique em “Next: Permissions”
        • Create role passo 2:
          • Na caixa de busca “Filter policies”, busque e marque as seguintes políticas:
            • AmazonEKSClusterPolicy
            • AmazonEKSWorkerNodePolicy
            • AmazonEC2ContainerRegistryReadOnly
            • AmazonEKS_CNI_Policy
          • Clique em “Next: Tags”
        • Create role passo 3:
          • Insira as tags que desejar (passo opcional)
        • Create role passo 4:
          • Revise as informações e informe um nome para esta role
          • Clique em “Create role”
      • Após criar a Role, volte à página de criação de Node Group e selecione a role no Dropdown (pode ser necessário clicar no botão de reload ao lado do campo).
    • Clique em “Next”.

 

  • Step 2: Set compute and scaling configuration
    • AMI type: Amazon Linux 2 (AL2_x86_64)
    • Capacity type: On-Demand
    • Instance types: t3.medium
    • Disk size: 20 GiB
    • Node Group scaling configuration
      • Minimum size: 2 nodes
      • Maximum size: 2 nodes
      • Desired size: 2 nodes
    • Node Group update configuration
      • Maximum unavailable: Number
      • Value: 1 node

 

  • Step 3: Não altere nada neste passo e clique em “Next”
  • Step 4: Revise as configurações e clique em “Create”

 

8º Atualizando os detalhes de configuração do aws eks

Agora, deveremos atualizar os detalhes de configuração do aws eks via linha de comando. Para isso, reproduza a linha de comando abaixo:

aws eks --region us-east-2 update-kubeconfig --name twitterApp-cluster

Obs.: Certifique-se de informar a região e nome do cluster corretos.

 

9º Realizando o deploy

+++ Renomeie o arquivo [EDIT]deploy.yaml e altere a linha 18 que contém (image: URI_DA_IMAGEM_DO_ECR) substituindo pela URI da imagem que subimos para o ECR no 4º passo.

  • Para obter a URI da imagem, volte ao repositório que você criou e clique em “Copy URI”, que aparece na imagem com a “Image tag” definida como “latest”.

 

+++ Após realizar a edição do arquivo, que agora se chama deploy.yaml, reproduza a linha de comando abaixo:

kubectl apply -f deploy.yaml

 

+++ Você pode verificar o status do seu deploy com a linha de comando abaixo:

kubectl get deployment

 

  • Você deverá ver a seguinte saída:

10º Conferindo o sucesso da execução

Para confirmar o sucesso da execução, você deverá entrar no bucket criado no 1º passo e encontrar um ou mais arquivos .csv lá dentro.

 

11º Removendo os recursos criados

Para evitar cobranças desnecessárias, você pode remover os recursos criados após a execução deste tutorial.

+++ Removendo o deploy:

  • Execute a linha de comando:
kubectl delete -f deploy.yaml

 

+++ Deletando o Node Group:

  • De volta à página do Cluster que você criou, clique na aba “Configuration”, desça um pouco a página e clique na aba “Compute”;
  • Clique sobre o nome do seu Node Group;
  • No canto superior direito, clique em “Delete”;
  • Digite o nome do Node Group e clique em “Delete”.

 

+++ Deletando o Cluster:

  • De volta à página do Cluster criado, no canto superior direito clique em “Delete Cluster”;
  • Digite o nome do Cluster e clique em “Delete”.

 

Conclusão

A partir da compreensão dos conceitos de orquestração de containers, foi possível entender não só a importância dos containers em cenários de produção mas também das ferramentas que gerenciam os mesmos. Quando pensamos no uso dessa poderosa tecnologia, estamos nos referindo a várias aplicações e sistemas complexos que precisam estar em pleno funcionamento. Por isso, as ferramentas de orquestração de containers são imprescindíveis nos dias de hoje, em união com os ambientes cloud. O EKS, portanto, oferece o gerenciamento do Kubernetes na AWS, facilitando toda a parte operacional dessa ferramenta em um ambiente cloud, com isso se garante benefícios ao utilizar um serviço gerenciado. No próximo e último artigo da série, iremos demonstrar o GKE, serviço cloud atrelado ao Kubernetes da Google Cloud Platform.

Caso queira conhecer um pouco mais sobre o EKS, consulte a documentação oficial da AWS.

Compartilhe este post: