Trabalhar com Cluster no Kubernetes demanda tempo e esforço. E, pensando em como automatizar esse processo, usei o Ritchie CLI que, através de linhas de comando, permitiu que esse processo fosse feito em minutos.
Quer conhecer esse tutorial em detalhes e aumentar a sua produtividade? Então continue lendo!
Recapitulando: Kubernetes e Cluster
Kubernetes é um sistema de orquestração de contêineres open source que automatiza a implantação, o dimensionamento e a gestão de aplicações em contêineres. Os objetos do Kubernetes que representam seus aplicativos em contêiner são todos executados em um cluster.
Um Cluster define uma arquitetura de sistema capaz de combinar vários computadores para trabalharem em conjunto, ou pode denominar o grupo em si de computadores combinados.
Afinal, o que é o Ritchie CLI?
O Ritchie CLI é um projeto open source criado e mantido pela Zup que permite criar, armazenar e compartilhar qualquer tipo de automação, executando ela a partir de linhas de comando, ou CLI.
O intuito é permitir que profissionais possam customizar a ferramenta através de comandos e, assim, manipular ferramentas que costumam usar no dia a dia para realizar diversos tipos de tarefas. O objetivo é reduzir os chamados toils, ou seja, tarefas manuais, repetitivas e que não agregam muito valor de negócio.
Para isso, é possível você adequar scripts existentes para a estrutura do Ritchie CLI ou criar novas automações do zero. Essas automações iniciadas por linhas de comando são chamadas (dentro do contexto da ferramenta) de fórmulas e têm a vantagem de deixar bastante flexibilidade ao usuário para desenvolver a tarefa que deseja executar.
Outra vantagem é que é possível agrupar fórmulas, ou seja, criar várias pequenas fórmulas realizando várias operações simples e juntá-las numa só para realizar uma operação mais complexa. Dessa maneira, é possível reunir várias ferramentas em um lugar só.
É justamente esse comportamento que eu vou apresentar para vocês nos parágrafos abaixo, explicando passo a passo como consegui provisionar um Cluster do Kubernetes de maneira simples e rápida usando o Ritchie CLI. Isso, apesar de vir da área de desenvolvimento Back End Java e de nunca ter atuado com AWS, Terraform ou CircleCI antes.
Premissas para este tutorial
- Ter Ritchie CLI instalado (ritchiecli.io).
- Importar o repositório de fórmulas (comando rit add repo)
https://github.com/GuillaumeFalourd/formulas-aws (com prioridade 0).
- Ter contas no Github, na AWS e no CircleCI (precisará de credenciais de acesso).
- Para execução LOCAL:
Ter Golang, Node e Shell instalado na máquina.
- Para execução REMOTA (flag –docker):
Ter Docker instalado e rodando na máquina.
Contexto
No repositório de fórmulas “commons” (criadas pela Zup usando diversas ferramentas), existem fórmulas que permitem interagir com AWS para manipular buckets, projetos Terraform, VPC e, então, EKS.
Em paralelo, foram criadas algumas fórmulas interagindo com Github APIs, assim como o CircleCI.
Na prática, isso significa que a estrutura do Ritchie já tinha todas as fórmulas necessárias para conseguir provisionar um Cluster, usando Infrastructure as Code (IaC). A diferença é que isso só era realizado a partir da execução de vários comandos, que tinham que rodar em diversas pastas para dar certo.
Além disso, um ponto que observei durante meus testes executando esses comandos em sequência é que as configurações das fórmulas criando o projeto Terraform pegavam sempre as últimas versões dos providers necessários para construir o ambiente. Isso começou a dar problema à medida que novas versões incompatíveis entre os providers começaram a ser liberadas.
Consequentemente, foi necessário duplicar as fórmulas existentes e fazer alguns ajustes para que fosse possível configurar tudo corretamente sem precisar fazer ajustes manuais no projeto Terraform depois.
O passo a passo
Realizando todo o processo através de vários comandos, teria que seguir a seguinte lógica:
1️⃣ CREATE GITHUB PROJECT
2️⃣ FOLLOW PROJECT ON CIRCLECI
3️⃣ CREATE BUCKET ON AWS
4️⃣ GENERATE TERRAFORM PROJECT
5️⃣ ENTER TERRAFORM PROJECT FOLDER → cd / dir $projectName
6️⃣ ADD VPC CONFIGURATIONS
7️⃣ ADD EKS CONFIGURATIONS
8️⃣ CONFIGURE CIRCLECI ENVIRONMENT (QA branch) → (x2)
9️⃣ COMMIT PROJECT ON GITHUB (QA branch) → git operations
Observação: todas essas fórmulas estão implementadas no repositório https://github.com/ZupIT/ritchie-formulas importado nas premissas.
Nada muito complexo, mas como cada fórmulas possui vários parâmetros de entrada, existem alguns riscos que é sempre bom evitar, tais como:
- Necessário informar alguns parâmetros de entrada mais de uma vez e tinham que ser idênticos.
- Necessário executar esses comandos numa ordem bem específica para dar certo (em particular, a navegação entre as pastas).
Unificando os comandos
Depois de concluir a etapa anterior, foi necessário duplicar algumas fórmulas existentes e fazer ajustes na implementação delas para permitir configurar tudo corretamente e, assim, evitar alguns ajustes manuais no projeto Terraform posteriormente.
Em seguida, foi necessário avaliar como executar esses comandos em sequência numa implementação. Nisso, observei que Python e Shell Script eram as linguagens mais fáceis de usar para realizar esse tipo de operação.
Faltava, então, passar os parâmetros de entrada diretamente na linha de comando, pois o método de execução default do Ritchie CLI é usando prompt (interagindo com o terminal). Eu queria evitar reinformar as mesmas entradas mais de uma vez, para agilizar a operação e permitir apenas uma interação do usuário no início para executar todo o workflow.
Felizmente, no Ritchie CLI existe um meio de passar as entradas via Standard Inputs. Isso funciona passando um JSON com os valores associados a cada parâmetro de entrada de uma fórmula, conforme o nome de variável, que foi usado na implementação da fórmula para esse campo.
Pronto, eu tinha todas as informações necessárias para iniciar uma nova fórmula agrupando as fórmulas existentes.
No final, decidi usar a linguagem Shell Script, pois achei a implementação mais elegante que Python. Porém, isso necessitou criar a implementação em Batch também para ser compatível com Windows (Python não teria dado esse trabalho).
Criei, então, meu comando RIT AWS CREATE CLUSTER executando uma fórmula realizando todas as operações do passo a passo que comentei acima uma atrás das outras.
Esse comando funcionária localmente via prompt da seguinte forma:
Considerações sobre o processo de provisionar um cluster de Kubernetes com Ritchie
Esse comando executa o passo a passo de maneira muito mais rápida e segura que o processo manual.
Entre o momento da execução do comando até a criação do cluster, passou menos de 15 minutos (conforme as imagens abaixo), o que agiliza – e muito – esse processo de criação que pode levar horas ou até dias, às vezes, dependendo da situação.
Pontos de atenção:
- As fórmulas que aproveitei criam e configuram o Terraform seguindo alguns templates específicos (com versões e providers pré-configurados).
- É possível ter mais flexibilidade na criação e na configuração do Terraform através dos parâmetros de entrada e da implementação das fórmulas. Aqui foi bem básico e tem como configurar muito mais elementos através da automação de acordo com as necessidades do usuário.
- Seria possível criar o mesmo tipo de automação com Azure ou GCP sem problemas e até criar uma fórmula agrupando todas elas (ter várias camadas de fórmulas).
Exemplo: um comando rit create cluster chamando uma fórmula que poderia funcionar para AWS, AZURE ou GCP na mesma implementação. - Vale a pena refletir sobre a linguagem usada para desenvolver a(s) fórmula(s). Isso, pois dependendo da escolha, a verbosidade e a complexidade da implementação pode mudar bastante.
Dica: Avalie o que deseja fazer antes de escolher a linguagem para escolher aquela que tornará a implementação a mais fácil de escrever e manter.
Conclusão
O ganho de tempo que o Ritchie CLI proporcionou através dessa fórmula foi absurdo, além de deixar algumas configurações personalizáveis pelo usuário.
Você pode encontrar um exemplo de projeto criado usando essa fórmula aqui: https://github.com/GuillaumeFalourd/ritchie-demo-create-cluster
A ferramenta traz também a vantagem de permitir às pessoas com menos domínio de alguma ferramenta executar operações que custariam (ou demorariam) a executar sozinhas, sem apoio de profissionais de outras áreas. E isso sem precisar se preocupar com dependências de bibliotecas ou linguagens, pois tudo pode ser executado dentro de um container do Docker.
No final, podemos considerar que as fórmulas são uma boa maneira não apenas de compartilhar conhecimento, mas também de delegar a execução de algumas tarefas ou operações.
Isso pode economizar bastante tempo quando falamos de SLA na área de resolução de incidentes ou até ajudar profissionais em nível mais junior a usar novas ferramentas de maneira mais controlada e até dominar em detalhes como elas funcionam.
Ah, temos esse tutorial em vídeo também:
Quer saber mais sobre clusters, containers e kubernetes? Então se inscreva na Newsletter da ZUP hoje mesmo!