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:
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.
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! 😉
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:
Líder em Treinamento e serviços de Consultoria, Suporte e Implantação para o mundo open source. Conheça nossas soluções:
CURSOSCONSULTORIA