DEV Community

Cover image for Tutorial: Disponibilizando uma aplicação Quarkus no Kubernetes utilizando o Minikube e/ou DockerHub
Marcus Paulo
Marcus Paulo

Posted on

Tutorial: Disponibilizando uma aplicação Quarkus no Kubernetes utilizando o Minikube e/ou DockerHub

Introdução

O objetivo deste artigo é criar uma aplicação simples no Quarkus e em seguida mostrar como disponibilizar esta aplicação no Minikube (Kubernetes para testes na máquina local) e em seguida, como podemos enviar a imagem gerada para o repositório de imagens do Docker, que é o Dockerhub.

Para saber mais sobre o Kubernetes (K8S), Docker, Minikube, Kubectl e do Quarkus, eu recomendo as seguintes leituras:

Leituras adicionais

Site oficial do Docker: https://www.docker.com/

Site oficial do Kubernetes: https://kubernetes.io/pt/

Site oficial do Minikube: https://minikube.sigs.k8s.io/docs/start/

Minikube (Kubernetes): https://kubernetes.io/pt/docs/tutorials/kubernetes-basics/create-cluster/cluster-intro/

Site oficial do Quarkus: https://quarkus.io/

Publicações:

Tutorial: Quarkus do Zero até o Deploy no Heroku, utilizando Quarkus Java + REST + CDI + Panache, Hibernate com Postgres + Postman LinkedIn | Medium

Tutorial: Criando um CRUD utilizando Quarkus Java + REST + CDI + Panache, Hibernate com Postgres (Docker) + Postman — LinkedIn | Medium

- Tutorial: Quarkus — Simplificando o Hibernate utilizando Panache — criando uma aplicação simples utilizando Quarkus Java + REST + CDI + Panache — Linkedin | Medium

Atenção: O Minikube não deve ser utilizado em ambiente de produção.

Pré-Requisitos para esse tutorial

Para iniciar, vamos criar uma simples aplicação no Quarkus, seguindo os passos abaixo:

Criar o projeto no Quarkus

mvn io.quarkus:quarkus-maven-plugin:1.13.0.Final:create \\    -DprojectGroupId=br.com.mp \\    -DprojectArtifactId=kubernetes-quarkus \\    -DclassName="br.com.mp.kubernetes.quarkus.rest.GreetingResource" \\    -Dpath="/hello" \\    -Dextensions="resteasy,kubernetes,jib"
Enter fullscreen mode Exit fullscreen mode

Entre na pasta do projeto

cd kubernetes-quarkus
Enter fullscreen mode Exit fullscreen mode

Testando o projeto

mvn quarkus:dev
Enter fullscreen mode Exit fullscreen mode

Resultado

Executando uma aplicação Quarkus pela linha de comando

Adicionando a dependência do Minikube

mvn quarkus:add-extension -Dextensions="quarkus-minikube"
Enter fullscreen mode Exit fullscreen mode

Ou diretamente no Pom.xml

<dependency>  <groupId>io.quarkus</groupId>  <artifactId>quarkus-minikube</artifactId></dependency>
Enter fullscreen mode Exit fullscreen mode

A extensão do **quarkus-minikube** poderia ter sido adicionada na linha de comando da criação da aplicação.

Definindo o Minikube como Container Registry local

Para transformar o Minikube em um Container Registry local (um repositório de imagens), basta executar a linha abaixo no terminal.

eval $(minikube -p minikube docker-env)
Enter fullscreen mode Exit fullscreen mode

Gerando a imagem do Docker

No próximo passo, será criada uma imagem Docker contendo a aplicação

mvn package -Dquarkus.container-image.build=true
Enter fullscreen mode Exit fullscreen mode

Geração dos manifestos

Após a criação da imagem, será gerada os manifestos do Kubernetes e Minikube, na pasta “/target/kubernetes”, conforme a imagem abaixo:

Consultando a imagem gerada

Utilizando o docker para consultar a imagem que foi gerada

docker image ls
Enter fullscreen mode Exit fullscreen mode
**[Resultado]**REPOSITORY                        TAG              IMAGE ID       CREATED         SIZEmarcus/kubernetes-quarkus-teste   1.0.0-SNAPSHOT   e574987218c4   3 minutes ago   199MB
Enter fullscreen mode Exit fullscreen mode

Com a imagem já no Container Registry do Minikube, basta aplicar o manifesto do “minikube.yml”

Aplicando os manifestos do Minikube

kubectl apply -f target/kubernetes/minikube.yml                        
Enter fullscreen mode Exit fullscreen mode
[Resultado]service/kubernetes-quarkus-teste createddeployment.apps/kubernetes-quarkus-teste created
Enter fullscreen mode Exit fullscreen mode

Após alguns segundos, a aplicação estará disponível. No próximo comando, vamos listar os PODS.

Pod é a menor elemento do Kubernetes

Consultando os PODS

kubectl get po
Enter fullscreen mode Exit fullscreen mode
[Resultado]NAME                                        READY   STATUS    RESTARTS   AGEkubernetes-quarkus-teste-54db4f8df8-gf7nf   1/1     Running   0          6m52s
Enter fullscreen mode Exit fullscreen mode

Port-Forward para acessar na máquina local

Para acessar a aplicação, é necessário redirecionar o endereço do Minikube para a máquina local, através do comando Port-forward, para isso, copie o nome exato do seu pod, conforme demonstrado abaixo:

kubectl port-forward pod/kubernetes-quarkus-teste-54db4f8df8-gf7nf 8080:8080                     
Enter fullscreen mode Exit fullscreen mode
[Resultado]Forwarding from 127.0.0.1:8080 -> 8080Forwarding from [::1]:8080 -> 8080Handling connection for 8080
Enter fullscreen mode Exit fullscreen mode

Acessando a aplicação que foi disponibilizada pelo Minikube

Para acessar a aplicação, basta acessar o endereço: [http://localhost:8080/](http://localhost:8080/)

Enviando a imagem para o Dockerhub

A partir de agora, enviaremos a imagem docker da Aplicação para o repositório de imagens do Dockerhub.

Enviando a imagem para o Dockerhub

mvn clean package -Dquarkus.container-image.push=true
Enter fullscreen mode Exit fullscreen mode

Erro ao enviar a imagem para o Dockerhub

Erro:
Enter fullscreen mode Exit fullscreen mode
Caused by: com.google.cloud.tools.jib.api.RegistryUnauthorizedException: Unauthorized for registry-1.docker.io/marcus/kubernetes-quarkus-teste[ERROR]         at com.google.cloud.tools.jib.registry.RegistryEndpointCaller.call(RegistryEndpointCaller.java:164)[ERROR]
Enter fullscreen mode Exit fullscreen mode

Caso ocorra o problema acima, é necessário realizar alguns procedimentos:

1 — No terminal, faça o login na sua conta do Dockerhub

docker login
Enter fullscreen mode Exit fullscreen mode

2 — A imagem do Docker é criada de acordo com o nome do seu usuário do seu computador, no meu caso, a imagem foi criada como marcus/kubernetes-quarkus, porém, o meu usuário no Dockerhub é marcuspaulo.

Caso este seja o seu problema, basta definir o nome do seu usuário dentro das configurações no arquivo de propriedades (application.properties) do Quarkus, conforme a linha abaixo:

quarkus.container-image.group=marcuspaulo
Enter fullscreen mode Exit fullscreen mode

Enviando para o Dockerhub

mvn clean package -Dquarkus.container-image.push=true
Enter fullscreen mode Exit fullscreen mode

Consultando a imagem no Dockerhub, através do endereço: https://hub.docker.com/repositories

image

Espero que vocês tenham gostado, fico muito agradecido com o seu like e com o compartilhamento deste post, muito obrigado e até a próxima.

Código-fonte

https://github.com/marcuspaulo/kubernetes-quarkus

Referências

https://quarkus.io/guides/container-image#quarkus-container-image_quarkus.container-image.registry

https://quarkus.io/guides/deploying-to-kubernetes

https://quarkus.io/guides/kubernetes-client

https://minikube.sigs.k8s.io/docs/handbook/registry/

https://haralduebele.blog/2020/04/03/deploy-your-quarkus-applications-on-kubernetes-almost-automatically/

Top comments (2)

Collapse
 
lucasscharf profile image
Aleatório

Sou um homem simples, vejo um post sobre Quarkus em português, eu curto

Collapse
 
marcuspaulo profile image
Marcus Paulo

Muito obrigado Aleatório, pelo seu comentário.