Implementar um aplicativo Java com Open Liberty ou WebSphere Liberty em um cluster do Serviço Kubernetes do Azure (AKS)

Este artigo demonstra como:

  • Execute seu aplicativo Java, Java EE, Jakarta EE ou MicroProfile no tempo de execução do Open Liberty ou IBM WebSphere Liberty .
  • Crie a imagem do Docker do aplicativo usando imagens de contêiner Open Liberty ou WebSphere Liberty.
  • Implemente o aplicativo em contêiner em um cluster do Serviço Kubernetes do Azure (AKS) usando o Open Liberty Operator ou o WebSphere Liberty Operator.

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

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

  • Uma instância do Registro de Contêiner do Azure.
  • Um cluster AKS.
  • Uma instância AGIC (Application Gateway Ingress Controller).
  • 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 orientação passo a passo manual para executar o Liberty no AKS, consulte Implementar manualmente um aplicativo Java com o Open Liberty ou o WebSphere Liberty em um cluster do Serviço Kubernetes do Azure (AKS).

Este artigo destina-se a ajudá-lo a chegar rapidamente à implantação. Antes de ir para a produção, você deve explorar a documentação da IBM sobre o ajuste do Liberty.

Se você estiver interessado em fornecer comentários ou trabalhar em estreita colaboração em seus cenários de migração com a equipe de engenharia que desenvolve soluções WebSphere on Azure, preencha esta breve pesquisa sobre migração do WebSphere e inclua suas informações de contato. A equipe de gerentes de programa, arquitetos e engenheiros entrará prontamente em contato com você para iniciar uma estreita colaboração.

Pré-requisitos

  • Uma subscrição do Azure. Se não tiver uma subscrição do Azure, crie uma conta gratuita do Azure antes de começar.
  • Prepare uma máquina local com o sistema operacional Unix-like instalado - por exemplo, Ubuntu, Azure Linux, macOS ou Windows Subsystem for Linux.
  • Instale a CLI do Azure para executar comandos da CLI do Azure.
    • Entre na CLI do Azure usando o comando az login . Para concluir o processo de autenticação, siga os passos apresentados no seu terminal. Para outras opções de entrada, consulte Entrar no Azure com a CLI do Azure.
    • Quando solicitado, instale a extensão da CLI do Azure na primeira utilização. Para obter mais informações sobre extensões, consulte Usar e gerenciar extensões com a CLI do Azure.
    • Execute o comando az version para localizar a versão e as bibliotecas dependentes instaladas. Para atualizar para a versão mais recente, execute o comando az upgrade. Este artigo requer pelo menos a versão 2.31.0 da CLI do Azure.
  • Instale uma implementação Java Standard Edition (SE), versão 17 ou posterior (por exemplo, Eclipse Open J9).
  • Instale o Maven 3.5.0 ou superior.
  • Instale o Docker para seu sistema operacional.
  • Verifique se o Git está instalado.
  • Certifique-se de que lhe foi atribuída a função ou as Owner Contributor funções e User Access Administrator na subscrição. Você pode verificá-lo seguindo as etapas em Listar atribuições de função para um usuário ou grupo.

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

As etapas a seguir guiam você para criar um tempo de execução do Liberty no AKS. Depois de concluir essas etapas, você terá uma instância do Registro de contêiner e um cluster AKS para implantar seu aplicativo em contêiner.

  1. Aceda ao 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, pode ir diretamente à oferta.

  2. Selecione Criar.

  3. No painel Noções básicas:

    1. Criar um novo grupo de recursos. Como os grupos de recursos devem ser exclusivos em uma assinatura, escolha um nome exclusivo. Uma maneira 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 em seu shell para os nomes de grupo de recursos para o cluster e o banco de dados:

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

  4. Selecione Seguinte. No painel AKS, você pode, opcionalmente, selecionar um cluster AKS existente e uma instância do Registro de Contêiner, em vez de fazer com que a implantação crie novas. Essa opção permite que você use o padrão de sidecar, conforme mostrado na Central 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 AKS.

    Para os fins deste artigo, basta manter todos os padrões neste painel.

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

    • Para Rede virtual e Sub-rede, você pode, opcionalmente, personalizar a rede virtual e a sub-rede na qual a implantação coloca os recursos. Não é necessário alterar os valores restantes de seus padrões.

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

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

    • Você pode selecionar Ativar afinidade baseada em cookies, também conhecida como sessões adesivas. Este artigo usa sessões adesivas, por isso certifique-se de selecionar esta opção.

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

    • É possível implementar o WebSphere Liberty Operator selecionando Sim para a opção IBM suportada?. Deixando o padrão No implanta o Open Liberty Operator.
    • Você pode implantar um aplicativo para o operador selecionado selecionando Sim para a opção Implantar um aplicativo?. Deixar o padrão Não não implanta nenhum aplicativo.
  7. Selecione Rever + criar para validar as opções selecionadas. No painel Rever + criar, quando vir Criar ficar disponível depois de aprovada a 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ê se afastou do painel Implantação está em andamento , as etapas a seguir mostram como voltar a esse painel. 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, em seguida, selecione Grupos de recursos.

  2. Na caixa com o texto Filtro para qualquer campo, insira os primeiros caracteres do grupo de recursos que você criou 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 Type do registro Container.

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

  5. Guarde de lado os valores para Servidor de login, Nome do 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 no qual você implantou os recursos.

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

  8. Selecione a implantação mais baixa na lista. O valor Nome da implantação corresponde ao 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 que com os valores anteriores, salve de lado os valores para as seguintes saídas:

    • cmdToConnectToCluster
    • appDeploymentTemplateYaml se a implantação não incluir um aplicativo. Ou seja, você selecionou Não para Implantar um aplicativo? quando 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 secretNamee execute o comando.

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

Você usa esses valores posteriormente neste artigo. 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 único do Banco de Dados SQL do Azure para uso com seu aplicativo, siga as etapas em Guia de início rápido: criar um único banco de dados no Banco de Dados SQL do Azure. Observe cuidadosamente as seguintes diferenças:

  • Na etapa Noções básicas, anote os valores para Grupo de recursos, Nome do banco de dados,< Nome> do servidor.database.windows.net, Login de administrador do servidor e Senha. Este artigo refere-se ao valor do grupo de recursos do banco de dados como <db-resource-group>.

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

    Captura de ecrã do portal do Azure que mostra o separador Rede da página Criar Base de Dados SQL com as definições do método de conectividade e das regras de firewall realçadas.

Nota

A camada de computação sem servidor selecionada para esse banco de dados economiza dinheiro ao colocar o banco de dados em repouso durante os períodos de inatividade. O aplicativo de exemplo falhará se o banco de dados estiver suspenso 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á um exemplo de consulta: SELECT * FROM COFFEE;.

Em seguida, use o seguinte comando para criar uma variável de ambiente em 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ê criou o banco de dados e o cluster AKS, você pode continuar a preparar o AKS para hospedar seu aplicativo Open Liberty.

Configurar e implantar o aplicativo de exemplo

Siga as etapas nesta seção para implantar o aplicativo de exemplo no tempo de execução do Liberty. Estas etapas usam o Maven.

Confira o aplicativo

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

Existem algumas amostras no repositório. Este artigo usa java-app/. Execute os seguintes comandos para obter o exemplo:

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 vir uma mensagem sobre estar no estado "HEAD desanexado", pode ignorá-la com segurança. A mensagem significa apenas que você fez check-out de uma tag.

Aqui está 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 credenciais de conexão de banco de dados.
  • openlibertyapplication-agic.yaml: Use este arquivo para implantar o aplicativo Open Liberty com 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 implementar o aplicativo WebSphere Liberty com AGIC se você implementou o WebSphere Liberty Operator anteriormente neste artigo.
  • webspherelibertyapplication.yaml: Use este arquivo para implementar o aplicativo WebSphere Liberty sem AGIC se você implementou 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 construir a imagem do aplicativo com o WebSphere Liberty se você implementou o WebSphere Liberty Operator anteriormente neste artigo.

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

Compilar o projeto

Agora que você tem as propriedades necessárias, você pode criar o aplicativo. O arquivo POM para o projeto lê muitas variáveis do ambiente. Como parte da compilação do Maven, essas variáveis são usadas para preencher valores nos arquivos YAML localizados em src/main/aks. Você pode fazer algo semelhante para sua aplicação 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) Teste o seu projeto localmente

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

Para seu aplicativo, você pode fazer algo semelhante usando qualquer outro mecanismo, como seu ambiente de desenvolvimento local. Você também pode considerar o uso da liberty:devc opção destinada ao desenvolvimento com contêineres. Você pode ler 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 aparecerá na saída do comando. Vá para http://localhost:9080/ no seu navegador e verifique se o aplicativo está acessível e todas as funções estão funcionando.

  3. Selecione Ctrl+C para parar.

Crie a imagem para a implantação do AKS

Agora você pode executar o docker build comando para criar 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 seguintes etapas para testar a imagem do Docker localmente antes de implantar no Azure:

  1. Execute a imagem usando o seguinte comando. Este 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, vá para http://localhost:9080/ em seu navegador para acessar o aplicativo.

  3. Selecione Ctrl+C para parar.

Carregue a imagem no Registro de Contêiner do Azure

Carregue a imagem construída para a 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 seguintes etapas para implantar e testar o aplicativo:

  1. Conecte-se ao cluster 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
    

    O resultado é 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
    

    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 a partir da saída. Esse valor é o endereço IP público front-end da instância do Application Gateway implantada.

    2. Vá para https://<ADDRESS> testar o aplicativo. Para sua conveniência, este comando 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 502 Bad Gateway erro, o aplicativo ainda será iniciado em segundo plano. Aguarde alguns minutos e tente novamente.

Clean up resources (Limpar recursos)

Para evitar cobranças do Azure, você deve limpar recursos desnecessários. Quando não precisar mais do cluster, 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óximos passos

Você pode aprender mais com as seguintes referências:

Para obter mais informações sobre como implementar a família IBM WebSphere no Azure, consulte O que são soluções para executar a família de produtos WebSphere no Azure?