Поделиться через


Использование Java EE JCache с Open Liberty или WebSphere Liberty в кластере Служба Azure Kubernetes (AKS)

В этой статье описывается, как использовать JCache Java EE в контейнерном приложении, развернутом в AKS.

В руководстве описаны следующие действия:

  • Создайте инфраструктуру для запуска приложения Java, Java EE, Jakarta EE или MicroProfile в среде выполнения Open Liberty или WebSphere Liberty.
  • Используйте JCache Java EE, поддерживаемую Кэш Azure для Redis в качестве кэша сеансов.
  • Создание образа приложения Docker с использованием образов контейнеров Open Liberty или WebSphere Liberty.
  • Разверните контейнерное приложение в кластере AKS с использованием Open Liberty Operator.

Эта статья предназначена для быстрого развертывания. Прежде чем перейти к производству, вы должны исследовать Настройка Свободы.

Если вы заинтересованы в предоставлении отзывов или тесной работе с сценариями миграции с помощью группы разработчиков, разрабатывающей веб-sphere в решениях Azure, заполните этот короткий опрос по миграции WebSphere и включите контактные данные. Команда руководителей программ, архитекторов и инженеров будет быстро связаться с вами, чтобы начать тесное сотрудничество.

Необходимые компоненты

Создание инфраструктуры

В этом разделе описано, как создать инфраструктуру приложений в Azure. После выполнения этих действий у вас есть реестр контейнеров Azure, кластер службы Azure Kubernetes и экземпляр кэша Azure для Redis для запуска примера приложения.

Создание или изменение группы ресурсов

Группа ресурсов Azure — это логическая группа, в которой развертываются и управляются ресурсы Azure.

Создайте группу ресурсов с именем java-liberty-project с помощью команды az group create в расположении eastus. Эта группа ресурсов используется позже для создания экземпляра Реестр контейнеров Azure (ACR) и кластера AKS.

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

Создание экземпляра ACR

Используйте команду az acr create для создания экземпляра ACR. В следующем примере создается экземпляр ACR с именем youruniqueacrname. Убедитесь, что youruniqueacrname уникальна в Azure.

export REGISTRY_NAME=youruniqueacrname
az acr create \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $REGISTRY_NAME \
    --sku Basic

Через некоторое время вы увидите выходные данные JSON, которые содержат следующие данные:

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

Кроме того, можно создать экземпляр реестра контейнеров Azure, выполнив действия, описанные в кратком руководстве. Создание реестра контейнеров Azure с помощью портал Azure.

Подключение к экземпляру ACR

Перед отправкой образа в экземпляр ACR необходимо сначала в него войти. Выполните следующие команды, чтобы проверить подключение:

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

az acr login \
    --name $REGISTRY_NAME \
    --resource-group $RESOURCE_GROUP_NAME

Примечание.

Использование учетных данных пользователя и пароля для предоставления доступа к реестру контейнеров не рекомендуется. Если определенные требования к использованию предлагают доступ на основе учетных данных лучше всего подходит, вы можете получить имя пользователя и пароль, используя az acr credential show и использовать эти значения.docker login

При успешной авторизации в ACR вы должны увидеть Login Succeeded в конце выходных данных команды.

Если возникла проблема при входе в реестр контейнеров Azure, см . статью "Устранение неполадок входа в реестр".

Создание кластера AKS

Используйте команду az aks create для создания кластера AKS и предоставления ему разрешения на извлечение образа из экземпляра ACR. В следующем примере создается кластер с именем myAKSCluster с одним узлом. Выполнение этой команды занимает несколько минут.

export CLUSTER_NAME=myAKSCluster
az aks create \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $CLUSTER_NAME \
    --node-count 1 \
    --generate-ssh-keys \
    --enable-managed-identity \
    --attach-acr $REGISTRY_NAME

Через несколько минут команда завершает работу и возвращает данные в формате JSON о кластере, включая следующие строки:

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

Подключение к кластеру AKS

Управлять кластером Kubernetes можно c помощью kubectl, клиента командной строки Kubernetes. Чтобы установить kubectl локально, используйте команду az aks install-cli:

az aks install-cli

Чтобы настроить kubectl для подключения к кластеру Kubernetes, используйте команду az aks get-credentials. Эта команда скачивает учетные данные и настраивает интерфейс командной строки Kubernetes для их использования.

az aks get-credentials \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $CLUSTER_NAME \
    --overwrite-existing

Чтобы проверить подключение к кластеру, используйте команду kubectl get для получения списка узлов кластера.

kubectl get nodes

В следующем примере показан единый узел, созданный на предыдущих шагах. Убедитесь, что статус узла равен Ready.

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

Установка Open Liberty Operator

После создания кластера и подключения к нему установите 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.3.3
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

Создание экземпляра кэша Azure для Redis

Кэш Azure для Redis поддерживает сохраняемость HttpSession приложения Java, работающего на сервере Open Liberty или WebSphere Liberty. Выполните действия, описанные в этом разделе, чтобы создать экземпляр Кэш Azure для Redis и запишите сведения о подключении. Позже мы будем использовать эту информацию.

  1. Выполните действия, описанные в кратком руководстве. Используйте Кэш Azure для Redis в Java до, но не в том числе сведения о примере Java.

    Примечание.

    На шаге 7 раздела Создание кэша Azure для Redisвыберите Аутентификация с помощью ключей доступа для параметра Аутентификация на панели Дополнительно. Для оптимальной безопасности рекомендуется использовать идентификатор Microsoft Entra с управляемыми удостоверениями для авторизации запросов к кэшу, если это возможно. Авторизация с помощью идентификатора Microsoft Entra и управляемых удостоверений обеспечивает более высокую безопасность и удобство использования при авторизации ключа общего доступа. Дополнительные сведения об использовании управляемых удостоверений с кэшем см. в разделе Использование идентификатора Microsoft Entra для проверки подлинности кэша.

  2. Скопируйте имя узла и первичный ключ доступа для экземпляра Кэш Azure для Redis, а затем выполните следующие команды, чтобы добавить переменные среды:

    export REDISCACHEHOSTNAME=<YOUR_HOST_NAME>
    export REDISCACHEKEY=<YOUR_PRIMARY_ACCESS_KEY>
    

Сборка приложения

Выполните действия, описанные в этом разделе, чтобы создать и контейнеризировать пример приложения. Эти действия используют Maven, liberty-maven-pluginи az acr build. Дополнительные сведения о liberty-maven-plugin см. в статье Создание веб-приложения с помощью Maven.

Получение приложения для изменения

Используйте следующие команды, чтобы клонировать пример кода для этого руководства. Пример находится в репозитории open-liberty-on-aks на GitHub. В репозитории содержится несколько примеров. В этой статье используется java-app-jcache.

git clone https://github.com/Azure-Samples/open-liberty-on-aks.git
cd open-liberty-on-aks
git checkout 20240909
cd java-app-jcache

Если появится сообщение о состоянии detached HEAD, это сообщение можно проигнорировать. Это просто означает, что вы проверили тег.

Приложение имеет следующую структуру файлов:

java-app-jcache/
├── pom.xml
└── src
    └── main
        ├── aks
        │   └── openlibertyapplication.yaml
        ├── docker
        │   ├── Dockerfile
        │   └── Dockerfile-wlp
        ├── java
        ├── liberty
        │   └── config
        │       └── server.xml
        ├── redisson
        │   └── redisson-config.yaml
        ├── resources
        └── webapp

Каталоги java, ресурсов и веб-приложений содержат исходный код примера приложения.

В каталоге aks файл развертывания openlibertyapplication.yaml используется для развертывания образа приложения.

В каталоге Docker мы помещаем два файла Dockerfile . Dockerfile используется для создания образа с помощью Open Liberty и Dockerfile-wlp используется для создания образа с помощью WebSphere Liberty.

В каталоге liberty/config файл server.xml используется для настройки кэша сеансов для кластера Open Liberty и WebSphere Liberty.

В каталоге redisson файл redisson-config.yaml используется для настройки подключения экземпляра Кэш Azure для Redis.

Помещение приложения в контейнер

Чтобы развернуть и запустить приложение Liberty в кластере AKS, выполните следующие действия, чтобы контейнеризировать приложение в виде образа Docker. Вы можете использовать образы контейнеров Open Liberty или образы контейнеров WebSphere Liberty.

  1. Убедитесь, что текущий рабочий каталог — java-app-jcache в локальном клоне.

  2. Выполните команду mvn clean package, чтобы упаковать приложение.

  3. Запустите mvn -Predisson validate , чтобы скопировать файл конфигурации Redisson в указанное расположение. На этом шаге вставляются значения переменных REDISCACHEHOSTNAME среды и REDISCACHEKEY в файл redisson-config.yaml , на который ссылается файл server.xml .

  4. Выполните команду mvn liberty:dev, чтобы протестировать приложение. Если тест выполнен успешно, вы увидите The defaultServer server is ready to run a smarter planet. в выходных данных команды. Вы должны увидеть выходные данные, аналогичные приведенному ниже, если подключение Redis выполнено успешно.

    [INFO] [err] [Default Executor-thread-5] INFO org.redisson.Version - Redisson 3.23.4
    [INFO] [err] [redisson-netty-2-7] INFO org.redisson.connection.pool.MasterPubSubConnectionPool - 1 connections initialized for redacted.redis.cache.windows.net/20.25.90.239:6380
    [INFO] [err] [redisson-netty-2-20] INFO org.redisson.connection.pool.MasterConnectionPool - 24 connections initialized for redacted.redis.cache.windows.net/20.25.90.239:6380
    
  5. Вы можете просмотреть http://localhost:9080/ запущенное приложение, но подтверждение работы Redis — это выходные данные, перечисленные на предыдущем шаге.

  6. Чтобы остановить приложение, используйте клавиши CTRL+C.

  7. Используйте следующие команды для получения значений свойств artifactId и version, определенных в файле pom.xml:

    export artifactId=$(mvn -q -Dexec.executable=echo -Dexec.args='${project.artifactId}' --non-recursive exec:exec)
    export version=$(mvn -q -Dexec.executable=echo -Dexec.args='${project.version}' --non-recursive exec:exec)
    
  8. Выполните команду cd target, чтобы изменить каталог на сборку примера.

  9. Выполните одну из следующих команд, чтобы создать образ приложения и отправить его в экземпляр ACR.

    • Используйте следующую команду, чтобы создать базовый образ Open Liberty, если вы предпочитаете использовать Open Liberty в качестве упрощенного открытый код среды выполнения Java™:

      # Build and tag application image. This causes the ACR instance to pull the necessary Open Liberty base images.
      az acr build -t ${artifactId}:${version} -r $REGISTRY_NAME --resource-group $RESOURCE_GROUP_NAME .
      
    • Используйте следующую команду, чтобы создать базовый образ WebSphere Liberty, если вы предпочитаете использовать коммерческую версию Open Liberty:

      # Build and tag application image. This causes the ACR instance to pull the necessary WebSphere Liberty base images.
      az acr build -t ${artifactId}:${version} -r $REGISTRY_NAME --resource-group $RESOURCE_GROUP_NAME --file=Dockerfile-wlp .
      

Развертывание приложения

Выполните действия, описанные в этом разделе, чтобы развернуть контейнерное пример приложения в кластере AKS.

  1. Убедитесь, что текущий рабочий каталог — java-app-jcache/target в локальном клоне.

  2. Используйте следующие команды, чтобы создать секрет с информацией о конфигурации Redisson. С помощью этого секрета приложение может подключиться к созданному экземпляру Кэш Azure для Redis.

    export REDISSON_CONFIG_SECRET_NAME=redisson-config-secret
    kubectl create secret generic ${REDISSON_CONFIG_SECRET_NAME} --from-file=$(pwd)/liberty/wlp/usr/servers/defaultServer/redisson-config.yaml
    
  3. Используйте следующие команды для развертывания приложения Liberty с тремя репликами в кластере AKS. Выходные данные команды также отображаются встроенными.

    # Set number of application replicas
    export REPLICAS=3
    
    # Create OpenLibertyApplication "javaee-cafe-jcache-cluster"
    envsubst < openlibertyapplication.yaml | kubectl create -f -
    
    openlibertyapplication.openliberty.io/javaee-cafe-jcache-cluster created
    
    # Check if OpenLibertyApplication instance is created
    kubectl get openlibertyapplication ${artifactId}-cluster
    
    NAME                               IMAGE                                                         EXPOSED      RECONCILED   AGE
    javaee-cafe-jcache-cluster         youruniqueacrname.azurecr.io/javaee-cafe-jcache:1.0.0                      True         59s
    
    # Check if deployment created by Operator is ready
    kubectl get deployment ${artifactId}-cluster --watch
    
    NAME                               READY   UP-TO-DATE   AVAILABLE   AGE
    javaee-cafe-jcache-cluster         0/3     3            0           20s
    
  4. Подождите, пока не увидите 3/3READY столбец и 3 под столбцом AVAILABLE , а затем нажмите клавиши CTRL+C, чтобы остановить процесс отслеживания kubectl .

Тестирование приложения

При запуске приложения служба балансировки нагрузки Kubernetes предоставляет внешний интерфейс приложения в Интернете. Этот процесс может занять некоторое время.

Чтобы отслеживать ход выполнения, используйте команду kubectl get service с аргументом --watch.

kubectl get service ${artifactId}-cluster --watch

NAME                               TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)          AGE
javaee-cafe-jcache-cluster         LoadBalancer   10.0.50.29     20.84.16.169    80:31732/TCP     68s

После изменения адреса EXTERNAL-IP с pending на фактический общедоступный IP-адрес используйте CTRL+C, чтобы остановить процесс отслеживания kubectl.

Откройте веб-браузер на внешний IP-адрес службы (20.84.16.169 для предыдущего примера), чтобы просмотреть домашнюю страницу приложения. Если страница не загружена правильно, это связано с запуском приложения. Вы можете подождать некоторое время и обновить страницу позже. Имя модуля pod реплик приложения отображается в левом верхнем углу страницы (javaee-café-jcache-cluster-77d54bccd4-5xnzx для этого случая).

Screenshot of Java liberty application successfully deployed on A K S.Снимок экрана: приложение Java liberty успешно развернуто в A S.

В форме создания кофе в сеансе задайте значения полей "Имя" и "Цена", а затем нажмите кнопку "Отправить". Через несколько секунд вы увидите количество отправки: 1 отображается в левой части страницы.

Screenshot of sample application showing new coffee created and persisted in the session of the application.Снимок экрана: пример приложения, показывающий создание и сохранение нового кофе в сеансе приложения.

Чтобы продемонстрировать, что кэш сеансов сохраняется во всех репликах приложения, выполните следующую команду, чтобы удалить текущую реплику с именем javaee-cafe-jcache-cluster-<pod id from your running app>pod:

kubectl delete pod javaee-cafe-jcache-cluster-77d54bccd4-5xnzx

pod "javaee-cafe-jcache-cluster-77d54bccd4-5xnzx" deleted

Затем обновите домашнюю страницу приложения. Вы увидите те же данные, отображаемые в разделе "Новый кофе" в сеансе, но другое имя капсулы, отображаемое в левом верхнем углу страницы.

Наконец, выполните следующие действия, чтобы продемонстрировать, что данные сеанса сохраняются в экземпляре Кэш Azure для Redis. Команды можно выдавать экземпляру Кэш Azure для Redis с помощью консоли Redis.

  1. Найдите экземпляр Кэш Azure для Redis из портал Azure.

  2. Выберите консоль , чтобы открыть консоль Redis.

  3. Выполните следующие команды, чтобы просмотреть данные сеанса:

    scan 0 count 1000 match '*'
    
    hgetall "com.ibm.ws.session.attr.default_host%2F"
    
  4. Найдите café.model.entity.Coffee[id=1, name=Coffee 3, price=30.0] на веб-странице, которая представляет собой созданный и сохраненный кофе в экземпляре Кэш Azure для Redis.

Очистка ресурсов

Чтобы избежать расходов за использование Azure, необходимо удалить ненужные ресурсы. Если кластер больше не нужен, используйте команду az group delete для удаления группы ресурсов, службы контейнеров, реестра контейнеров и всех связанных ресурсов.

az group delete --name $RESOURCE_GROUP_NAME --yes --no-wait

Чтобы удалить экземпляр Кэш Azure для Redis, найдите имя группы ресурсов и выполните следующую команду:

az group delete --name <AZURE_CACHE_FOR_REDIS_RESOURCE_GROUP_NAME> --yes --no-wait

Следующие шаги

Дополнительные сведения можно найти по следующим ссылкам:

Сведения о возможностях запуска продуктов WebSphere в Azure см. в статье "Что такое решения для запуска семейства продуктов WebSphere в Azure?"