Como facilitar o ciclo de desenvolvimento com Skaffold

Alvaro David
google-cloud-brasil
3 min readAug 8, 2022

Uma arquitetura de microsserviços traz muitas vantagens como ciclos de release mais rápidos, fácil de escalar, etc; porém pode ser um pouco complicado executar testes localmente, por causa da dependência entre os microsserviços que tem com outros serviços.

Para explorar um pouco esse cenário, vamos usar a Online Boutique, um exemplo de aplicação Cloud Native que simula uma loja virtual, onde os usuários poderiam procurar produtos, adicioná-los ao carrinho e comprá-los.

Frontend da Online Boutique

A Online Boutique é composta por 11 microsserviços, escritos em diferentes linguagens que se comunicam via protocolo gRPC.

Arquitetura

Se quisermos, por exemplo, fazer alterações e testar o microsserviço frontend, precisamos executar também todos (ou quase todos) os outros microsserviços. Isso significa gerenciar um terminal para cada um deles, e como estamos utilizando containers, fazer um docker build e um docker run em cada terminal, adicionando as variáveis de ambiente de cada microsserviço. Dessa forma ficaríamos com muitas janelas abertas!

Um terminal para cada um dos microsserviços

Ok, é até possível gerenciar, pois só vamos ver o terminal do frontend, certo? Só que para cada modificação feita, vamos ter que fazer um docker build e docker run.

Para tentarmos simplificar este cenário, vamos adotar o Skaffold — que é uma ferramenta open source que facilita o desenvolvimento contínuo de aplicativos nativos do Kubernetes. O Skaffold lida com o workflow de building, pushing e implementação dos aplicativos.

Imagina ter só um terminal, onde todos os logs dos diferentes serviços sejam organizados e que cada vez que você modificar um microsserviço, o docker build seja feito automaticamente, tudo com um único comando: skaffold dev

Skaffold identifica os serviços que vamos a utilizar

Onde está a mágica? Dentro do repositório temos um arquivo de configuração chamado skaffold.yaml e ele que indicará ao Skaffold o que fazer com nossos serviços. Vamos analisar esse arquivo:

Artifacts no skaffold.yaml

Na primeira parte indicamos quais são os artifacts (imagens) que vamos utilizar e onde fica o código fonte de cada um deles, assim o Skaffold sabe de onde fazer o build de cada serviço.

Manifests no skaffold.yaml

Com as imagens prontas o Skaffold consegue fazer o deploy no cluster de kubernetes que a gente está utilizando, mas pera aí… que cluster? Se eu to usando meu computador.

Aqui o minikube entra em ação. O minikube é uma ferramenta que implementa um “mini-cluster” de Kubernetes no seu ambiente, simplificando testes em desenvolvimento. Simplesmente usamos um minikube start e pronto, agora nós (e o Skaffold) podemos usar comandos kubectl apontando pro nosso próprio computador.

Output de “minikube start” e “kubectl config current-context”

O Skaffold e o Minikube podem ser instalados independentemente mas também fazem parte dos componentes do gcloud (CLI do Google Cloud).

Em resumo:

O Skaffold lida com o workflow para fazer building, pushing e deployment dos seus microsserviços.

O Minikube implementa um cluster Kubernetes local que facilita o aprendizado e o desenvolvimento para o Kubernetes.

Utilizando essa solução permite que você se concentre no que mais importa: escrever código.

Referências:

https://skaffold.dev
https://minikube.sigs.k8s.io/docs
https://github.com/GoogleCloudPlatform/microservices-demo

--

--