Usando Skaffold para automatizar seu deploy no Kubernetes

Usando Skaffold para automatizar seu deploy no 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 Sistemas de recomendação: o Big Data do dia a dia

About author

Franklin Ribeiro
Franklin Ribeiro 2 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

Infraestrutura TI

Instalação do Cuda 9 em distribuições Linux baseadas no Ubuntu

Se você deseja trabalhar com algoritmos de Machine Learning, provavelmente precisará usar processamento paralelo para acelerar os resultados dos seus algoritmos. Muitos frameworks como por exemplo, o TensorFlow, já possuem

Notícias

4Linux presente no evento internacional DevOpsDays Maringá.

Sétima edição no Brasil e a primeira a ser realizada no estado do Paraná, o DevOpsDays Maringá reunirá especialistas para expor e debater temas do mundo DevOps. O DevOpsDays terá

Containers

Docker Compose – Explicado

Como foi visto em nosso post anterior sobre o Docker [1], para realizar a execução de um contêiner basta executar o comando docker container run, porém, e se for necessário