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.