Использование 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.
- Установите реализацию 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 в расположении eastus с помощью команды az group create. Эта группа ресурсов используется позже для создания экземпляра Реестр контейнеров Azure (ACR) и кластера AKS.
export RESOURCE_GROUP_NAME=java-liberty-project
az group create --name $RESOURCE_GROUP_NAME --location eastus
Создание экземпляра ACR
Создайте экземпляр ACR с помощью команды az acr create. В следующем примере создается экземпляр 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 вам потребуется войти в экземпляр 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
В следующем примере показан единый узел, созданный на предыдущих шагах. Убедитесь, что состояние узла готово.
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.
Примечание.
На шаге 6 раздела "Создание Кэш Azure для Redis" выберите "Проверка подлинности ключей доступа" для параметра "Проверка подлинности". Этот параметр необходим для подключения примера приложения к экземпляру Кэш Azure для Redis с помощью клиентской библиотеки Redisson. Дополнительные сведения см. в разделе "Конфигурация Redisson".
Скопируйте имя узла и первичный ключ доступа для экземпляра Кэш 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
Если появится сообщение об отключенном состоянии 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
После изменения внешнего IP-адреса на фактический общедоступный IP-адрес используйте CTRL+C, чтобы остановить процесс отслеживанияkubectl
.
Откройте в веб-браузере внешний IP-адрес вашей службы (20.84.16.169
для приведенного выше примера), чтобы увидеть домашнюю страницу приложения. Если страница не загружена правильно, это связано с запуском приложения. Вы можете подождать некоторое время и обновить страницу позже. Имя модуля pod реплик приложения отображается в левом верхнем углу страницы (javaee-cafe-jcache-cluster-77d54bccd4-5xnzx
в данном случае).
В форме создания кофе в сеансе задайте значения полей "Имя" и "Цена", а затем нажмите кнопку "Отправить". Через несколько секунд вы увидите количество отправки: 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
Затем обновите домашнюю страницу приложения. Вы увидите те же данные, отображаемые в разделе "Новый кофе" в сеансе , но другое имя pod, отображаемое в левом верхнем углу страницы.
Наконец, выполните следующие действия, чтобы продемонстрировать, что данные сеанса сохраняются в экземпляре Кэш 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?"