Implantar um aplicativo Java com o Open Liberty ou WebSphere Liberty em um cluster do Serviço de Kubernetes do Azure

Este artigo demonstra como:

  • Executar seu aplicativo Java, Java EE, Jacarta EE ou MicroProfile no runtime do Open Liberty ou do IBM WebSphere Liberty.
  • Crie a imagem do Docker do aplicativo usando as imagens de contêiner do Open Liberty ou do WebSphere Liberty.
  • Implante o aplicativo nos contêineres em um cluster do AKS (Serviço de Kubernetes do Azure) usando o Operador Open Liberty ou Operador WebSphere Liberty.

O Open Liberty Operator simplifica a implantação e o gerenciamento de aplicativos executados em clusters Kubernetes. Com o Operador Open Liberty Operator ou WebSphere Liberty, você também pode executar operações mais avançadas, como coleta de rastreamentos e despejos.

Este artigo usa a oferta do Azure Marketplace para Open Liberty ou WebSphere Liberty para acelerar sua jornada no AKS. A oferta provisiona automaticamente alguns recursos do Azure, incluindo:

  • Uma instância do Registro de Contêiner do Azure.
  • Uma cluster do AKS.
  • Uma instância do Controlador de Entrada de Gateway de Aplicativo (AGIC).
  • O operador Open Liberty e o operador WebSphere Liberty.
  • Opcionalmente, uma imagem de contêiner que inclui o Liberty e seu aplicativo.

Se você preferir diretrizes passo a passo manuais para executar o Liberty no AKS, confira Implantar manualmente um aplicativo Java com o Open Liberty ou o WebSphere Liberty em um cluster AKS (Serviço de Kubernetes do Azure).

Este artigo tem o objetivo de ajudá-lo a iniciar rapidamente a implementação. Antes de ir para a produção, você deve explorar a documentação IBM sobre como ajustar o Liberty.

Caso você não tenha uma assinatura do Azure, crie uma conta gratuita do Azure antes de começar.

Pré-requisitos

  • Instale a CLI do Azure. Para execuções no Windows ou no macOS, considere executar a CLI do Azure em um contêiner do Docker. Para saber mais, confira Como executar a CLI do Azure em um contêiner do Docker.
  • Entre na CLI do Azure usando o comando az login. Para concluir o processo de autenticação, siga as etapas exibidas no terminal. Para obter outras opções de entrada, consulte Métodos de autenticação.
  • Quando solicitado, instale a extensão da CLI do Azure no primeiro uso. Para obter mais informações sobre extensões, confira Usar e gerenciar extensões com a CLI do Azure.
  • Execute az version para localizar a versão e as bibliotecas dependentes que estão instaladas. Para fazer a atualização para a versão mais recente, execute az upgrade. Este artigo requer pelo menos a versão 2.31.0 da CLI do Azure.
  • Instale uma implementação do Java SE, versão 17 ou posterior (por exemplo, Eclipse Open J9).
  • Instale o Maven 3.5.0 ou posterior.
  • Instale o Docker para seu sistema operacional.
  • Verifique se o Git está instalado.
  • Verifique se você recebeu a função Proprietário ou as funções Colaborador e Administrador de Acesso do Usuário na assinatura. Você pode verificar as funções seguindo as etapas em Listar atribuições de função para um usuário ou grupo.

Observação

Você também pode executar os comandos neste artigo Azure Cloud Shell. Essa abordagem tem todas as ferramentas que são pré-requisito pré-instaladas, com exceção do Docker.

Criar uma implantação do Liberty no AKS usando o portal

As etapas a seguir guiará você a criar um runtime do Liberty no AKS. Depois de concluir essas etapas, você terá uma instância do Registro de Contêiner e um cluster do AKS para implantar seu aplicativo em contêineres.

  1. Acesse o portal do Azure. Na caixa de pesquisa na parte superior da página, digite IBM Liberty no AKS. Quando as sugestões aparecerem, selecione a única correspondência na seção Marketplace.

    Se preferir, você pode ir diretamente para a oferta.

  2. Selecione Criar.

  3. No painel Informações Básicas:

    1. Crie um novo grupo de recursos. Como os grupos de recursos devem ser exclusivos em uma assinatura, escolha um nome exclusivo. Uma forma fácil de ter nomes exclusivos é usar uma combinação de suas iniciais, a data de hoje e algum identificador (por exemplo, ejb0913-java-liberty-project-rg).

    2. Em Região, selecione Leste dos EUA.

    3. Crie uma variável de ambiente para os nomes do grupo de recursos no seu shell para o cluster e o banco de dados:

      export RESOURCE_GROUP_NAME=<your-resource-group-name>
      

  4. Selecione Avançar. No painel do AKS, opcionalmente, você pode selecionar um cluster do AKS existente e uma instância do Registro de Contêiner, em vez de fazer com que a implantação crie novos. Essa escolha permite que você use o padrão sidecar, conforme mostrado no Centro de Arquitetura do Azure. Você também pode ajustar as configurações para o tamanho e o número das máquinas virtuais no pool de nós do AKS.

    Para os propósitos deste artigo, basta manter todos os padrões neste painel.

  5. Selecione Avançar. No painel Balanceamento de Carga, ao lado de Conectar-se ao Gateway de Aplicativo do Azure, selecione Sim. Nesta seção, você pode personalizar as seguintes opções de implantação:

    • Em Rede virtual e Sub-rede, você pode, como alternativa, personalizar a rede virtual e a sub-rede nas quais a implantação coloca os recursos. Você não precisa alterar os valores restantes de seus padrões.

    • No Certificado TLS/SSL, você pode fornecer o certificado TLS/SSL do Gateway de Aplicativo do Azure. Deixe os valores nos padrões para fazer com que a oferta gere um certificado autoassinado.

      Não entre em produção com um certificado autoassinado. Para obter mais informações sobre certificados autoassinados, confira Criar um certificado público autoassinado para autenticar seu aplicativo.

    • Você pode selecionar Habilitar a afinidade baseada em cookies, também conhecida como sessões persistentes. Este artigo usa sessões autoadesivas, portanto, certifique-se de selecionar essa opção.

  6. Selecione Avançar. No painel Operador e aplicativo, este artigo usa todos os padrões. No entanto, você pode personalizar as seguintes opções de implantação:

    • Você pode implantar o Operador WebSphere Liberty selecionando Sim para a opção IBM com suporte?. Deixar o padrão Não implementa o Operador Open Liberty.
    • Você pode implementar um aplicativo para a operadora selecionada, marcando Sim na opção Implantar um aplicativo?. Sair do padrão Não implementa nenhum aplicativo.
  7. Selecione Examinar + criar para validar suas opções selecionadas. No painel Revisar + criar, quando Criar ficar disponível após a aprovação da validação, selecione-o.

    A implantação pode levar até 20 minutos. Enquanto aguarda a conclusão da implantação, você pode seguir as etapas na seção Criar uma instância do Banco de Dados SQL do Azure. Depois de concluir essa seção, volte aqui e continue.

Capturar informações selecionadas da implantação

Se você saiu do painel A implantação está em andamento, as etapas a seguir mostram como voltar para ele. Se você ainda estiver no painel que mostra Sua implantação foi concluída, vá para o grupo de recursos recém-criado e pule para a terceira etapa.

  1. No canto de qualquer página do portal, selecione o botão de menu e selecione Grupos de recursos.

  2. Na caixa com o texto Filtrar para qualquer campo, insira os primeiros caracteres do grupo de recursos criado anteriormente. Se você seguiu a convenção recomendada, insira suas iniciais e selecione o grupo de recursos apropriado.

  3. Na lista de recursos no grupo de recursos, selecione o recurso com o valor Tipo de registro de Contêiner.

  4. No painel de navegação, em Configurações, selecione Chaves de acesso.

  5. Guarde os valores de Servidor de logon, Nome de registro, Nome de usuário e Senha. Você pode usar o ícone de cópia ao lado de cada campo para copiar o valor para a área de transferência do sistema.

  6. Volte para o grupo de recursos em que você implantou os recursos.

  7. Na seção Configurações, selecione Implantações.

  8. Selecione a implantação mais abaixo da lista. O valor Nome da implantação corresponde à ID do editor da oferta. Ele contém a cadeia de caracteres ibm.

  9. No painel de navegação, selecione Saídas.

  10. Usando a mesma técnica de cópia dos valores anteriores, guarde os valores para as seguintes saídas:

    • cmdToConnectToCluster
    • appDeploymentTemplateYaml se a implantação não incluir um aplicativo. Ou seja, você selecionou Nenhum para Implantar um aplicativo? quando você implantou a oferta do Marketplace.
    • appDeploymentYaml se a implantação incluir um aplicativo. Ou seja, você selecionou Sim para Implantar um aplicativo?.

    Cole o valor de appDeploymentTemplateYaml ou appDeploymentYaml em um shell Bash, acrescente | grep secretName e execute o comando.

    A saída desse comando é o nome do segredo TLS de entrada, como - secretName: secret785e2c. Salve o valor de secretName.

Você usará esses valores mais adiante neste artigo. Observe que as saídas listam vários outros comandos úteis.

Criar uma instância do Banco de Dados SQL do Azure

Para criar um banco de dados individual do Banco de Dados SQL do Azure para uso com seu aplicativo, siga as etapas em Início Rápido: Criar um banco de dados individual no Banco de Dados SQL do Azure. Observe cuidadosamente as seguintes diferenças:

  • Na etapa Básico, anote os valores de Grupo de recursos, Nome do banco de dados, <server-name>.database.windows.net, Logon de administrador do servidor e Senha. Este artigo se refere ao valor do Grupo de recursos do banco de dados como <db-resource-group>.

  • Na etapa Rede, defina o Método de conectividade como Ponto de extremidade público, defina Permitir que serviços e recursos do Azure acessem este servidor como Sim e defina Adicionar endereço IP do cliente atual como Sim.

    Captura de tela do portal do Azure que mostra a guia Rede da página Criar Banco de Dados SQL com as configurações de método de conectividade e regras de firewall realçadas.

Observação

A camada de computação sem servidor selecionada para este banco de dados economiza dinheiro colocando o banco de dados em suspensão durante períodos de inatividade. O aplicativo de amostra falhará se o banco de dados estiver dormindo quando o aplicativo for iniciado.

Para forçar a ativação do banco de dados, você pode executar uma consulta usando o editor de consultas. Siga as etapas em Consultar o banco de dados. Aqui está uma consulta de exemplo: SELECT * FROM COFFEE;.

Crie uma variável de ambiente no seu shell para o nome do grupo de recursos para o banco de dados:

export DB_RESOURCE_GROUP_NAME=<db-resource-group>

Agora que você cirou o banco de dados e o cluster do AKS, você pode continuar preparando o AKS para hospedar seu aplicativo Open Liberty.

Configurar e implantar um aplicativo de exemplo

Siga as etapas nesta seção para implantar o aplicativo de exemplo no runtime do Liberty. Essas etapas usam o Maven.

Fazer check-out do aplicativo

Clone o código de exemplo para este artigo. O exemplo está no GitHub.

Há alguns exemplos no repositório. Este artigo usa java-app/. Execute os seguintes comandos para obter a amostra:

git clone https://github.com/Azure-Samples/open-liberty-on-aks.git
cd open-liberty-on-aks
export BASE_DIR=$PWD
git checkout 20240220

Se você vir uma mensagem sobre estar no estado "HEAD desanexado", poderá ignorá-la com segurança. A mensagem significa apenas que você fez check-out de uma marca.

Esta é a estrutura de arquivos do aplicativo:

java-app
├─ src/main/
│  ├─ aks/
│  │  ├─ db-secret.yaml
│  │  ├─ openlibertyapplication-agic.yaml
│  │  ├─ openlibertyapplication.yaml
│  │  ├─ webspherelibertyapplication-agic.yaml
│  │  ├─ webspherelibertyapplication.yaml
│  ├─ docker/
│  │  ├─ Dockerfile
│  │  ├─ Dockerfile-wlp
│  ├─ liberty/config/
│  │  ├─ server.xml
│  ├─ java/
│  ├─ resources/
│  ├─ webapp/
├─ pom.xml

Os diretórios java, resources e webapp contêm o código-fonte do aplicativo de exemplo. O código declara e usa uma fonte de dados chamada jdbc/JavaEECafeDB.

No diretório AKS, há cinco arquivos de implantação:

  • db-secret.xml: use este arquivo para criar Segredos do Kubernetes com as credenciais de conexão de banco de dados.
  • openlibertyapplication-agic.yaml: use este arquivo para implantar o aplicativo Open Liberty com o AGIC. Este artigo pressupõe que você use esse arquivo.
  • openlibertyapplication.yaml: use este arquivo se quiser implantar o aplicativo Open Liberty sem AGIC.
  • webspherelibertyapplication-agic.yaml: use este arquivo para implantar o aplicativo WebSphere Liberty com o AGIC se você implantou o WebSphere Liberty Operator anteriormente neste artigo.
  • webspherelibertyapplication.yaml: use este arquivo para implantar o aplicativo WebSphere Liberty sem o AGIC se você implantou o WebSphere Liberty Operator anteriormente neste artigo.

No diretório docker, há dois arquivos para criar a imagem do aplicativo:

  • Dockerfile: use este arquivo para criar a imagem do aplicativo com o Open Liberty neste artigo.
  • Dockerfile-wlp: use este arquivo para criar a imagem do aplicativo com o WebSphere Liberty se você implantou o WebSphere Liberty Operator anteriormente neste artigo.

No diretório liberty/config, você usa o arquivo server.xml para configurar a conexão de banco de dados para o cluster do Open Liberty e do WebSphere Liberty.

Compilar o projeto

Agora que você tem as propriedades necessárias, pode criar o aplicativo. O arquivo POM do projeto lê muitas variáveis do ambiente. Como parte do build do Maven, essas variáveis são usadas para preencher valores nos arquivos YAML localizados em src/main/aks. Você poderá fazer algo semelhante para seu aplicativo fora do Maven se preferir.

cd $BASE_DIR/java-app
# The following variables are used for deployment file generation into the target.
export LOGIN_SERVER=<Azure-Container-Registry-Login-Server-URL>
export REGISTRY_NAME=<Azure-Container-Registry-name>
export USER_NAME=<Azure-Container-Registry-username>
export PASSWORD='<Azure-Container-Registry-password>'
export DB_SERVER_NAME=<server-name>.database.windows.net
export DB_NAME=<database-name>
export DB_USER=<server-admin-login>@<server-name>
export DB_PASSWORD='<server-admin-password>'
export INGRESS_TLS_SECRET=<ingress-TLS-secret-name>

mvn clean install

(Opcional) Testar o projeto localmente

Execute e teste o projeto localmente antes de implantar o Azure. Para conveniência, este artigo usa liberty-maven-plugin. Para saber mais sobre liberty-maven-plugin, consulte o artigo Criando um aplicativo Web com o Maven do Open Liberty.

Para o aplicativo, você pode fazer algo semelhante usando qualquer outro mecanismo, como o ambiente de desenvolvimento local. Você também pode considerar o uso da opção liberty:devc destinada ao desenvolvimento com contêineres. Leia mais sobre liberty:devc na documentação do Open Liberty.

  1. Inicie o aplicativo usando liberty:run. liberty:run também usa as variáveis de ambiente que você definiu anteriormente.

    cd $BASE_DIR/java-app
    mvn liberty:run
    
  2. Se o teste for bem-sucedido, uma mensagem semelhante a [INFO] [AUDIT] CWWKZ0003I: The application javaee-cafe updated in 1.930 seconds será exibida na saída do comando. Acesse http://localhost:9080/ no navegador e verifique se o aplicativo está acessível e se todas as funções estão operantes.

  3. Selecione Ctrl+C para parar.

Compilar imagem para implantação do AKS

Agora, você pode executar o comando docker build para compilar a imagem:

cd $BASE_DIR/java-app/target

docker buildx build --platform linux/amd64 -t javaee-cafe:v1 --pull --file=Dockerfile .

(Opcional) Testar a imagem do Docker localmente

Use as etapas a seguir para testar a imagem do Docker localmente antes de implantar no Azure:

  1. Execute a imagem usando o comando a seguir. Esse comando usa as variáveis de ambiente que você definiu anteriormente.

    docker run -it --rm -p 9080:9080 \
       -e DB_SERVER_NAME=${DB_SERVER_NAME} \
       -e DB_NAME=${DB_NAME} \
       -e DB_USER=${DB_USER} \
       -e DB_PASSWORD=${DB_PASSWORD} \
       javaee-cafe:v1
    
  2. Depois que o contêiner for iniciado, acesse http://localhost:9080/ no navegador para acessar o aplicativo.

  3. Selecione Ctrl+C para parar.

Fazer upload da imagem no Registro de Contêiner do Azure

Carregue a imagem criada na instância do Registro de Contêiner que você criou na oferta:

docker tag javaee-cafe:v1 ${LOGIN_SERVER}/javaee-cafe:v1
docker login -u ${USER_NAME} -p ${PASSWORD} ${LOGIN_SERVER}
docker push ${LOGIN_SERVER}/javaee-cafe:v1

Implantar e testar o aplicativo

Use as etapas a seguir para implementar e testar o aplicativo:

  1. Conecte o cluster do AKS.

    Cole o valor de cmdToConnectToCluster em um shell e execute o comando.

  2. Aplique o segredo do banco de dados:

    cd $BASE_DIR/java-app/target
    kubectl apply -f db-secret.yaml
    

    A saída é secret/db-secret-sql created.

  3. Aplique o arquivo de implantação:

    kubectl apply -f openlibertyapplication-agic.yaml
    
  4. Aguarde até que todos os pods sejam reiniciados com êxito usando o seguinte comando:

    kubectl get pods --watch
    

    Uma saída semelhante ao exemplo a seguir indica que todos os pods estão em execução:

    NAME                                       READY   STATUS    RESTARTS   AGE
    javaee-cafe-cluster-agic-67cdc95bc-2j2gr   1/1     Running   0          29s
    javaee-cafe-cluster-agic-67cdc95bc-fgtt8   1/1     Running   0          29s
    javaee-cafe-cluster-agic-67cdc95bc-h47qm   1/1     Running   0          29s
    
  5. Verifique os resultados:

    1. Obtenha o endereço do recurso de entrada implantado com o aplicativo:

      kubectl get ingress
      

      Copie o valor de ADDRESS da saída. Esse valor é o endereço IP público de front-end da instância do Gateway de Aplicativo implantada.

    2. Acesse https://<ADDRESS> para testar o aplicativo. Para sua conveniência, esse comando de shell cria uma variável de ambiente cujo valor você pode colar diretamente no navegador:

      export APP_URL=https://$(kubectl get ingress | grep javaee-cafe-cluster-agic-ingress | cut -d " " -f14)/
      echo $APP_URL
      

      Se a página da Web não renderizar corretamente ou retornar um erro 502 Bad Gateway, o aplicativo ainda está começando em segundo plano. Aguarde alguns minutos e tente novamente.

Limpar os recursos

Para evitar cobranças do Azure, limpe recursos desnecessários. Quando o cluster não for mais necessário, use o comando az group delete para remover o grupo de recursos, o serviço de contêiner, o registro de contêiner, o banco de dados e todos os recursos relacionados:

az group delete --name $RESOURCE_GROUP_NAME --yes --no-wait
az group delete --name $DB_RESOURCE_GROUP_NAME --yes --no-wait

Próximas etapas

Você pode saber mais nas referências a seguir: