Descubra como o Skaffold pode otimizar seu trabalho com Kubernetes

Descubra como o Skaffold pode otimizar seu trabalho com Kubernetes

Olá pessoal!
A ideia para este post surgiu quando me deparei com o problema, que todos que trabalham ou vão trabalhar com Kubernetes enfrentam: a necessidade de a cada simples mudança no código da sua aplicação, ter que compilar uma nova imagem, fazer um push para um repositório e reaplicar o objeto no Kubernetes para que a alteração seja refletida.
Nessa árdua batalha do dia a dia, conheci uma poderosa ferramenta chamada Skaffold [1]. Ela não só automatiza o processo de build e deploy de uma aplicação no cluster Kubernetes, mas consegue ir além, sendo capaz de monitorar cada nova mudança no código e realizar todo o trabalho automaticamente para você, sem que seja preciso realizar nenhuma ação adicional.
Com isso em mente, você apenas se preocupa em programar sua aplicação e toda a alteração que o código receber vai se refletir automaticamente no cluster Kubernetes em poucos segundos, como se você tivesse um pipeline configurado localmente.
O Skaffold serve tanto para  uso remotamente em algum Cloud Provider, quanto localmente utilizando um Minikube ou o Kind.
Para este tutorial, escolhemos o Kind, porque ele realmente consegue simular um cluster local, executando contêineres como se fossem os nós do cluster e o control plane.
Com o Kind, podemos de fato utilizar todos os recursos que usaríamos em um cluster real, com a diferença que a memória e a cpu estarão limitados aos da sua máquina local.
Como o artigo ficou grande, trarei uma série sobre o assunto, abordando mais a fundo as incríveis funcionalidades dessa ferramenta.

 

Mão na massa

A primeira coisa que precisamos fazer, é instalar as ferramentas necessárias, deixando claro que, para este tutorial, não vou definir a instalação de itens básicos que considero como pré-requisitos, levando em conta que estamos partindo da premissa de que essa ferramenta será usada em conjunto com o Kubernetes, e que você deverá obrigatoriamente ter o Docker e o kubectl instalados, além de ter uma conta no dockerhub para fazer o push da sua imagem para o registry.
Vamos precisar instalar:
  • Kind
  • Skaffold

Instalando o Kind

Como dito anteriormente, o Kind será usado para simular um cluster Kubernetes localmente, permitindo criar um ambiente de desenvolvimento completo e fiel ao usado no cluster real.
O site oficial do kind é https://kind.sigs.k8s.io/
Para instalar o Kind, devemos apenas baixar o código binário e colocar no PATH da nossa máquina, que é uma distribuição Linux, é claro =).
Fácil assim…
Importante: neste caso, foi utilizada a versão 0.8.1 que era a última versão estável na época do desenvolvimento deste tutorial. Escolha a versão correta no momento em que for realizar o download.
Teste se a ferramenta executou corretamente com o comando:

Instalado com sucesso!

Instalando o Skaffold

Para instalar o Skaffold, adivinha? Basta fazer o download do binário e colocá-lo no PATH também… Esse negócio de GO é bom mesmo heim! 😉
A página do Skaffold é  https://skaffold.dev
Importante: a versão usada neste exemplo foi a 1.15.0, procure a versão correta no momento do donwload.
Teste com o comando abaixo:

Configurando o cluster local

Agora que temos as ferramentas, precisamos criar nosso cluster local, que vai subir contêineres docker para simular nós do nosso cluster.
Para criar um cluster simples, basta passar o comando:
Por padrão ele vai criar um cluster com o nome de Kind. Se quiser passar um nome diferente, deverá colocar a flag –name e informar o nome desejado, desta forma:
Ele vai cuidar de instalar todos os itens necessários para o Kubernetes executar corretamente.
Depois disso, na própria saída, já será informado que seja utilizado o comando de teste, para verificar se o cluster foi instalado com sucesso:

Executando a aplicação

Agora que já temos um cluster local em execução, precisamos da nossa aplicação de teste. Vamos usar um “hello world” em GO.
Clone o repositório:
e entre no diretório examples/getting-started no diretório clonado.
Nesse diretório, teremos tudo que precisamos para criar um build, um push e um deploy no cluster Kubernetes.
  •  Um simples script em GO para mostrar uma string:

  • Um Dockerfile que vai fazer o build da imagem automaticamente:
  • O Skaffold YAML, usado para estruturar os passos que o Skafold irá utilizar:
  • E finalmente o manifest Kubernetes que vai criar um objeto do tipo POD no cluster:
Agora basta dar o comando skaffold dev que o Skaffold irá utilizar o docker file para compilar a imagem, depois vai fazer um push local com a tag sha256 da imagem, atualizar o manifest para utilizar esta imagem, fazer o deploy no cluster e de quebra ainda vai mostrar o log da aplicação na tela para você.

Você pode pensar, “Legal, ele me ajuda automatizando um processo chato, mas eu poderia executar os comandos docker build, docker tag, docker push, e por fim um kubectl apply -f nos manifests. É mais custoso, mas dá pra fazer sem muita dificuldade, qual a tão grande vantagem em usar o Skaffold?”.
Eu te digo, além de todas as vantagens inerentes já comentadas anteriormente, ele ainda tem a cereja no bolo que é monitorar as alterações que você faz no código e automaticamente compilar a nova imagem e aplicar no cluster, sem você ter que fazer nada.
Deixe aberto seu terminal e agora altere o código da aplicação, troque o texto de “hello world” para “4linux” e veja a mágica acontecer.

Agora temos apenas que nos preocupar em alterando a aplicação e assim que salvarmos o arquivo a imagem é compilada, enviada ao registry, atualizada nos arquivos manifest e aplicada ao cluster, além de já termos os logs na tela para saber se tudo está do jeito que esperamos.
E para encerrar esse post com chave de ouro, ainda vou dizer para você que isso é apenas a ponta do iceberg quando falamos dessa incrível ferramenta. Como dito no começo, pretendo trazer uma série sobre Skaffold, que vai fazer você querer desenvolver utilizando-o todo dia.
Um breve spoiler: o Skaffold consegue construir o arquivo Skaffold.yaml a partir de um simples comando, que vai ler o path em busca do Dockerfile, os manifests, e já vai estruturá-lo corretamente para fazer o build e o deploy.
O Skaffold é praticamente uma ferramenta de CI/CD local.
Até a próxima!

Mais informações:

[1] Skaffold: https://skaffold.dev/

Líder em Treinamento e serviços de Consultoria, Suporte e Implantação para o mundo open source. Conheça nossas soluções:

CURSOSCONSULTORIA

Anterior Moodle - Descomplicando a instalação
Próxima Descubra como os Sistemas de Recomendação impactam seu dia a dia

About author

Franklin Ribeiro
Franklin Ribeiro 3 posts

Franklin Ribeiro é bacharel em Sistemas da Informação pela Universidade Bandeirante de São Paulo, possui mais de 10 anos de experiência na área da tecnologia da informação, já atuou em diversas frentes da área e hoje realiza consultoria e treinamento de tecnologias de software livre com ênfase na cultura DevOps e suas ferramentas.

View all posts by this author →

Você pode gostar também

DevOps

Dicas para Reduzir o Tamanho das Imagens do Docker e Melhorar seu Desempenho

Não há mais como fugir, cedo ou tarde estaremos esbarrando com a pequena baleia amigável. Aprenderemos o que é container, qual o papel do Docker no meio disso tudo, e

Infraestrutura TI

Guia prático: Como configurar o OpenLDAP para aumentar a disponibilidade do seu ambiente

O que é OpenLDAP? LDAP é uma sigla para Lightweight Directory Access Protocol. Este serviço é usado essencialmente para armazenar informações de usuários, grupos, sistemas etc. O que não é

DevOps

Como montar seu próprio Registry Privado com Harbor

Hoje, no blog da 4Linux, sobre Registry Privado e em como montar o nosso com o Harbor. O que é um Registry Quando falamos de contêineres, sabemos que para ele