Implantar manualmente um aplicativo Java com o Open Liberty ou WebSphere Liberty em um cluster do AKS (Serviço de Kubernetes do Azure)
Este artigo fornece diretrizes manuais passo a passo para executar o Open/WebSphere Liberty no Azure.
Mais especificamente, este artigo explica como realizar as seguintes tarefas:
- Executar seu aplicativo Java, Java EE, Jacarta EE ou MicroProfile no runtime do Open Liberty ou do WebSphere Liberty.
- Criar a imagem de Docker do aplicativo usando imagens de contêiner do Liberty.
- Implantar o aplicativo conteinerizado em um cluster AKS (Serviço de Kubernetes do Azure) usando o Liberty Operator.
O 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.
Para obter uma solução mais automatizada que acelera sua jornada para o AKS, consulte Implantar um aplicativo Java com o Open Liberty/WebSphere Liberty em um cluster AKS (Serviço de Kubernetes do Azure).
Para obter mais informações sobre o Open Liberty, confira a página de projeto Open Liberty. Para mais informações sobre o IBM WebSphere Liberty, confira a página de produto WebSphere Liberty.
Este artigo tem o objetivo de ajudá-lo a iniciar rapidamente a implementação. Antes de acessar a produção, você deve explorar o Ajuste do 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. Se você não tiver uma assinatura do Azure, crie uma conta gratuita antes de começar.
- Prepare uma máquina local com Windows, macOS ou Linux instalado.
- Instale a CLI do Azure 2.3.1.0 ou superior para executar comandos da CLI do Azure.
- Entre com a CLI do Azure usando o comando az login. Para concluir o processo de autenticação, siga as etapas exibidas no terminal. Para ver outras opções de entrada, consulte Conectar-se ao 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.
- Instale uma implementação de SE (Java Standard Edition), versão 17 ou posterior (por exemplo, Eclipse Open J9).
- Instale o Maven versão 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 verificar a atribuição pelas etapas em Listar atribuições de função do Azure usando o portal do Azure.
Entrar no Azure
Se ainda não tiver feito isso, acesse assinatura do Azure usando o comando az login e siga as instruções na tela.
az login
Observação
Você pode executar a maioria dos comandos da CLI do Azure no PowerShell da mesma forma que no Bash. A diferença está apenas ao usar variáveis. Nas seções a seguir, a diferença é abordada em diferentes guias quando necessário.
Se houver vários locatários do Azure associados às suas credenciais do Azure, você deverá especificar em qual locatário deseja entrar. Isso pode ser feito com a opção --tenant
. Por exemplo, az login --tenant contoso.onmicrosoft.com
.
Criar um grupo de recursos
Um grupo de recursos do Azure é um grupo lógico no qual os recursos do Azure são implantados e gerenciados.
Vamos criar um grupo de recursos, java-liberty-project usando o comando az group create na localização eastus. Esse grupo de recursos é usado posteriormente para criar a instância de ACR (Registro de Contêiner do Azure) e o cluster do AKS.
export RESOURCE_GROUP_NAME=java-liberty-project
az group create --name $RESOURCE_GROUP_NAME --location eastus
Criar uma instância de ACR
Use o comando az acr create para criar a instância de ACR. O exemplo a seguir cria uma instância de ACR chamada youruniqueacrname. Certifique-se de que youruniqueacrname seja exclusivo no Azure.
export REGISTRY_NAME=youruniqueacrname
az acr create \
--resource-group $RESOURCE_GROUP_NAME \
--name $REGISTRY_NAME \
--sku Basic \
--admin-enabled
Após um breve período, você verá uma saída JSON que contém as seguintes linhas:
"provisioningState": "Succeeded",
"publicNetworkAccess": "Enabled",
"resourceGroup": "java-liberty-project",
Conecte-se à instância de ACR
Você precisará entrar na instância de ACR antes de poder enviar uma imagem por push a ela. Use os comandos a seguir para verificar a conexão:
export LOGIN_SERVER=$(az acr show \
--name $REGISTRY_NAME \
--query 'loginServer' \
--output tsv)
export USER_NAME=$(az acr credential show \
--name $REGISTRY_NAME \
--query 'username' \
--output tsv)
export PASSWORD=$(az acr credential show \
--name $REGISTRY_NAME \
--query 'passwords[0].value' \
--output tsv)
docker login $LOGIN_SERVER -u $USER_NAME -p $PASSWORD
Você deverá ver Login Succeeded
no final da saída do comando se tiver feito logon na instância de ACR com êxito.
Criar um cluster AKS
Use o comando az aks create para criar um cluster do AKS. O exemplo a seguir cria um cluster chamado myAKSCluster com um nó. Esse comando leva vários minutos para ser concluído.
export CLUSTER_NAME=myAKSCluster
az aks create \
--resource-group $RESOURCE_GROUP_NAME \
--name $CLUSTER_NAME \
--node-count 1 \
--generate-ssh-keys \
--enable-managed-identity
Após alguns minutos, o comando é concluído e retorna informações formatadas em JSON sobre o cluster, incluindo a saída a seguir:
"nodeResourceGroup": "MC_java-liberty-project_myAKSCluster_eastus",
"privateFqdn": null,
"provisioningState": "Succeeded",
"resourceGroup": "java-liberty-project",
Conecte-se ao cluster do AKS
Para gerenciar um cluster do Kubernetes, use kubectl, o cliente de linha de comando do Kubernetes. Para instalar o kubectl
localmente, use o comando az aks install-cli, conforme mostrado no exemplo a seguir:
az aks install-cli
Para configurar o kubectl
para se conectar ao cluster do Kubernetes, use o comando az aks get-credentials. Este comando baixa as credenciais e configura a CLI do Kubernetes para usá-las.
az aks get-credentials \
--resource-group $RESOURCE_GROUP_NAME \
--name $CLUSTER_NAME \
--overwrite-existing \
--admin
Observação
O comando acima usa a localização padrão para o arquivo de configuração do Kubernetes, que é ~/.kube/config
. Você pode especificar outro local para o arquivo de configuração do Kubernetes usando --file
.
Para verificar a conexão com o cluster, use o comando kubectl get para retornar uma lista dos nós de cluster.
kubectl get nodes
A saída de exemplo a seguir mostra o único nó criado nas etapas anteriores. Verifique se o status do nó é Pronto:
NAME STATUS ROLES AGE VERSION
aks-nodepool1-xxxxxxxx-yyyyyyyyyy Ready agent 76s v1.23.8
Criar um Banco de Dados SQL do Azure
Nesta seção, você cria um banco de dados individual do Banco de Dados SQL do Azure para usar com seu aplicativo.
Crie um banco de dados individual no Banco de Dados SQL do Azure seguindo as etapas da CLI do Azure ou do PowerShell em Início Rápido: criar um banco de dados individual do Banco de Dados SQL do Azure. Use as instruções a seguir ao ler o artigo e, em seguida, retorne a este documento depois de criar e configurar o servidor de banco de dados.
Quando você acessar a seção Definir valores de parâmetro do início rápido, copie e salve os valores de todas as variáveis no exemplo de código rotulado
Variable block
, incluindolocation
,resourceGroup
,database
,server
,login
epassword
. Este artigo refere-se ao banco de dadosresourceGroup
como<db-resource-group>
.Depois de criar o servidor de banco de dados, acesse o servidor recém-criado no portal do Azure. No painel Rede, na guia Conectividade, defina a Versão mínima do TLS como TLS 1.0.
No painel Rede, na guia Acesso público, selecione Permitir que serviços e recursos do Azure acessem este servidor.
Se você quiser testar o aplicativo localmente, verifique se o endereço IPv4 do cliente está na lista de permissões de Regras do firewall
Salve suas alterações de rede.
Use o seguinte comando para criar uma variável de ambiente 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, pode preparar o AKS para hospedar o Liberty.
Instalar o Open Liberty Operator
Depois de criar e conectar-se ao cluster, instale o Operador do Open Liberty.
Execute os seguintes comandos para instalar o Open Liberty Operator:
# Install cert-manager Operator
CERT_MANAGER_VERSION=v1.11.2
kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/${CERT_MANAGER_VERSION}/cert-manager.yaml
# Install Open Liberty Operator
export OPERATOR_VERSION=1.2.2
mkdir -p overlays/watch-all-namespaces
wget https://raw.githubusercontent.com/OpenLiberty/open-liberty-operator/main/deploy/releases/${OPERATOR_VERSION}/kustomize/overlays/watch-all-namespaces/olo-all-namespaces.yaml -q -P ./overlays/watch-all-namespaces
wget https://raw.githubusercontent.com/OpenLiberty/open-liberty-operator/main/deploy/releases/${OPERATOR_VERSION}/kustomize/overlays/watch-all-namespaces/cluster-roles.yaml -q -P ./overlays/watch-all-namespaces
wget https://raw.githubusercontent.com/OpenLiberty/open-liberty-operator/main/deploy/releases/${OPERATOR_VERSION}/kustomize/overlays/watch-all-namespaces/kustomization.yaml -q -P ./overlays/watch-all-namespaces
mkdir base
wget https://raw.githubusercontent.com/OpenLiberty/open-liberty-operator/main/deploy/releases/${OPERATOR_VERSION}/kustomize/base/kustomization.yaml -q -P ./base
wget https://raw.githubusercontent.com/OpenLiberty/open-liberty-operator/main/deploy/releases/${OPERATOR_VERSION}/kustomize/base/open-liberty-crd.yaml -q -P ./base
wget https://raw.githubusercontent.com/OpenLiberty/open-liberty-operator/main/deploy/releases/${OPERATOR_VERSION}/kustomize/base/open-liberty-operator.yaml -q -P ./base
wget https://raw.githubusercontent.com/OpenLiberty/open-liberty-operator/main/deploy/releases/${OPERATOR_VERSION}/kustomize/base/open-liberty-roles.yaml -q -P ./base
kubectl create namespace open-liberty
kubectl apply --server-side -k overlays/watch-all-namespaces
Configurar e compilar a imagem do aplicativo
Para implantar e executar seu aplicativo do Liberty no cluster de AKS, conteinerize seu aplicativo como uma imagem do Docker usando imagens de contêiner do Open Liberty ou imagens de contêiner do WebSphere Liberty.
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 guia. O exemplo está no GitHub. Há alguns exemplos no repositório. Este artigo usa java-app. Esta é a estrutura de arquivos do aplicativo.
git clone https://github.com/Azure-Samples/open-liberty-on-aks.git
cd open-liberty-on-aks
git checkout 20230830
Se você vir uma mensagem sobre estar no estado "detached HEAD", essa mensagem pode ser ignorada com segurança. Isso apenas significa que você fez check-out de uma tag.
java-app
├─ src/main/
│ ├─ aks/
│ │ ├─ db-secret.yaml
│ │ ├─ openlibertyapplication.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á dois arquivos de implantação. db-secret.xml é usado para criar Segredos do Kubernetes com credenciais de conexão de banco de dados. O arquivo openlibertyapplication.yaml é usado para implantar a imagem do aplicativo. No diretório docker, há dois arquivos para criar a imagem do aplicativo com o Open Liberty ou o WebSphere Liberty.
No diretório liberty/config, o server.xml é usado para configurar a conexão do banco de dados para o cluster do Open Liberty e do WebSphere Liberty.
Compilar o projeto
Agora que você reuniu 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 <path-to-your-repo>/java-app
# The following variables are used for deployment file generation into target/
export LOGIN_SERVER=${LOGIN_SERVER}
export REGISTRY_NAME=${REGISTRY_NAME}
export USER_NAME=${USER_NAME}
export PASSWORD=${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>
mvn clean install
(Opcional) Testar o projeto localmente
Agora, você pode executar e testar o projeto localmente antes de implantar o Azure. Para sua conveniência, use o liberty-maven-plugin
. Para saber mais sobre o liberty-maven-plugin
, confira Como compilar um aplicativo Web com o Maven. Para o aplicativo, você pode fazer algo semelhante usando qualquer outro mecanismo, como o IDE local. Você também pode considerar o uso da opção liberty:devc
destinada ao desenvolvimento com contêineres. Leia mais sobre liberty:devc
nos documentos do Liberty.
Observação
Se você selecionou uma implantação de banco de dados "sem servidor", verifique se o banco de dados SQL não entrou no modo de pausa. Faça isso entrando no editor de consultas do banco de dados, conforme descrito em Início Rápido: Usar o editor de consultas do portal do Azure (versão prévia) para consultar o Banco de Dados SQL do Azure.
Inicie o aplicativo usando
liberty:run
.liberty:run
usa as variáveis de ambiente definidas na etapa anterior.cd <path-to-your-repo>/java-app mvn liberty:run
Verifique se o aplicativo funciona conforme o esperado. Você deverá ver uma mensagem semelhante a
[INFO] [AUDIT] CWWKZ0003I: The application javaee-cafe updated in 1.930 seconds.
na saída do comando, se tiver êxito. Acessehttp://localhost:9080/
no navegador para verificar se o aplicativo está acessível e se todas as funções estão operantes.Pressione Ctrl+C para parar.
Compilar imagem para implantação do AKS
Agora você pode executar o comando docker buildx build
para criar a imagem, conforme mostrado no exemplo a seguir:
cd <path-to-your-repo>/java-app/target
# If you are running with Open Liberty
docker buildx --platform linux/amd64 build -t javaee-cafe:v1 --pull --file=Dockerfile .
# If you are running with WebSphere Liberty
docker buildx --platform linux/amd64 build -t javaee-cafe:v1 --pull --file=Dockerfile-wlp .
(Opcional) Testar a imagem do Docker localmente
Agora, você pode usar 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 definidas 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.Pressione Ctrl+C para parar.
Carregar a imagem para ACR
Então, carregue a imagem compilada no ACR criado nas etapas anteriores.
Se ainda não tiver feito isso, entre no registro de contêiner usando o seguinte comando:
docker login -u ${USER_NAME} -p ${PASSWORD} ${LOGIN_SERVER}
Use os seguintes comandos para marcar e enviar a imagem do contêiner por push:
docker tag javaee-cafe:v1 ${LOGIN_SERVER}/javaee-cafe:v1
docker push ${LOGIN_SERVER}/javaee-cafe:v1
Implantar o aplicativo no cluster AKS
Siga as etapas abaixo para implantar o aplicativo Liberty no cluster do AKS:
Anexe a instância do ACR ao cluster AKS para que o cluster AKS seja autenticado para extrair a imagem da instância do ACR, conforme mostrado no exemplo a seguir:
az aks update \ --resource-group $RESOURCE_GROUP_NAME \ --name $CLUSTER_NAME \ --attach-acr $REGISTRY_NAME
Aplique o segredo do banco de dados e o arquivo de implantação executando os seguintes comandos:
cd <path-to-your-repo>/java-app/target # Apply database secret kubectl apply -f db-secret.yaml # Apply deployment file kubectl apply -f openlibertyapplication.yaml
Execute o seguinte comando para determinar se a instância
OpenLibertyApplication
é criada:kubectl get openlibertyapplication javaee-cafe-cluster
Você deverá ver uma saída semelhante ao seguinte exemplo:
NAME IMAGE EXPOSED RECONCILED AGE javaee-cafe-cluster youruniqueacrname.azurecr.io/javaee-cafe:1.0.25 True 59s
Execute o seguinte comando para determinar se a implantação criada pelo operador está pronta:
kubectl get deployment javaee-cafe-cluster --watch
Você deverá ver uma saída semelhante ao seguinte exemplo:
NAME READY UP-TO-DATE AVAILABLE AGE javaee-cafe-cluster 0/3 3 0 20s
Aguarde até que você veja
3/3
na colunaREADY
e3
na colunaAVAILABLE
e, em seguida, use Ctrl+C para interromper o processo de inspeçãokubectl
.
Testar o aplicativo
Quando o aplicativo for executado, o serviço de balanceamento de carga do Kubernetes expõe o aplicativo front-end à internet. Esse processo pode levar algum tempo para ser concluído.
Para monitorar o progresso, use o comando kubectl get service com o argumento --watch
, conforme mostrado no exemplo a seguir:
kubectl get service javaee-cafe-cluster --watch
Você deverá ver uma saída semelhante ao seguinte exemplo:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
javaee-cafe-cluster LoadBalancer 10.0.251.169 52.152.189.57 80:31732/TCP 68s
Depois que o endereço EXTERNAL-IP for alterado de pendente para um endereço IP público real, use Ctrl+C para interromper o processo de inspeção do kubectl
.
Se algum tempo se passou entre a execução das etapas desta seção e a anterior, verifique se o banco de dados está ativo, se necessário. Consulte a observação anterior sobre a pausa do banco de dados.
Abra um navegador da Web para o endereço IP externo do seu serviço (52.152.189.57
para o exemplo acima) para ver a página inicial do aplicativo. Se a página não for carregada corretamente, é porque o aplicativo está sendo iniciado. Aguarde e atualize a página mais tarde. Você deve ver o nome do pod de suas réplicas de aplicativo exibidas na parte superior esquerda da página. Aguarde alguns minutos e atualize a página para ver um nome de pod diferente exibido devido ao balanceamento de carga fornecido pelo cluster do AKS.
Observação
Atualmente, o aplicativo não usa HTTPS. É recomendável habilitar o TLS com os próprios certificados. Para obter mais informações, consulte Usar o TLS com um controlador de entrada no AKS (Serviço de Kubernetes do Azure).
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 sobre as referências usadas neste guia:
- Serviço de Kubernetes do Azure
- Open Liberty
- Open Liberty Operator
- Configuração do Servidor Open Liberty
- Plug-in do Liberty Maven
- Imagens de contêiner do Open Liberty
- Imagens de contêiner do WebSphere Liberty
Para incorporar o Cache do Azure para Redis em um aplicativo Java, consulte Usar o Cache do Azure para Redis em Java com o cliente Redisson Redis.
Para explorar as opções para executar produtos WebSphere no Azure, consulte Quais são as soluções para executar a família de produtos WebSphere no Azure?