Como provisionar um cluster de Kubernetes com Ritchie CLI?

Neste artigo você vai ver:

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.

Equivalência entre um script e uma fórmula do Ritchie CLI.

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

Logo do Ritchie CLI
  • 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.
Logos de Golang, Node JS e Shell.
  • Para execução REMOTA (flag –docker):
    Ter Docker instalado e rodando na máquina.
Logo do Docker.

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

Esquema visual do passo "CREATE GITHUB PROJECT" que usaria a fórmula "RIT GITHUB CREATE REPO".

2️⃣  FOLLOW PROJECT ON CIRCLECI

Esquema visual do passo "FOLLOW PROJECT ON CIRCLECI" que usaria a fórmula "RIT CIRCLECI FOLLOW PROJECT".

3️⃣  CREATE BUCKET ON AWS

Esquema visual do passo "CREATE BUCKET ON AWS" que usaria a fórmula "RIT AWS CREATE BUCKET".

4️⃣  GENERATE TERRAFORM PROJECT

Esquema visual do passo "GENERATE TERRAFORM PROJECT" que usaria a fórmula "RIT AWS GENERATE TERRAFORM-PROJECT".


5️⃣  ENTER TERRAFORM PROJECT FOLDER → cd / dir $projectName


6️⃣  ADD VPC CONFIGURATIONS

Esquema visual do passo "ADD VPC CONFIGURATIONS" que usaria a fórmula "RIT AWS ADD TERRAFORM-VPC".

7️⃣  ADD EKS CONFIGURATIONS

Esquema visual do passo "ADD EKS CONFIGURATIONS" que usaria a fórmula "RIT AWS ADD TERRAFORM-EKS".

8️⃣  CONFIGURE CIRCLECI ENVIRONMENT (QA branch) → (x2)

Esquema visual do passo "CONFIGURE CIRCLECI ENVIRONMENT" que usaria a fórmula "RIT CIRCLECI ADD ENV".

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

Objetivo para alcançar: Usar um comando do Ritchie CLI para realizar todas as configurações na AWS, no Github e no CircleCI, com o apoio do Terraform.

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:

Execução no terminal do comando rit aws create cluster informando todos os parâmetros de entrada necessários para realizar a automação.

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.

Pipeline do CircleCI com a aplicação das mudanças realizadas pelo projeto Terraform que foi configurado através da fórmula do Ritchie CLI.

Evidência do cluster EKS que foi configurado na AWS após a execução do pipeline do CircleCI.

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!

Capa do artigo Como provisionar um cluster de Kubernetes com Ritchie CLI?
foto Guillaume Falourd
Back-end Developer
Zupper tentando transformar o complexo em simples através de conteúdos diversificados, com intuito de impactar o mercado de TI e as pessoas ao seu redor da melhor forma possível.

Artigos relacionados

Capa do artigo sobre Docker, com um homem negro programando.
DevOps
Postado em:
Capa do artigo sobre Tech Radar, onde vemos 3 circulos, um dentro do outro, dando a ideia de aneis, no canto esquerdo. A imagem é toda na cor verde claro, mas é possível ver as sombras que formam os círculos..
Desenvolvimento
Postado em:

Este site utiliza cookies para proporcionar uma experiência de navegação melhor. Consulte nossa Política de Privacidade.