Fazendo deploy de uma aplicação Quarkus no Red Hat OpenShift.
Deploying a Quarkus application on Red Hat OpenShift.
O que é o Red Hat OpenShift?
Openshift é uma plataforma de containers Kubernetes (Distribuição k8s) para orquestração e gerenciamento de aplicações baseadas em containers, com operações automatizadas em todo o stack para gerenciar implantações de cloud híbrida e multicloud. O Red Hat OpenShift é otimizado para aprimorar a produtividade do desenvolvedor e promover a inovação.
O que é Quarkus?
Quarkus é um framework Java nativo em Kubernetes e de stack completo que foi desenvolvido para máquinas virtuais Java (JVMs) e compilação nativa. Ele otimiza essa linguagem especificamente para containers, fazendo com que essa tecnologia seja uma plataforma eficaz para ambientes serverless, nuvem e Kubernetes.
CodeReady Containers
CodeReady Containers (CRC) traz um cluster OpenShift 4.1 ou mais recente, pré-configurado, para o laptop ou computador de mesa local para fins de desenvolvimento e teste. É possivel utilizar CRC no Linux, macOS e Windows. Nesse tutorial, instalaremos no Fedora Linux.
Pré-requisitos
Para instalarmos o CodeReady Containers é necessário no mínimo:
- 4 CPUs virtuais (vCPUs)
- 8 GB de memória
- 35 GB de espaço de armazenamento
Instalando o CRC
Baixe o Binário/Secret do CRC aqui.
Apos o download, é preciso extrair o arquivo:
tar xvf crc-linux-amd64.tar.xz
Adicione o binário do CRC a PATH variável de ambiente:
sudo mv crc /usr/local/bin/
Configure seu ambiente host com:
crc setup
Se tudo ocorrer como esperado, vamos iniciar o cluster:
crc start
Isso vai levar um tempo.. mas ao finalizar, poderá ver as instruções para acessar o cluster:
INFO To access the cluster using 'oc', run 'eval $(crc oc-env) && oc login -u kubeadmin -p ********* https://api.crc.testing:6443'INFO Access the OpenShift web-console here: https://console-openshift-console.apps-crc.testingINFO Login to the console with user: kubeadmin, password: *********CodeReady Containers instance is running
Depois disso, exporte as variáveis de acesso ao OpenShift e faça login:
eval $(crc oc-env)oc login -u kubeadmin -p *senha*
Para acessarmos a interface do OpenShift, execute:
crc console
Caso precise parar/excluir o cluster:
crc stop
crc delete
Aplicação Quarkus
Para instalar o Quarkus, siga essas instruções.
Disponibilizei uma aplicação em Quarkus no github, para podermos ter um ponto de partida.
Clone esse repositório e acesse a raiz do projeto:
git clone https://github.com/felipeagger/quarkus-hello-world.git && cd quarkus-hello-world
Ou caso queira fazer com uma aplicação Quarkus já existente, precisaremos adicionar a extensão do Openshift ao projeto:
./mvnw quarkus:add-extension -Dextensions="openshift"
e adicionar esses parâmetros no arquivo application.properties:
quarkus.kubernetes-client.trust-certs=true
quarkus.openshift.expose=truequarkus.s2i.base-jvm-image=registry.access.redhat.com/openjdk/openjdk-11-rhel7
Continuando, para rodarmos a aplicação local, execute:
./mvnw quarkus:dev
Se acessar agora no navegador, na porta 8085:
Disponibilizando a Aplicação no OpenShift
Crie um projeto no OpenShift:
oc new-project quarkus
Para fazer o deploy da aplicação, execute:
./mvnw clean package -Dquarkus.kubernetes.deploy=true
Pode demorar um pouco, pois nesse momento ira fazer o Build do Projeto, Criar uma imagem do Container e fazer o Push para o Registry do Openshift.
Mas podemos acompanhar o deploy em Builds -> Nome da aplicação
Clique Nome da aplicação novamente, e em seguida na aba Builds
e finalmente, acesse a aba Logs
Ao finalizar, a saída sera semelhante a essa:
Para visualizar os detalhes da nossa aplicação, acesse Topology no painel esquerdo.
O OpenShift criou uma rota automaticamente para nossa aplicação, então podemos acessa-la em http://java-quarkus-helloworld-quarkus.apps-crc.testing/
Escalando nossa aplicação
Podemos escalar nossa aplicação acessando a aba Overview, e clicando nas setas para cima ou para baixo, respectivamente.
Se fazermos algumas requisições para nossa aplicação, podemos ver que já está sendo feito o balanceamento de carga entre os Pods existentes.
Vou ficando por aqui, ate a próxima galera!
Links uteis: