Como facilitar o ciclo de desenvolvimento com Skaffold
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.
A Online Boutique é composta por 11 microsserviços, escritos em diferentes linguagens que se comunicam via protocolo gRPC.
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!
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
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:
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.
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.
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