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:
- Containers
- Docker
- Conceitos básicos de Kubernetes: Pods, Deployments e Clusters
- Terem lido meu primeiro artigo sobre K8
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
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.
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.
E agora, faremos o deploy de nossos recursos
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 ;).
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.
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
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 ❤️!