BLOG

Kubernetes para iniciantes — 2 empacotando e administrando seu Cluster


Helm e Skaffold 😉

Continuando nossa série sobre Kubernetes para iniciantes, neste artigo daremos mais um step para o entendimento do processo de criação do nosso ambiente e hoje falarei de duas ferramentas que serão essenciais para automatizar e otimizar nosso processo.

Como acordo, para continuar a leitura desse artigo, peço para que vocês já tenham alguns conceitos sólidos na cabeça, como:

Caso você não conheça nenhum desses pontos e tem interesse em se aprofundar em cada detalhe, façam a Kube.Academy que é grátis!

Para esse artigo, levarei como base o repositório que disponibilizei com todos arquivos que iremos citar aqui no artigo.

GitHub – toolbox-devops/k8-beginner: Kubernetes’ para iniciantes
Kubernetes’ para iniciantes. Contribute to toolbox-devops/k8-beginner development by creating an account on GitHub.github.com

HELM

https://helm.sh/

A ferramenta Helm é responsável por administrar a parte de versionamento, distribuição e publicação de um deploy através do seu sistema de empacotamento.

Para iniciar a ferramenta, devemos executar o seguinte comando

helm create k8-helm

Ao executar, veremos que a seguinte estrutura será criada para nosso diretório. Neste momento, não iremos utilizar todos os arquivos criados, então manteremos apenas os arquivos deployment, service, Chart e values.

Agora iremos para a melhor parte sobre a ferramenta. Dentro da pasta templates, teremos os arquivos de deploy e service utilizados no artigo passado e dentro de cada um, iremos trocar alguns valores que estão como hardcoded para variáveis, tornando assim nosso deploy mais flexível.

deployment e service customizados

E de onde esses valores das variáveis virão ?

O que tiver com o nome .Values. na frente, virá do arquivo values.yaml de nosso repositório, já os valores de .Chart. virá do arquivo Chart.yaml, por ultimo e não menos importante, a variável .Release. será criada pelo próprio Helm quando executarmos a ferramenta.

Agora, testaremos se a ferramenta criará nossos manifestos da forma correta. É muito importante ressaltar, que ao executarmos o helm install com a opção –dry-try , a ferramenta não fará deploy dos Pods.

Olhem, nossa release version criada automaticamente!

E agora, faremos o deploy de nossos recursos

Done! todos os recursos publicados conforme solicitado!

Xi! O deploy foi errado, como eu atualizo ?

Para isso, basta efetuar as mudanças necessárias nos arquivos, no meu caso, trocarei a quantidade de Pods para 5 replicas.

Se atentem pelo fato que para efetuarmos um upgrade, precisamos apontar para qual release que iremos efetuar a operação, para esse exemplo a release é k8-helm-1586639558 e a sua será durante seus testes pode ser outra ;).

Upgrade realizado!
5 replicas atualizadas 🙂

Caso você se arrependa da atualização, você poderá executar o comando de rollback para desfazer qualquer atualização. E para o nosso caso, ao executar, perceberemos que nosso Cluster eliminará os 3 Pods criados a mais.

Lá se vão os Pods!

E por ultimo, podemos criar um pacote da nossa release com o comando abaixo. A versão do nosso pacote será determinada pelo valor do atributo version do arquivo Chart.yaml.

SKAFFOLD

https://skaffold.dev/

Suas principais features são, automação do processo de build, push e deploys, simplifica a obtenção dos logs dos Pods, utilizada para Clusters locais e remotos e principalmente facilita o processo com o modo declarativo de desenvolvimento.

Para iniciar nosso passo, dentro do repositório, entre na pasta k8-skaffold, para iniciar o Skaffold em usaremos o comando listado abaixo, que configurará o arquivo skaffold.yaml com as configurações que foram mostradas.

Logo após, rodaremos o comando skaffold dev para começar o processo da ferramenta, que fará um build do Dockerfile e depois criará os Pods.

Notem que dentro do arquivo skaffold.yaml, a imagem Docker está sem tag e isso acontece por que durante o processo, ele mesmo cria uma nova tag para esse processo ( na segunda imagem, você pode identificar como 48f34lf-dirty ). Além disso, Skaffold ainda apresenta pra nós o output de cada container no logo, neste caso, coloquei uma simples mensagem de Server Started On Port 3000.

Mudanças em realtime

Agora, vimos que 2 Pods não seriam suficientes para nossa aplicação e decidimos então aumentar para 5 replicas. Para isso, sem encerrar o processo do Skaffold, edite o arquivo de deployment, aumentando as replicas para 5 e olhe novamente para o output da ferramenta.

Vimos que a ferramenta identificou a mudança do arquivo, e solicitou mais 3 Pods, nisso, podemos notar a criação dos mesmos pelo output e pela mensagem padrão que foi apresentada mais 3 vezes.

E se eu alterar o código fonte?

Dentro de k8-skaffold/src/app/index.js, sem encerrar o processo do Skaffold, alterei a mensagem padrão da aplicação para Server Started On Port 3000 — SKAFFOLD TESTE.

Skaffold notou a mudança e alterou nossas 5 réplicas.

Testando nosso Cluster

Agora para testar nosso Cluster com os Pods, iremos rodar o mesmo comando com a flag de sinalização de portas: skaffold dev –foward-port.

Pelo log, vimos que nosso Cluster está direcionando a porta 3000, agora é só acessar pelo navegador nossa aplicação pelo endereço http://localhost:3000/Teste.

Usando as duas ferramentas

Para utilizar a ferramenta HELM junto com Skaffold, é preciso que seja efetuada a seguinte alteração no arquivo skaffol.yaml conforme o exemplo em k8-skaffold/skaffold_helm.yamldeploy:
helm:
releases:
– name: skaffold-helm
chartPath: k8-helm
values:
image: thihenos/docker-node
valuesFiles:
– k8-helm/values.yaml

Podemos também utilizar o Skaffold junto com a ferramenta Kustomize que falamos anteriormente, basta acompanhar a documentação.

Conclusão

Para o artigo não ficar muito extenso, terminei a segunda parte aqui e prosseguirei com os próximos capítulos aprofundando mais sobre as práticas de Kubernetes.


Tem interesse em aprender mais sobre? Entre em contato conosco ❤️!

Toolbox Devops Consultoria

Toolbox Devops Consultoria

Simplicando seu dia-a-dia na cloud

Esta gostando do conteúdo ? Compartilhe!