Implantar um aplicativo Java com o Open Liberty ou WebSphere Liberty em um cluster do AKS (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.
Se você tiver interesse em fornecer feedback ou trabalhar em seus cenários de migração em estreita colaboração com a equipe de engenharia que desenvolve o WebSphere para as soluções do Azure, responda a essa breve pesquisa sobre migração para o WebSphere e inclua seus dados de contato. A equipe de gerentes de programas, arquitetos e engenheiros entrará em contato prontamente com você para dar início a uma estreita colaboração.
Pré-requisitos
- Uma assinatura do Azure. Caso você não tenha uma assinatura do Azure, crie uma conta gratuita do Azure antes de começar.
- Prepare um computador local com o sistema operacional semelhante ao Unix instalado, como Ubuntu, Azure Linux, macOS ou Subsistema do Windows para Linux.
- Instalar 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 as etapas exibidas no terminal. Para obter outras opções de login, confira Entrar no Azure com a CLI do Azure.
- 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 de SE (Java Standard Edition), versão 17 ou posterior (por exemplo, Eclipse Open J9).
- Instale o Maven 3.5.0 ou posterior.
- Instalar o Docker para o seu sistema operacional.
- Verifique se o Git está instalado.
- Verifique se você foi atribuído à função
Owner
ou às funçõesContributor
eUser Access Administrator
na assinatura. Você pode verificá-lo seguindo as etapas em Listar atribuições de função para um usuário ou grupo.
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.
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.
Selecione Criar.
No painel Informações Básicas:
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
).Em Região, selecione Leste dos EUA.
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>
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.
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.
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.
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.
No canto de qualquer página do portal, selecione o botão de menu e selecione Grupos de recursos.
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.
Na lista de recursos no grupo de recursos, selecione o recurso com o valor Tipo de registro de Contêiner.
No painel de navegação, em Configurações, selecione Chaves de acesso.
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.
Volte para o grupo de recursos em que você implantou os recursos.
Na seção Configurações, selecione Implantações.
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
.No painel de navegação, selecione Saídas.
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
ouappDeploymentYaml
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 desecretName
.
Você usará esses valores mais adiante 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 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.
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;
.
Em seguida, use o comando a seguir para criar uma variável de ambiente em seu shell para o nome do grupo de recursos do banco de dados:
export DB_RESOURCE_GROUP_NAME=<db-resource-group>
Agora que você criou 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.
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
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. Acessehttp://localhost:9080/
no navegador e verifique se o aplicativo está acessível e se todas as funções estão operantes.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:
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
Depois que o contêiner for iniciado, acesse
http://localhost:9080/
no navegador para acessar o aplicativo.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:
Conecte o cluster do AKS.
Cole o valor de
cmdToConnectToCluster
em um shell e execute o comando.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
.Aplique o arquivo de implantação:
kubectl apply -f openlibertyapplication-agic.yaml
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
Verifique os resultados:
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.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:
- Serviço de Kubernetes do Azure
- Open Liberty
- Open Liberty Operator
- Configuração do servidor Open Liberty
Para obter mais informações sobre como implantar a família WebSphere da IBM no Azure, confira Quais são as soluções para executar a família de produtos do WebSphere no Azure?
Azure Kubernetes Service