Tutorial: Migrar o Oracle WebLogic Server para o AKS (Serviço de Kubernetes do Azure) com o dimensionador KEDA com base nas métricas do Prometheus
Este tutorial mostra como migrar o Oracle WebLogic Server (WLS) para o AKS (Serviço de Kubernetes do Azure) e configurar o dimensionamento horizontal automático com base nas métricas do Prometheus.
Neste tutorial, você realizará as seguintes tarefas:
- Saiba quais métricas de aplicativo do WebLogic você pode exportar usando o WebLogic Monitoring Exporter.
- Implante e execute um aplicativo WebLogic no AKS usando uma oferta do Azure Marketplace.
- Habilite o serviço gerenciado para Prometheus do Azure Monitor usando uma oferta do Azure Marketplace.
- Alimente as métricas do WLS em um workspace do Azure Monitor usando uma oferta do Azure Marketplace.
- Integre o KEDA (Dimensionamento Automático Controlado por Eventos) do Kubernetes a um cluster do AKS usando uma oferta do Azure Marketplace.
- Crie um dimensionador KEDA com base nas métricas do Prometheus.
- Valide a configuração do dimensionador.
O diagrama a seguir ilustra a arquitetura que você cria:
A oferta do Oracle WebLogic Server no AKS executa um operador WLS e um domínio WLS no AKS. O operador WLS gerencia um domínio WLS implantado usando um tipo de origem de domínio de modelo em imagem. Para saber mais sobre o operador WLS, consulte Oracle WebLogic Kubernetes Operator.
O WebLogic Monitoring Exporter extrai as métricas do WebLogic Server e as alimenta no Prometheus. O exportador usa a interface de gerenciamento RESTful do WebLogic Server 12.2.1.x para acessar o estado e as métricas de runtime.
O serviço gerenciado do Azure Monitor para Prometheus coleta e salva métricas do WLS em escala, usando uma solução de monitoramento compatível com o Prometheus, com base no projeto Prometheus no Cloud Native Compute Foundation. Para obter mais informações, confira Serviço gerenciado do Azure Monitor para Prometheus.
Este artigo integra o KEDA ao cluster do AKS para dimensionar o cluster WLS com base nas métricas do Prometheus a partir do workspace do Azure Monitor. O KEDA monitora o serviço gerenciado do Azure Monitor para Prometheus e alimenta esses dados no AKS e no HPA (Dimensionador Automático de Pod Horizontal) para impulsionar o dimensionamento rápido da carga de trabalho do WLS.
O estado e as métricas do WLS a seguir são exportados por padrão. Você pode configurar o exportador para exportar outras métricas sob demanda. Para obter uma descrição detalhada da configuração e do uso do WebLogic Monitoring Exporter, consulte WebLogic Monitoring Exporter.
Pré-requisitos
- Uma assinatura do Azure. Se você não tiver uma assinatura do Azure, crie uma conta gratuita antes de começar.
- Verifique se você tem as funções
Owner
ouContributor
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. - Prepare um computador local que tenha Windows com WSL, GNU/Linux ou macOS instalado.
- Instale a CLI do Azure versão 2.54.0 ou superior para executar comandos da CLI do Azure.
- Instale e configure kubectl.
- Instale o cURL.
- Tenha as credenciais para uma conta de SSO (logon único) da Oracle. Para criar uma, consulte Criar conta Oracle.
- Siga estas etapas para aceitar os termos de licença do WLS:
- Acesse o Registro de Contêiner Oracle e entre.
- Se você tiver um direito de suporte, selecione Middleware e, em seguida, pesquise e selecione weblogic_cpu.
- Se você não tiver um direito de suporte da Oracle, selecione Middleware e, em seguida, pesquise e selecione weblogic.
- Aceite o contrato de licença.
Preparar o aplicativo de exemplo
Este artigo usa testwebapp do repositório weblogic-kubernetes-operator como um aplicativo de exemplo.
Use os comandos a seguir para baixar o aplicativo de exemplo predefinido e expandi-lo em um diretório. Como este artigo grava vários arquivos, esses comandos criam um diretório de nível superior para conter tudo o que é necessário.
export BASE_DIR=$PWD/wlsaks
mkdir $BASE_DIR && cd $BASE_DIR
curl -L -o testwebapp.war https://aka.ms/wls-aks-testwebapp
unzip -d testwebapp testwebapp.war
Modificar o aplicativo de exemplo
Este artigo usa a métrica openSessionsCurrentCount
para escala vertical ou horizontal do cluster WLS. Por padrão, o tempo limite da sessão no WebLogic Server é de 60 minutos. Para observar o recurso de redução de escala rapidamente, siga estas etapas para definir um tempo limite curto:
Use o comando a seguir para especificar um tempo limite de sessão de 150 segundos com
wls:timeout-secs
. O formatoHEREDOC
é usado para substituir o arquivo em testwebapp/WEB-INF/weblogic.xml com o conteúdo desejado.cat <<EOF > testwebapp/WEB-INF/weblogic.xml <?xml version="1.0" encoding="UTF-8"?> <wls:weblogic-web-app xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-web-app" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.4/weblogic-web-app.xsd"> <wls:weblogic-version>12.2.1</wls:weblogic-version> <wls:jsp-descriptor> <wls:keepgenerated>false</wls:keepgenerated> <wls:debug>false</wls:debug> </wls:jsp-descriptor> <wls:context-root>testwebapp</wls:context-root> <wls:session-descriptor> <wls:timeout-secs>150</wls:timeout-secs> </wls:session-descriptor> </wls:weblogic-web-app> EOF
Use o seguinte comando para recompactar o aplicativo de exemplo:
cd testwebapp && zip -r ../testwebapp.war * && cd ..
Criar uma conta de armazenamento do Azure e carregar o aplicativo
Use as etapas a seguir para criar um contêiner e uma conta de armazenamento. Algumas dessas etapas direcionam você para outros guias. Depois de concluir as etapas, você pode carregar um aplicativo de exemplo para implantar no WLS.
- Entre no portal do Azure.
- Crie uma conta de armazenamento seguindo as etapas em Criar uma conta de armazenamento. Use as seguintes especializações para os valores nesse artigo:
- Crie um um grupo de recursos para a conta de armazenamento:
- Em Região, selecione Leste dos EUA.
- Para Nome da conta de armazenamento, use o mesmo valor que o nome do grupo de recursos.
- Para Desempenho, selecione Standard.
- As guias restantes não precisam de especializações.
- Prossiga para validar e criar a conta e retorne a este artigo.
- Crie um contêiner de armazenamento na conta de acordo com as etapas na seção Criar um contêiner de Início Rápido: carregar, baixar e listar blobs com o portal do Azure.
- No mesmo artigo, siga as etapas na seção Carregar um blob de blocos para carregar o arquivo testwebapp.war. Depois, retorne a este artigo.
Implantar o WLS no AKS usando a oferta do Azure Marketplace
Nesta seção, você vai criar um cluster WLS no AKS usando a oferta do Oracle WebLogic Server no AKS. A oferta conta com um conjunto completo de recursos para implantar facilmente o WebLogic Server no AKS. Este artigo prioriza os recursos avançados de dimensionamento dinâmico da oferta. Para obter mais informações sobre a oferta, consulte Implantar um aplicativo Java com o WebLogic Server em um cluster do AKS (Serviço de Kubernetes do Azure). Para ver a documentação de referência completa da oferta, consulte a documentação da Oracle.
Esta oferta implementa as seguintes opções para dimensionamento automático horizontal:
Servidor de métricas do Kubernetes. Essa opção define todas as configurações necessárias no momento da implantação. Um dimensionador automático de pod horizontal (HPA) é implantado com uma opção de métricas. Você pode personalizar ainda mais o HPA após a implantação.
WebLogic Monitoring Exporter. Essa opção provisiona automaticamente o WebLogic Monitoring Exporter, o serviço gerenciado do Azure Monitor para Prometheus e o KEDA. Depois de implantar a oferta, as métricas do WLS são exportadas e salvas no workspace do Azure Monitor. O KEDA é instalado com a capacidade de recuperar métricas do workspace do Azure Monitor.
Com essa opção, você deve executar mais etapas após a implantação para concluir a configuração.
Este artigo descreve a segunda opção. Para concluir a configuração, realize as seguintes etapas:
Abra a oferta do Oracle WebLogic Server no AKS no navegador e selecione Criar. Você deve ver o painel Noções básicas da oferta.
Siga estas etapas para preencher o painel Noções básicas:
- Certifique-se de que o valor mostrado em Assinatura seja o mesmo que tem as funções listadas na seção de pré-requisitos.
- Você deve implantar a oferta em um grupo de recursos vazio. No campo Grupo de recursos, selecione Criar novo e preencha um valor exclusivo para o grupo de recursos; por exemplo, wlsaks-eastus-20240109.
- Em Detalhes da instância, em Região, selecione Leste dos EUA.
- Em Credenciais do WebLogic, forneça uma senha para a criptografia do Administrador do WebLogic e do Modelo do WebLogic, respectivamente. Salve o nome de usuário e a senha do Administrador do WebLogic.
- Ao lado de Configuração Básica Opcional, selecione Não.
- Em Configuração Básica Opcional, defina Tamanho máximo do cluster dinâmico como 10. Esse valor permite que você observe o comportamento de dimensionamento automático.
Selecione Avançar e vá para a guia AKS.
Em Seleção de imagem, execute as seguintes etapas:
- Para Nome de usuário para autenticação do Oracle Single Sign-On, preencha seu nome de usuário do Oracle SSO nos pré-requisitos.
- Para Senha para autenticação do Oracle Single Sign-On, preencha as credenciais do Oracle SSO nos pré-requisitos.
Realize as etapas a seguir em Aplicativo:
Na seção Aplicativo, ao lado de Implantar um aplicativo?, selecione Sim.
Ao lado de Pacote de aplicativos (.war, .ear, .jar), selecione Procurar.
Comece a digitar o nome da conta de armazenamento da seção anterior. Quando a conta de armazenamento desejada for exibida, selecione-a.
Selecione o contêiner de armazenamento da seção anterior.
Marque a caixa de seleção ao lado de testwebapp.war, que você carregou na seção anterior. Escolha Selecionar.
Selecione Avançar.
Deixe os valores padrão no painel Configuração TLS/SSL. Selecione Avançar para ir para o painel Balanceamento de Carga e siga estas etapas:
- Mantenha os valores padrão para todas as opções, exceto Criar entrada para o Console de Administração. Veja se não há um aplicativo com o caminho /console*, pois isso pode causar conflito com o caminho do Console de Administração. Selecione Sim nessa opção.
- Deixe os valores padrão nos campos restantes.
- Selecione Avançar.
Mantenha os valores padrão no painel DNS e selecione Avançar para ir ao painel Banco de Dados.
Mantenha os valores padrão para o painel Banco de Dados, selecione Avançar para ir ao painel Dimensionamento Automático e siga estas etapas:
- Ao lado de Provisionar recursos para dimensionamento automático horizontal?, selecione Sim.
- Em Configurações de dimensionamento automático horizontal, ao lado de Selecionar opção de dimensionamento automático., selecione WebLogic Monitor Exporter (dimensionamento automático avançado).
- Selecione Examinar + criar.
Aguarde até que Execução da validação final... seja concluída com êxito e selecione Criar. Depois de alguns instantes, você deverá ver a página Implantação, onde Implantação em andamento é exibido.
Se você encontrar problemas durante a Execução da validação final..., corrija-o e tente novamente.
Conecte-se ao cluster do AKS
As seções a seguir exigem que haja um terminal com kubectl
instalado para gerenciar o cluster WLS. Para instalar o kubectl
localmente, use o comando az aks install-cli.
Execute as seguintes etapas para se conectar ao cluster do AKS:
- Abra o portal do Azure e acesse o grupo de recursos que você provisionou na seção Implantar WLS no AKS usando a oferta do Azure Marketplace.
- Selecione o recurso do tipo serviço Kubernetes na lista de recursos.
- Selecione Conectar. As diretrizes para conectar o cluster do AKS são exibidas.
- Selecione CLI do Azure e siga as etapas para se conectar ao cluster do AKS em seu terminal local.
Recuperar métricas do workspace do Azure Monitor
Siga estas etapas para ver as métricas no workspace do Azure Monitor usando consultas PromQL (Prometheus Query Language):
No portal do Azure, exiba o grupo de recursos usado na seção Implantar o WLS no AKS usando a oferta do Azure Marketplace.
Selecione o recurso do tipo workspace do Azure Monitor.
Em Prometheus gerenciado, selecione Prometheus Explorer.
Insira
webapp_config_open_sessions_current_count
para consultar a conta atual de sessões abertas, conforme mostrado na captura de tela a seguir:
Observação
Use o seguinte comando para acessar as métricas pela exposição do WebLogic Monitoring Exporter:
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Service
metadata:
name: sample-domain1-cluster-1-exporter
namespace: sample-domain1-ns
spec:
ports:
- name: default
port: 8080
protocol: TCP
targetPort: 8080
selector:
weblogic.domainUID: sample-domain1
weblogic.clusterName: cluster-1
sessionAffinity: None
type: LoadBalancer
EOF
kubectl get svc -n sample-domain1-ns -w
Aguarde até que a coluna EXTERNAL-IP
na linha para sample-domain1-cluster-1-exporter
mude de <pending>
para um endereço IP. Em seguida, abra a URL http://<exporter-public-ip>:8080/metrics
em um navegador e entre com as credenciais especificadas ao implantar a oferta. Aqui, você pode encontrar todas as métricas disponíveis. Você pode inserir qualquer uma delas na janela PromQL para exibi-las no Azure Monitor. Por exemplo, heap_free_percent
mostra um gráfico interessante. Para observar a pressão da memória à medida que a carga é aplicada ao aplicativo, defina Atualização automática e Intervalo de tempo para o menor intervalo possível e deixe a guia aberta.
Criar o dimensionador KEDA
Os dimensionadores definem como e quando o KEDA deve dimensionar uma implantação. Este artigo usa o dimensionador do Prometheus para recuperar métricas do Prometheus a partir do workspace do Azure Monitor.
Este artigo usa openSessionsCurrentCount
como gatilho. A regra para essa métrica é descrita a seguir. Quando a contagem média de sessões abertas for superior a 10, aplique a escala vertical do cluster WLS até atingir o tamanho máximo da réplica. Caso contrário, aplique a escala horizontal do cluster WLS até que ele atinja seu tamanho mínimo de réplica. A tabela a seguir lista os parâmetros importantes:
Nome do parâmetro | Valor |
---|---|
serverAddress |
O ponto de extremidade de consulta do workspace do Azure Monitor. |
metricName |
webapp_config_open_sessions_current_count |
query |
sum(webapp_config_open_sessions_current_count{app="app1"}) |
threshold |
10 |
minReplicaCount |
1 |
maxReplicaCount |
O valor padrão é 5. Se você modificou o tamanho máximo do cluster durante a implantação da oferta, substitua pelo tamanho máximo do cluster. |
Como você selecionou WebLogic Monitoring Exporter no momento da implantação, um dimensionador KEDA está pronto para ser implantado. As etapas a seguir mostram como configurar o dimensionador KEDA para uso com o cluster do AKS:
Abra o portal do Azure e acesse o grupo de recursos que você provisionou na seção Implantar WLS no AKS usando a oferta do Azure Marketplace.
No painel de navegação, na seção Configurações, escolha Implantações. Você verá uma lista ordenada das implantações nesse grupo de recursos, com a mais recente primeiro.
Role até a entrada mais antiga nesta lista. Essa entrada corresponde à implantação iniciada na seção anterior. Selecione a implantação mais antiga, cujo nome começa com algo semelhante a
oracle.20210620-wls-on-aks
.Selecione Saídas. Essa opção mostra a lista de saídas da implantação.
O valor kedaScalerServerAddress é o endereço do servidor que salva as métricas WLS. O KEDA é capaz de acessar e recuperar métricas a partir do endereço.
O valor shellCmdtoOutputKedaScalerSample é a cadeia de caracteres
base64
de um dimensionador de exemplo. Copie o valor e execute-o no terminal. O resultado deve ser semelhante ao seguinte exemplo:echo -e YXBpVm...XV0aAo= | base64 -d > scaler.yaml
Esse comando produz um arquivo scaler.yaml no diretório atual.
Modifique as linhas
metric:
equery:
em scaler.yaml, conforme mostrado no exemplo a seguir:metricName: webapp_config_open_sessions_current_count query: sum(webapp_config_open_sessions_current_count{app="app1"})
Observação
Quando você implanta um aplicativo com a oferta, ele recebe o nome padrão de
app1
. Você pode seguir estas etapas para acessar o console de administração do WLS e obter o nome do aplicativo:- Execute as etapas anteriores para exibir as saídas de implantação.
- O valor adminConsoleExternalUrl é o link visível da Internet pública e totalmente qualificado para o console de administração do WLS. Selecione o ícone Copiar ao lado do valor do campo para copiar o link para a área de transferência.
- Cole o valor no navegador e abra o console de administração do WLS.
- Entre com a conta do administrador do WLS, que você salvou durante a seção Implantar o WLS no AKS usando a oferta do Azure Marketplace.
- Em Estrutura de Domínio, selecione Implantações. Veja que app1 está listado.
- Selecione app1 para descobrir que o valor Nome do aplicativo é
app1
. Useapp1
como nome do aplicativo na consulta.
Se desejar, modifique a linha
maxReplicaCount:
em scaler.yaml conforme mostrado no exemplo a seguir. É um erro definir esse valor maior do que o especificado no momento da implantação na guia AKS.maxReplicaCount: 10
Use o seguinte comando para criar a regra do dimensionador KEDA aplicando scaler.yaml:
kubectl apply -f scaler.yaml
A recuperação de métricas do workspace do Azure Monitor pelo KEDA leva alguns minutos. Use este comando para observar o status do dimensionador:
kubectl get hpa -n sample-domain1-ns -w
Depois que o dimensionador estiver pronto para funcionar, a saída será semelhante ao conteúdo a seguir. O valor na coluna
TARGETS
muda de<unknown>
para0
.NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE keda-hpa-azure-managed-prometheus-scaler Cluster/sample-domain1-cluster-1 0/10 (avg) 1 5 2 15s
Testar o dimensionamento automático
Agora, você já pode observar o recurso de dimensionamento automático. Este artigo abre novas sessões usando curl
para acessar o aplicativo. Depois que a contagem média de sessões for maior que 10, a ação de escala vertical ocorrerá. As sessões duram 150 segundos, e a contagem de sessões abertas diminui à medida que as sessões expiram. Depois que a contagem média de sessões for menor do que 10, a ação de escala horizontal ocorrerá. Execute as etapas a seguir para causar as ações de escala vertical e horizontal:
Siga estas etapas para obter o URL do aplicativo:
- Execute as etapas anteriores para exibir as saídas de implantação.
- O valor clusterExternalUrl é o link visível da Internet pública totalmente qualificado para o aplicativo de exemplo implantado no WLS neste cluster do AKS. Selecione o ícone de cópia ao lado do valor do campo para copiar o link em sua área de transferência.
- A URL para acessar testwebapp.war é
${clusterExternalUrl}testwebapp
; por exemplo,http://wlsgw202403-wlsaks0314-domain1.eastus.cloudapp.azure.com/testwebapp/
.
Execute o comando
curl
para acessar o aplicativo e causar novas sessões. O exemplo a seguir abre 22 novas sessões. As sessões expiram após 150 segundos. Substitua o valor WLS_CLUSTER_EXTERNAL_URL pelo seu.COUNTER=0 MAXCURL=22 WLS_CLUSTER_EXTERNAL_URL="http://wlsgw202403-wlsaks0314-domain1.eastus.cloudapp.azure.com/" APP_URL="${WLS_CLUSTER_EXTERNAL_URL}testwebapp/" while [ $COUNTER -lt $MAXCURL ]; do curl ${APP_URL}; let COUNTER=COUNTER+1; sleep 1;done
Em dois shells separados, use os seguintes comandos:
Use o comando a seguir para observar o dimensionador:
kubectl get hpa -n sample-domain1-ns -w
Esse comando produz uma saída semelhante ao seguinte exemplo:
$ kubectl get hpa -n sample-domain1-ns -w NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE keda-hpa-azure-managed-prometheus-scaler Cluster/sample-domain1-cluster-1 0/10 (avg) 1 10 1 24m keda-hpa-azure-managed-prometheus-scaler Cluster/sample-domain1-cluster-1 0/10 (avg) 1 10 1 24m keda-hpa-azure-managed-prometheus-scaler Cluster/sample-domain1-cluster-1 5/10 (avg) 1 10 1 26m keda-hpa-azure-managed-prometheus-scaler Cluster/sample-domain1-cluster-1 22/10 (avg) 1 10 1 27m keda-hpa-azure-managed-prometheus-scaler Cluster/sample-domain1-cluster-1 7334m/10 (avg) 1 10 3 29m keda-hpa-azure-managed-prometheus-scaler Cluster/sample-domain1-cluster-1 14667m/10 (avg) 1 10 3 48m keda-hpa-azure-managed-prometheus-scaler Cluster/sample-domain1-cluster-1 0/10 (avg) 1 10 3 30m keda-hpa-azure-managed-prometheus-scaler Cluster/sample-domain1-cluster-1 0/10 (avg) 1 10 3 35m keda-hpa-azure-managed-prometheus-scaler Cluster/sample-domain1-cluster-1 0/10 (avg) 1 10 1 35m keda-hpa-azure-managed-prometheus-scaler Cluster/sample-domain1-cluster-1 0/10 (avg) 1 10 5 53m
Em um shell separado, use o seguinte comando para observar os pods WLS:
kubectl get pod -n sample-domain1-ns -w
Esse comando produz uma saída semelhante ao seguinte exemplo:
$ kubectl get pod -n sample-domain1-ns -w NAME READY STATUS RESTARTS AGE sample-domain1-admin-server 2/2 Running 0 28h sample-domain1-managed-server1 2/2 Running 0 28h sample-domain1-managed-server1 2/2 Running 0 28h sample-domain1-managed-server2 0/2 Pending 0 0s sample-domain1-managed-server2 0/2 Pending 0 0s sample-domain1-managed-server2 0/2 ContainerCreating 0 0s sample-domain1-managed-server3 0/2 Pending 0 0s sample-domain1-managed-server3 0/2 Pending 0 0s sample-domain1-managed-server3 0/2 ContainerCreating 0 0s sample-domain1-managed-server3 1/2 Running 0 1s sample-domain1-admin-server 2/2 Running 0 95m sample-domain1-managed-server1 2/2 Running 0 94m sample-domain1-managed-server2 2/2 Running 0 56s sample-domain1-managed-server3 2/2 Running 0 55s sample-domain1-managed-server4 1/2 Running 0 9s sample-domain1-managed-server5 1/2 Running 0 9s sample-domain1-managed-server5 2/2 Running 0 37s sample-domain1-managed-server4 2/2 Running 0 42s sample-domain1-managed-server5 1/2 Terminating 0 6m46s sample-domain1-managed-server5 1/2 Terminating 0 6m46s sample-domain1-managed-server4 1/2 Running 0 6m51s sample-domain1-managed-server4 1/2 Terminating 0 6m53s sample-domain1-managed-server4 1/2 Terminating 0 6m53s sample-domain1-managed-server3 1/2 Running 0 7m40s sample-domain1-managed-server3 1/2 Terminating 0 7m45s sample-domain1-managed-server3 1/2 Terminating 0 7m45s
O gráfico no workspace do Azure Monitor é semelhante à seguinte captura de tela:
Limpar os recursos
Para evitar cobranças do Azure, limpe recursos desnecessários. Quando você não precisar mais do cluster, use o comando az group delete. Os comandos a seguir removem o grupo de recursos, o serviço de contêiner, o registro de contêiner e todos os recursos relacionados:
az group delete --name <wls-resource-group-name> --yes --no-wait
az group delete --name <ama-resource-group-name> --yes --no-wait
Próximas etapas
Continue a explorar as seguintes referências para ver outras opções para criar soluções de dimensionamento automático e executar o WLS no Azure: