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
- Instalar o Docker: https://docs.docker.com/engine/install/
- Instalar o Kubernetes: https://kubernetes.io/pt/docs/setup/
- Instalar o Kubeclt: https://kubernetes.io/docs/tasks/tools/
- Instalação do Minikube: https://minikube.sigs.k8s.io/docs/start/
- Open JDK 11+: https://openjdk.java.net/install/
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"
Entre na pasta do projeto
cd kubernetes-quarkus
Testando o projeto
mvn quarkus:dev
Resultado
Executando uma aplicação Quarkus pela linha de comando
Adicionando a dependência do Minikube
mvn quarkus:add-extension -Dextensions="quarkus-minikube"
Ou diretamente no Pom.xml
<dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-minikube</artifactId></dependency>
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)
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
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
**[Resultado]**REPOSITORY TAG IMAGE ID CREATED SIZEmarcus/kubernetes-quarkus-teste 1.0.0-SNAPSHOT e574987218c4 3 minutes ago 199MB
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
[Resultado]service/kubernetes-quarkus-teste createddeployment.apps/kubernetes-quarkus-teste created
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
[Resultado]NAME READY STATUS RESTARTS AGEkubernetes-quarkus-teste-54db4f8df8-gf7nf 1/1 Running 0 6m52s
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
[Resultado]Forwarding from 127.0.0.1:8080 -> 8080Forwarding from [::1]:8080 -> 8080Handling connection for 8080
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
Erro ao enviar a imagem para o Dockerhub
Erro:
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]
Caso ocorra o problema acima, é necessário realizar alguns procedimentos:
1 — No terminal, faça o login na sua conta do Dockerhub
docker login
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
Enviando para o Dockerhub
mvn clean package -Dquarkus.container-image.push=true
Consultando a imagem no Dockerhub, através do endereço: https://hub.docker.com/repositories
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
Top comments (2)
Sou um homem simples, vejo um post sobre Quarkus em português, eu curto
Muito obrigado Aleatório, pelo seu comentário.