Share via


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

Este artigo explica como:

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

O 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.

Para obter mais informações sobre o Open Liberty, consulte a página do projeto Open Liberty. Para obter mais informações sobre o IBM WebSphere Liberty, consulte a página do produto WebSphere Liberty.

Este artigo é uma orientação manual passo a passo para executar o Open/WebSphere Liberty no Azure. Para obter uma solução mais automatizada que acelera sua jornada para o AKS, consulte Implementar um aplicativo Java com o Open Liberty/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 Tuning Liberty.

Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar.

Pré-requisitos

  • Prepare uma máquina local com Windows, macOS ou Linux instalado.
  • Instale a CLI do Azure. Se você estiver executando no Windows ou macOS, considere executar a CLI do Azure em um contêiner do Docker. Para obter mais informações, consulte Como executar a CLI do Azure em um contêiner do Docker.
  • 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 SE, versão 17 ou posterior (por exemplo, Eclipse Open J9).
  • Instale o Maven versão 3.5.0 ou posterior.
  • 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 OwnerContributor funções e User Access Administrator na subscrição. Você pode verificar a atribuição seguindo as etapas em Listar atribuições de função do Azure usando o portal do Azure.

Nota

Também pode executar os comandos neste artigo a partir do Azure Cloud Shell. Essa abordagem tem todas as ferramentas de pré-requisito pré-instaladas, com exceção do Docker.

Iniciar sessão no Azure

Se você ainda não fez isso, entre em sua assinatura do Azure usando o comando az login e siga as instruções na tela.

az login

Nota

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 utilizam variáveis. Nas seções a seguir, a diferença será abordada em diferentes guias quando necessário.

Se você tiver vários locatários do Azure associados às suas credenciais do Azure, deverá especificar em qual locatário deseja entrar. Você pode fazer isso com a --tenant opção. 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 implementados e geridos.

Crie um grupo de recursos chamado java-liberty-project usando o comando az group create no local eastus. Esse grupo de recursos é usado posteriormente para criar a instância do Registro de Contêiner do Azure (ACR) e o cluster AKS.

export RESOURCE_GROUP_NAME=java-liberty-project
az group create --name $RESOURCE_GROUP_NAME --location eastus

Criar uma instância ACR

Use o comando az acr create para criar a instância do ACR. O exemplo a seguir cria uma instância ACR chamada youruniqueacrname. Certifique-se de que youruniqueacrname é 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 curto período de tempo, você verá uma saída JSON que contém as seguintes linhas:

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

Conectar-se à instância ACR

Você precisa entrar na instância do ACR antes de enviar uma imagem para ela. Execute os seguintes comandos 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ê deve ver Login Succeeded no final da saída do comando se você está conectado à instância ACR com êxito.

Criar um cluster do AKS

Utilize o comando az aks create para criar um cluster AKS. O exemplo seguinte cria um cluster com o nome myAKSCluster com um nó. Este 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 conclui e retorna informações formatadas em JSON sobre o cluster, incluindo a seguinte saída:

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

Conectar-se ao cluster AKS

Para gerenciar um cluster Kubernetes, use kubectl, o cliente de linha de comando do Kubernetes. Para instalar kubectl localmente, use o comando az aks install-cli , conforme mostrado no exemplo a seguir:

az aks install-cli

Para configurar kubectl para se ligar ao cluster do Kubernetes, utilize o comando az aks get-credentials. Este comando baixa 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

Nota

O comando acima 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 --fileo .

Para verificar a ligação ao cluster, utilize o comando kubectl get para devolver uma lista de nós do cluster.

kubectl get nodes

A saída de exemplo seguinte mostra o nó único criado nos passos anteriores. Verifique se o status do nó está Pronto:

NAME                                STATUS   ROLES   AGE     VERSION
aks-nodepool1-xxxxxxxx-yyyyyyyyyy   Ready    agent   76s     v1.23.8

Criar uma Base de Dados SQL do Azure

Nesta seção, você cria um banco de dados único do Banco de Dados SQL do Azure para uso com seu aplicativo.

Crie um único banco de dados no Banco de Dados SQL do Azure seguindo as etapas da CLI do Azure ou do PowerShell em Guia de início rápido: criar um banco de dados único do Banco de Dados SQL do Azure. Use as instruções a seguir ao longo do artigo e, em seguida, retorne a este documento depois de criar e configurar o servidor de banco de dados.

  1. Quando chegar à seção Definir valores de parâmetro do início rápido, copie e salve de lado os valores de todas as variáveis no exemplo de código rotulado Variable block, incluindo location, resourceGroup,database, server, logine password. Este artigo refere-se ao banco de dados resourceGroup como <db-resource-group>.

  2. Depois de criar o servidor de banco de dados, vá para 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.

    Captura de tela da configuração da rede de banco de dados SQL TLS 1.0.

  3. No painel Rede, na guia Acesso público, selecione Permitir que os serviços e recursos do Azure acessem este servidor.

    Captura de ecrã das regras de firewall - permitir o acesso aos recursos do Azure.

  4. Se você quiser testar o aplicativo localmente, verifique se o endereço IPv4 do cliente está na lista permitida de regras de firewall

    Captura de ecrã das regras de firewall - permitir o acesso do cliente.

  5. Salve suas alterações de rede.

  6. Use o seguinte comando para criar uma variável de ambiente 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 preparar o AKS para hospedar o Liberty.

Instalar o Open Liberty Operator

Depois de criar e conectar-se ao cluster, instale o Open Liberty Operator.

Instale o Open Liberty Operator executando os seguintes comandos:

# 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 implementar e executar seu aplicativo Liberty no cluster 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 tempo de execução do Liberty. Estas etapas usam o Maven.

Confira o aplicativo

Clone o código de exemplo para este guia. O exemplo está no GitHub. Existem algumas amostras no repositório. Este artigo usa java-app. Aqui está 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 vir uma mensagem sobre estar no estado "HEAD desanexado", é seguro ignorá-la. Isso significa apenas 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 de banco de dados para o cluster Open Liberty e WebSphere Liberty.

Compilar o projeto

Agora que você reuniu 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 <path-to-your-repo>/java-app

# The following variables will be 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) Teste o seu projeto localmente

Agora você pode executar e testar o projeto localmente antes de implantar no Azure. Por conveniência, use o liberty-maven-pluginarquivo . Para saber mais sobre o , consulte Criando um aplicativo Web com o liberty-maven-pluginMaven. Para seu aplicativo, você pode fazer algo semelhante usando qualquer outro mecanismo, como o IDE 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 nos documentos da Liberty.

Nota

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. Uma maneira de fazer isso é fazer logon no editor de consultas de banco de dados, conforme descrito em Guia de início rápido: use o editor de consultas do portal do Azure (visualização) para consultar o Banco de Dados SQL do Azure.

  1. Inicie o aplicativo usando liberty:runo . liberty:run usa as variáveis de ambiente definidas na etapa anterior.

    cd <path-to-your-repo>/java-app
    mvn liberty:run
    
  2. Verifique se o aplicativo funciona conforme o esperado. Você verá uma mensagem semelhante na [INFO] [AUDIT] CWWKZ0003I: The application javaee-cafe updated in 1.930 seconds. saída do comando, se for bem-sucedida. Vá para http://localhost:9080/ no seu navegador para verificar se o aplicativo está acessível e todas as funções estão funcionando.

  3. Pressione Ctrl+C para parar.

Crie a imagem para a implantação do AKS

Agora você pode executar o docker buildx build comando 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.

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

  3. Pressione Ctrl+C para parar.

Carregar os ficheiros de imagem para o ACR

Em seguida, carregue a imagem construída para o ACR que você criou nas etapas anteriores.

Se você ainda não fez 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 por push a imagem do contêiner:

docker tag javaee-cafe:v1 ${LOGIN_SERVER}/javaee-cafe:v1
docker push ${LOGIN_SERVER}/javaee-cafe:v1

Implantar o aplicativo no cluster AKS

Use as seguintes etapas para implantar o aplicativo Liberty no cluster AKS:

  1. Anexe a instância ACR ao cluster AKS para que o cluster AKS seja autenticado para extrair imagem da instância ACR, conforme mostrado no exemplo a seguir:

    az aks update \
        --resource-group $RESOURCE_GROUP_NAME \
        --name $CLUSTER_NAME \
        --attach-acr $REGISTRY_NAME
    
  2. Aplique o segredo de banco de dados e o arquivo de implantação executando os seguintes comandos:

    cd <path-to-your-repo>/java-app/target
    
    # Apply DB secret
    kubectl apply -f db-secret.yaml
    
    # Apply deployment file
    kubectl apply -f openlibertyapplication.yaml
    
  3. Determine se a OpenLibertyApplication instância é criada executando o seguinte comando:

    kubectl get openlibertyapplication javaee-cafe-cluster
    

    Você deve ver uma saída semelhante ao exemplo a seguir:

    NAME                        IMAGE                                                   EXPOSED   RECONCILED   AGE
    javaee-cafe-cluster         youruniqueacrname.azurecr.io/javaee-cafe:1.0.25         True         59s
    
  4. Determine se a implantação criada pelo operador está pronta executando o seguinte comando:

    kubectl get deployment javaee-cafe-cluster --watch
    

    Você deve ver uma saída semelhante ao exemplo a seguir:

    NAME                        READY   UP-TO-DATE   AVAILABLE   AGE
    javaee-cafe-cluster         0/3     3            0           20s
    
  5. Aguarde até ver 3/3 sob a READY coluna e 3 sob a AVAILABLE coluna e, em seguida, use Ctrl+C para parar o processo de kubectl observação.

Testar a aplicação

Quando o aplicativo é executado, um serviço de balanceador de carga do Kubernetes expõe o front-end do aplicativo à Internet. Este processo pode demorar algum tempo a concluir.

Para monitorar o progresso, use o comando kubectl get service com o --watch argumento, conforme mostrado no exemplo a seguir:

kubectl get service javaee-cafe-cluster --watch

Você deve ver uma saída semelhante ao exemplo a seguir:

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 mudar de pendente para um endereço IP público real, use Ctrl+C para interromper o kubectl processo de monitoramento.

Se tiver passado algum tempo entre a execução das etapas nesta seção e a anterior, verifique se o banco de dados está ativo, se necessário. Consulte a nota 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 estiver carregada corretamente, é porque o aplicativo está iniciando. Você pode esperar um pouco e atualizar a página mais tarde. Você deve ver o nome do pod das réplicas do seu aplicativo exibido no canto superior esquerdo 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 AKS.

Aplicação Java liberty implementada com sucesso no AKS.

Nota

Atualmente, o aplicativo não usa HTTPS. Recomendamos que você habilite o TLS com seus próprios certificados. Para obter mais informações, consulte Usar TLS com um controlador de entrada no Serviço Kubernetes do Azure (AKS).

Clean up resources (Limpar recursos)

Para evitar cobranças do Azure, você deve limpar 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óximos passos

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