Использование 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, прежде чем начать работу.
- Подготовьте локальный компьютер с установленной операционной системой, например Ubuntu, macOS или подсистема Windows для Linux.
- Установите Azure CLI для выполнения команд Azure CLI .
- Войдите с помощью Azure CLI с помощью команды
az login
. Чтобы выполнить аутентификацию, следуйте инструкциям в окне терминала. См. сведения о входе в Azure с помощью Azure CLI для других параметров входа. - Установите расширение Azure CLI при первом использовании, когда появится соответствующий запрос. Дополнительные сведения о расширениях см. в статье "Использование расширений и управление ими" с помощью Azure CLI.
- Запустите
az version
, чтобы найти установленные версии и зависимые библиотеки. Чтобы обновить до последней версии, запуститеaz upgrade
.
- Войдите с помощью Azure CLI с помощью команды
- Установите реализацию Java SE версии 17 или более поздней версии, например сборку OpenJDK майкрософт.
- Установите Maven 3.5.0 или более поздней версии.
- Установите Docker для своей операционной системы.
- Убедитесь, что установлен Git .
- Убедитесь, что вы были назначены как роль, так
Owner
иContributor
User Access Administrator
роли для подписки. Вы можете проверить назначения, выполнив действия, описанные в разделе "Перечисление назначений ролей" для пользователя или группы.
Создание инфраструктуры
В этом разделе описано, как создать инфраструктуру приложений в 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 и запишите сведения о подключении. Позже мы будем использовать эту информацию.
Выполните действия, описанные в кратком руководстве. Используйте Кэш Azure для Redis в Java до, но не в том числе сведения о примере Java.
Примечание.
На шаге 7 раздела Создание кэша Azure для Redisвыберите Аутентификация с помощью ключей доступа для параметра Аутентификация на панели Дополнительно. Для оптимальной безопасности рекомендуется использовать идентификатор Microsoft Entra с управляемыми удостоверениями для авторизации запросов к кэшу, если это возможно. Авторизация с помощью идентификатора Microsoft Entra и управляемых удостоверений обеспечивает более высокую безопасность и удобство использования при авторизации ключа общего доступа. Дополнительные сведения об использовании управляемых удостоверений с кэшем см. в разделе Использование идентификатора Microsoft Entra для проверки подлинности кэша.
Скопируйте имя узла и первичный ключ доступа для экземпляра Кэш 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.
Убедитесь, что текущий рабочий каталог — java-app-jcache в локальном клоне.
Выполните команду
mvn clean package
, чтобы упаковать приложение.Запустите
mvn -Predisson validate
, чтобы скопировать файл конфигурации Redisson в указанное расположение. На этом шаге вставляются значения переменныхREDISCACHEHOSTNAME
среды иREDISCACHEKEY
в файл redisson-config.yaml , на который ссылается файл server.xml .Выполните команду
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
Вы можете просмотреть
http://localhost:9080/
запущенное приложение, но подтверждение работы Redis — это выходные данные, перечисленные на предыдущем шаге.Чтобы остановить приложение, используйте клавиши CTRL+C.
Используйте следующие команды для получения значений свойств
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)
Выполните команду
cd target
, чтобы изменить каталог на сборку примера.Выполните одну из следующих команд, чтобы создать образ приложения и отправить его в экземпляр 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.
Убедитесь, что текущий рабочий каталог — java-app-jcache/target в локальном клоне.
Используйте следующие команды, чтобы создать секрет с информацией о конфигурации 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
Используйте следующие команды для развертывания приложения 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
Подождите, пока не увидите
3/3
READY
столбец и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 для этого случая).
Снимок экрана: приложение Java liberty успешно развернуто в A S.
В форме создания кофе в сеансе задайте значения полей "Имя" и "Цена", а затем нажмите кнопку "Отправить". Через несколько секунд вы увидите количество отправки: 1 отображается в левой части страницы.
Снимок экрана: пример приложения, показывающий создание и сохранение нового кофе в сеансе приложения.
Чтобы продемонстрировать, что кэш сеансов сохраняется во всех репликах приложения, выполните следующую команду, чтобы удалить текущую реплику с именем 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.
Найдите экземпляр Кэш Azure для Redis из портал Azure.
Выберите консоль , чтобы открыть консоль Redis.
Выполните следующие команды, чтобы просмотреть данные сеанса:
scan 0 count 1000 match '*' hgetall "com.ibm.ws.session.attr.default_host%2F"
Найдите 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
Следующие шаги
Дополнительные сведения можно найти по следующим ссылкам:
- Настройка сохраняемости сеанса Liberty с помощью JCache
- Поддержка JCache Redisson
- Настройка сервера Open Liberty
Сведения о возможностях запуска продуктов WebSphere в Azure см. в статье "Что такое решения для запуска семейства продуктов WebSphere в Azure?"