7 minutos de leitura
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.
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.
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 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.
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.
+++ Faça um clone do repositório do projeto;
+++ Leia e execute as instruções do README.md presentes no diretório “EKS”.
+++ 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.
+++ 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:
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.
+++ No painel AWS, procure pelo serviço “Elastic Kubernetes Service” e entre nele;
+++ Clique em “Add Cluster”
+++ Preenchendo as configurações:
+++ 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:
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.
+++ 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.
+++ 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
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.
Para evitar cobranças desnecessárias, você pode remover os recursos criados após a execução deste tutorial.
+++ Removendo o deploy:
kubectl delete -f deploy.yaml
+++ Deletando o Node Group:
+++ Deletando o Cluster:
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.