Compartilhar via


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 passo a passo para implantar manualmente o Open/WebSphere Liberty no Azure.

Mais especificamente, este artigo explica como realizar as seguintes tarefas:

  • Execute seu aplicativo Java, Java Enterprise Edition (EE), Jakarta EE ou MicroProfile no runtime do Open Liberty ou WebSphere Liberty.
  • Criar a imagem de Docker do aplicativo com az acr build usando imagens de contêiner do Liberty.
  • Implante o aplicativo em contêineres em um cluster do AKS (Serviço de Kubernetes do Azure) usando um Operador Liberty.

Um Operador Liberty simplifica a implantação e o gerenciamento de aplicativos em execução em clusters do 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 acelere sua jornada para o AKS usando uma solução do Marketplace disponível no portal do Azure, consulte Implantar um aplicativo Java com o Open Liberty/WebSphere Liberty em um cluster do 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

Entrar no Azure

Se você ainda não fez isso, use as seguintes etapas para entrar em sua assinatura do Azure:

  1. Abra a CLI do Azure ou o PowerShell e entre usando 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.

    Observação

    Se houver vários locatários do Azure associados às suas credenciais do Azure, você deverá especificar em qual locatário deseja entrar. Você pode especificar um locatário com a opção --tenant – por exemplo, az login --tenant contoso.onmicrosoft.com.

  2. Localize a versão e as bibliotecas dependentes instaladas usando az version.

  3. Atualize para a versão mais recente usando az upgrade.

Observação

Ao usar a CLI do Azure, se for solicitado que você instale uma extensão da CLI do Azure, faça isso. Para obter mais informações sobre extensões, confira Usar e gerenciar extensões com a CLI do Azure.

Você pode executar a maioria dos comandos da CLI do Azure no PowerShell da mesma forma que no Bash. A diferença existe apenas quando se usam variáveis. Nas seções a seguir, a diferença é abordada em abas distintas, quando necessário.

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.

Crie um grupo de recursos chamado java-liberty-project usando az group create no eastus2 local. Esse grupo de recursos é usado posteriormente para criar a instância do 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 eastus2

Criar uma instância do Registro de Contêiner

Use az acr create para criar a instância do registro de contêiner. O exemplo a seguir cria uma instância de registro de contêiner chamada <your-unique-ACR-name>. Substitua esse espaço reservado por um valor exclusivo no Azure.

Observação

Este artigo usa o mecanismo de autenticação sem senha recomendado para o Registro de Contêiner do Azure. Ainda é possível usar um nome de usuário e senha com docker login depois de usar az acr credential show para obter o nome de usuário e a senha. No entanto, o uso de um nome de usuário e senha é menos seguro do que a autenticação sem senha.

export REGISTRY_NAME=<your-unique-ACR-name>
az acr create \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $REGISTRY_NAME \
    --sku Basic

Após um curto período de tempo, você deverá ver a saída JSON que contém as linhas a seguir:

"provisioningState": "Succeeded",
"publicNetworkAccess": "Enabled",
"resourceGroup": "java-liberty-project",

Recupere o nome do servidor de autenticação para a instância do registro de contêineres. Você precisa desse valor ao implantar a imagem do aplicativo no cluster do AKS posteriormente.

export LOGIN_SERVER=$(az acr show \
    --name $REGISTRY_NAME \
    --query 'loginServer' \
    --output tsv)

Criar um cluster AKS

Use az aks create para criar um cluster do AKS, conforme mostrado no exemplo a seguir. Este exemplo cria um cluster do AKS chamado myAKSCluster com um nó e anexa a instância do registro de contêiner a ele. O 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 \
    --node-vm-size Standard_DS2_V2 \
    --generate-ssh-keys \
    --enable-managed-identity \
    --attach-acr $REGISTRY_NAME

Após a conclusão do comando, ele retorna informações formatadas em JSON sobre o cluster, incluindo a seguinte saída:

"nodeResourceGroup": "MC_java-liberty-project_myAKSCluster_eastus2",
"privateFqdn": null,
"provisioningState": "Succeeded",
"resourceGroup": "java-liberty-project",

Conecte-se ao cluster do AKS

Use as seguintes etapas para gerenciar seu cluster do Kubernetes:

  1. Instale kubectl, o cliente de linha de comando do Kubernetes, usando az aks install-cli, conforme mostrado no exemplo a seguir:

    az aks install-cli
    
  2. Use az aks get-credentials para configurar kubectl, a fim de conectar o cluster do Kubernetes. Esse comando baixa credenciais e configura a CLI do Kubernetes para usá-las, conforme mostrado no exemplo a seguir:

    Observação

    O comando usa o local padrão para o arquivo de configuração do Kubernetes, que é ~/.kube/config. Você pode especificar um local diferente para o arquivo de configuração do Kubernetes usando --file.

    az aks get-credentials \
        --resource-group $RESOURCE_GROUP_NAME \
        --name $CLUSTER_NAME \
        --overwrite-existing \
        --admin
    
  3. Verifique a conexão com o cluster usando kubectl get para retornar uma lista dos nós de cluster, conforme mostrado no exemplo a seguir:

    kubectl get nodes
    

    A saída de exemplo a seguir mostra o único nó criado nas etapas anteriores. Garanta que o status do nó seja Ready:

    NAME                                STATUS   ROLES   AGE     VERSION
    aks-nodepool1-xxxxxxxx-yyyyyyyyyy   Ready    <none>  76s     v1.29.9
    

Criar um Banco de Dados SQL do Azure

Crie um banco de dados único do Banco de Dados SQL do Azure para seu aplicativo usando as seguintes etapas:

  1. Use os comandos a seguir para definir variáveis de ambiente relacionadas ao banco de dados. Substitua <your-unique-sql-server-name> por um nome exclusivo para o servidor do Banco de Dados SQL do Azure.

    export SQL_SERVER_NAME=<your-unique-sql-server-name>
    export DB_NAME=demodb
    
  2. Use os comandos a seguir para criar um banco de dados individual e definir o usuário conectado atual como um administrador do Microsoft Entra. Para obter mais informações, consulte Início Rápido: Criar um banco de dados individual – Banco de Dados SQL do Azure.

    export ENTRA_ADMIN_NAME=$(az account show \
        --query user.name \
        --output tsv)
    
    az sql server create \
        --resource-group $RESOURCE_GROUP_NAME \
        --name $SQL_SERVER_NAME \
        --enable-ad-only-auth \
        --external-admin-principal-type User \
        --external-admin-name $ENTRA_ADMIN_NAME \
        --external-admin-sid $(az ad signed-in-user show --query id --output tsv)
    
    az sql db create \
        --resource-group $RESOURCE_GROUP_NAME \
        --name $DB_NAME \
        --server $SQL_SERVER_NAME \
        --edition GeneralPurpose \
        --compute-model Serverless \
        --family Gen5 \
        --capacity 2
    

Observação

Você cria um servidor SQL do Azure com a autenticação SQL desabilitada por considerações de segurança. Somente a ID do Microsoft Entra é usada para autenticar no servidor. Para obter mais informações sobre como habilitar a autenticação do SQL, consulte az sql server create.

Criar uma conexão de serviço no AKS com o Conector de Serviço

Use os comandos a seguir para criar uma conexão entre o cluster do AKS e o banco de dados SQL usando a ID de carga de trabalho do Microsoft Entra com o conector de serviço. Para obter mais informações, consulte Criar uma conexão de serviço no AKS com o Service Connector.

# Register the Service Connector and Kubernetes Configuration resource providers
az provider register --namespace Microsoft.ServiceLinker --wait
az provider register --namespace Microsoft.KubernetesConfiguration --wait

# Install the Service Connector passwordless extension
az extension add \
    --name serviceconnector-passwordless \
    --upgrade \
    --allow-preview true

# Retrieve the AKS cluster and Azure SQL Server resource IDs
export AKS_CLUSTER_RESOURCE_ID=$(az aks show \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $CLUSTER_NAME \
    --query id \
    --output tsv)

export AZURE_SQL_SERVER_RESOURCE_ID=$(az sql server show \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $SQL_SERVER_NAME \
    --query id \
    --output tsv)

# Create a user-assigned managed identity used for workload identity
export USER_ASSIGNED_IDENTITY_NAME=workload-identity-uami
az identity create \
    --resource-group ${RESOURCE_GROUP_NAME} \
    --name ${USER_ASSIGNED_IDENTITY_NAME}

# Retrieve the user-assigned managed identity resource ID
export UAMI_RESOURCE_ID=$(az identity show \
    --resource-group ${RESOURCE_GROUP_NAME} \
    --name ${USER_ASSIGNED_IDENTITY_NAME} \
    --query id \
    --output tsv)

# Create a service connection between your AKS cluster and your SQL database using Microsoft Entra Workload ID
az aks connection create sql \
    --connection akssqlconn \
    --client-type java \
    --source-id $AKS_CLUSTER_RESOURCE_ID \
    --target-id $AZURE_SQL_SERVER_RESOURCE_ID/databases/$DB_NAME \
    --workload-identity $UAMI_RESOURCE_ID

Solucionar problemas de mensagens de erro

Se o az aks connection create sql comando produzir uma mensagem de erro, localize a mensagem de erro na lista a seguir e use as instruções para solucionar o problema:

  • Dependency pyodbc can't be installed, please install it manually

    Essa mensagem de erro indica que o pyodbc pacote não pode ser instalado, provavelmente devido a problemas de permissões. Corrija o problema usando as seguintes etapas:

    1. Localize o local do Python que funciona com a CLI do Azure executando o seguinte comando:

      az --version
      

      A saída deve conter Python location - por exemplo, Python location '/opt/az/bin/python3'.

    2. Copie o valor Python location.

    3. Use o comando a seguir para instalar o pyodbc pacote no sudo modo. Substitua <python-location> pelo local do Python copiado na etapa anterior.

      sudo <python-location> -m pip install pyodbc
      
  • libodbc.so: não é possível abrir o arquivo de objeto compartilhado: nenhum arquivo ou diretório desse tipo

  • Instale manualmente odbc 17/18 para SQL Server

    Esses erros indicam que o odbc driver não está instalado. Corrija o problema usando as seguintes etapas:

    Observação

    Você deve usar a ID de Carga de Trabalho do Microsoft Entra para acesso seguro ao Banco de Dados SQL do Azure sem usar a autenticação SQL. Se você precisar usar a autenticação SQL, ignore as etapas nesta seção e use o nome de usuário e a senha para se conectar ao Banco de Dados SQL do Azure.

    1. Se você estiver usando o Linux, abra Instalar o driver ODBC da Microsoft para SQL Server (Linux). Se você estiver usando o MacOS, abra Instalar o driver ODBC da Microsoft para SQL Server (macOS).

    2. Siga as instruções para instalar o Microsoft ODBC Driver (18 ou 17) para SQL Server.

    3. Use az aks connection create sql novamente para criar a conexão de serviço, conforme mostrado no exemplo a seguir:

      az aks connection create sql \
          --connection akssqlconn \
          --client-type java \
          --source-id $AKS_CLUSTER_RESOURCE_ID \
          --target-id $AZURE_SQL_SERVER_RESOURCE_ID/databases/$DB_NAME \
          --workload-identity $UAMI_RESOURCE_ID
      

Obter a conta de serviço e o segredo criados pelo Service Connector

Para autenticar com o Banco de Dados SQL do Azure, use as seguintes etapas:

  1. Obtenha a conta de serviço e o segredo criados pelo Service Connector seguindo as instruções na seção Atualizar seu contêiner do Tutorial: Conectar um aplicativo AKS ao Banco de Dados SQL do Azure. Use a opção para criar diretamente uma implantação usando o snippet de código de exemplo YAML fornecido.

    Observação

    O segredo criado pelo Service Connector contém um AZURE_SQL_CONNECTIONSTRING valor, que é uma cadeia de conexão sem senha para o Banco de Dados SQL do Azure. Para obter mais informações, consulte o valor de exemplo da seção Identidade Gerenciada Atribuída pelo Usuário da Integração do Banco de Dados SQL do Azure com o Conector do Serviço.

  2. Nas seções realçadas no YAML de implantação do Kubernetes de exemplo, copie os valores serviceAccountName e secretRef.name, conforme mostrado no exemplo a seguir.

    serviceAccountName: <service-account-name>
    containers:
    - name: raw-linux
       envFrom:
          - secretRef:
             name: <secret-name>
    
  3. Defina variáveis de ambiente usando os comandos a seguir. Certifique-se de substituir <service-account-name> e <secret-name> pelos valores copiados na etapa anterior:

    export SERVICE_ACCOUNT_NAME=<service-account-name>
    export SECRET_NAME=<secret-name>
    

    Esses valores são usados na próxima seção para implantar o aplicativo Liberty no cluster do AKS.

Instalar o operador Open Liberty

Nesta seção, você instala o Operador do Open Liberty no cluster do AKS para hospedar o aplicativo Liberty.

Instale o Operador Open Liberty usando os seguintes comandos:

Observação

Este guia orienta você a instalar o Operador Open Liberty. Para usar o operador do WebSphere Liberty, consulte Instalando o operador WebSphere Liberty com a CLI do Kubernetes.

# Install cert-manager Operator
export CERT_MANAGER_VERSION=v1.11.2
kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/${CERT_MANAGER_VERSION}/cert-manager.yaml

# Install the Open Liberty Operator
export OPERATOR_VERSION=1.4.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

# Remove the downloaded files
rm -rf overlays base

Configurar e compilar a imagem do aplicativo

Para implantar e executar seu aplicativo Liberty no cluster do AKS, conteinerize seu aplicativo como uma imagem do Docker usando imagens de contêiner do Open Liberty Ou WebSphere Liberty.

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

Confira o aplicativo

Clone o código de exemplo deste guia usando os comandos a seguir. O exemplo está no repositório GitHub do Open Liberty/WebSphere Liberty no Serviço de Kubernetes do Azure , que contém alguns exemplos. Este artigo usa o java-app exemplo.

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

Se você vir uma mensagem sobre estar no estado detached HEAD, essa mensagem pode ser ignorada. Isso apenas significa que você fez check-out de uma tag. A clonagem do repositório cria a seguinte estrutura de arquivos:

java-app
├─ src/main/
│  ├─ aks/
│  │  ├─ openlibertyapplication-passwordless-db.yaml
│  ├─ docker/
│  │  ├─ Dockerfile
│  │  ├─ Dockerfile-wlp
│  ├─ liberty/config/
│  │  ├─ server.xml
│  ├─ java/
│  ├─ resources/
│  ├─ webapp/
├─ pom.xml
├─ pom-azure-identity.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, o arquivo openlibertyapplication-passwordless-db.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 arquivo server.xml é usado para configurar a conexão de banco de dados para o cluster Open Liberty e WebSphere Liberty. Ele define uma azure.sql.connectionstring variável usada para se conectar ao Banco de Dados SQL do Azure.

O arquivo pom.xml é o arquivo POM (modelo de objeto) de projeto Maven que contém as informações de configuração do projeto. O arquivo pom-azure-identity.xml declara a dependência azure-identity, que é usada para autenticar nos serviços do Azure usando a ID do Microsoft Entra.

Observação

Este exemplo usa a biblioteca azure-identity para autenticar no Banco de Dados SQL do Azure usando a autenticação do Microsoft Entra, que é recomendada para considerações de segurança. Para obter mais informações sobre como usar a autenticação SQL em seu aplicativo Liberty, consulte conexões de banco de dados relacionais com a Conectividade de Banco de Dados Java (JDBC).

Compilar o projeto

Agora que você reuniu as propriedades necessárias, crie o aplicativo usando os comandos a seguir. 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 target/
export LOGIN_SERVER=${LOGIN_SERVER}
export SC_SERVICE_ACCOUNT_NAME=${SERVICE_ACCOUNT_NAME}
export SC_SECRET_NAME=${SECRET_NAME}

mvn clean install
mvn dependency:copy-dependencies -f pom-azure-identity.xml -DoutputDirectory=target/liberty/wlp/usr/shared/resources

Compilar imagem para implantação do AKS

Use az acr build para criar a imagem, conforme mostrado no exemplo a seguir:

cd $BASE_DIR/java-app/target

az acr build \
    --registry ${REGISTRY_NAME} \
    --image javaee-cafe:v1 \
    .

O az acr build comando carrega os artefatos especificados no Dockerfile para a instância do registro de contêiner, cria a imagem e a armazena na instância do registro de contêiner.

Implantar o aplicativo no cluster AKS

Siga as etapas abaixo para implantar o aplicativo Liberty no cluster do AKS:

  1. Aplique o arquivo de implantação usando os seguintes comandos:

    cd $BASE_DIR/java-app/target
    
    # Apply deployment file
    kubectl apply -f openlibertyapplication-passwordless-db.yaml
    
  2. Determine se a OpenLibertyApplication instância é criada usando o seguinte comando:

    kubectl get openlibertyapplication javaee-cafe-cluster --watch
    

    O seguinte resultado é comum. Use Ctrl+C para sair.

    NAME                  IMAGE                                        EXPOSED   RECONCILED   RESOURCESREADY   READY   WARNING   AGE
    javaee-cafe-cluster   <registry-name>.azurecr.io/javaee-cafe:v1              True         True             True              57s
    
  3. Determine se a implantação criada pelo operador está pronta usando o seguinte comando:

    kubectl get deployment javaee-cafe-cluster --watch
    

    A saída a seguir é típica:

    NAME                        READY   UP-TO-DATE   AVAILABLE   AGE
    javaee-cafe-cluster         0/3     3            0           20s
    
  4. Aguarde até que você veja 3/3 na coluna READY e 3 na coluna AVAILABLE e, em seguida, use Ctrl+C para interromper o processo de inspeção kubectl.

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.

Use kubectl get service para obter o endereço IP externo do serviço quando ele estiver disponível, conforme mostrado no exemplo a seguir:

export APP_URL=http://$(kubectl get service javaee-cafe-cluster -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
echo $APP_URL

Observação

Se você não vir uma URL válida da saída, aguarde um pouco e execute o comando novamente.

Abra a URL em um navegador da Web e verifique a home page do aplicativo. Se a página não for carregada corretamente, atualize a página mais tarde, depois que o aplicativo for iniciado. Você deve ver o nome do pod de suas réplicas de aplicativo exibidas na parte superior esquerda da página. Espere alguns minutos e atualize a página para ver um nome de pod diferente exibido por conta do balanceamento de carga feito pelo cluster do AKS.

Captura de tela da home page do aplicativo Java Liberty.

Observação

Atualmente, o aplicativo não usa HTTPS. Recomendamos que você habilite o TLS (Transport Layer Security) com seus 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 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

Próximas etapas

Você pode saber mais com as seguintes referências usadas neste guia:

Para incorporar o Cache do Azure para Redis em um aplicativo Java, consulte Início Rápido: 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?