Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье приводятся пошаговые инструкции по развертыванию Open/WebSphere Liberty в Azure вручную.
В частности, в этой статье объясняется, как выполнить следующие задачи:
- Запустите приложение Java, Java Enterprise Edition (EE), Jakarta EE или MicroProfile в среде выполнения Open Liberty или WebSphere Liberty.
- Создайте образ Docker приложения с помощью
az acr build
, используя образы контейнеров Liberty. - Разверните контейнерное приложение в кластере Службы Azure Kubernetes (AKS) с помощью оператора Liberty.
Оператор Liberty упрощает развертывание и управление приложениями, работающими в кластерах Kubernetes. С помощью оператора Open Liberty или Оператора WebSphere Liberty вы также можете выполнять более сложные операции, такие как сбор трассировок и дампов.
Более автоматизированное решение, которое ускоряет переход к AKS с помощью решения Marketplace, доступного на портале Azure, см. в статье "Развертывание приложения Java с помощью Open Liberty/WebSphere Liberty" в кластере Службы Azure Kubernetes (AKS).
Дополнительные сведения об Open Liberty см. на странице проекта Open Liberty. Дополнительные сведения об IBM WebSphere Liberty см. на странице продукта WebSphere Liberty.
Эта статья предназначена для того, чтобы помочь вам быстро перейти к развертыванию. Прежде чем перейти к производству, вы должны ознакомиться с Liberty Tuning.
Если вы заинтересованы в предоставлении отзывов или в тесном сотрудничестве над вашими сценариями миграции с командой разработчиков, разрабатывающей решения WebSphere на Azure, заполните этот короткий опрос по миграции WebSphere и укажите свои контактные данные. Команда руководителей программ, архитекторов и инженеров будет быстро связаться с вами, чтобы начать тесное сотрудничество.
Необходимые условия
- Подписка Azure. Если у вас еще нет подписки Azure, создайте бесплатную учетную запись Azure, прежде чем начать работу.
- Azure CLI версии 2.71.0+
- Java Standard Edition (SE), версия 17, например Eclipse Open J9.
- Maven версии 3.5.0+
- Git
- Роль
Owner
или ролиContributor
иUser Access Administrator
в подписке Azure. Чтобы проверить назначение, выполните действия, описанные в разделе "Перечисление назначений ролей Azure" с помощью портала Azure.
Вход в Azure
Если вы этого еще не сделали, выполните следующие действия, чтобы войти в подписку Azure:
Откройте Azure CLI или PowerShell, а затем войдите с помощью
az login
. Чтобы выполнить аутентификацию, следуйте инструкциям в окне терминала. Сведения о других параметрах входа см. в статье "Вход в Azure с помощью Azure CLI".Примечание.
Если у вас несколько клиентов Azure, связанных с учетными данными Azure, необходимо указать, в какой клиент вы хотите войти. Можно указать арендатора с помощью параметра
--tenant
, напримерaz login --tenant contoso.onmicrosoft.com
.Найдите версию и зависимые библиотеки, установленные с помощью
az version
.Обновление до последней версии с помощью
az upgrade
.
Примечание.
При использовании Azure CLI, если вам будет предложено установить расширение Azure CLI, сделайте это. Дополнительные сведения о расширениях см. в статье "Использование расширений и управление ими" с помощью Azure CLI.
Большинство команд Azure CLI можно выполнять в PowerShell так же, как и в Bash. Разница существует только при использовании переменных. В следующих разделах разница рассматривается на разных вкладках при необходимости.
Создание группы ресурсов
Группа ресурсов Azure — это логическая группа, в которой развертываются и управляются ресурсы Azure.
Создайте группу ресурсов, названную java-liberty-project
с помощью az group create
в регионе eastus2
. Эта группа ресурсов используется позже для создания экземпляра реестра контейнеров Azure и кластера AKS.
export RESOURCE_GROUP_NAME=java-liberty-project
az group create --name $RESOURCE_GROUP_NAME --location eastus2
Создание экземпляра реестра контейнеров
Используйте az acr create
для создания экземпляра реестра контейнеров. В следующем примере создается экземпляр реестра контейнеров с именем <your-unique-ACR-name>
. Замените этот заполнитель уникальным значением в Azure.
Примечание.
В этой статье используется рекомендуемый механизм проверки подлинности без пароля для реестра контейнеров Azure. По-прежнему можно использовать имя пользователя и пароль с docker login
после получения имени пользователя и пароля с помощью az acr credential show
. Однако использование имени пользователя и пароля менее безопасно, чем проверка подлинности без пароля.
export REGISTRY_NAME=<your-unique-ACR-name>
az acr create \
--resource-group $RESOURCE_GROUP_NAME \
--name $REGISTRY_NAME \
--sku Basic
Через некоторое время вы увидите выходные данные JSON, содержащие следующие строки:
"provisioningState": "Succeeded",
"publicNetworkAccess": "Enabled",
"resourceGroup": "java-liberty-project",
Получите имя сервера входа для экземпляра реестра контейнеров. Это значение необходимо при развертывании образа приложения в кластере AKS позже.
export LOGIN_SERVER=$(az acr show \
--name $REGISTRY_NAME \
--query 'loginServer' \
--output tsv)
Создание кластера AKS
Используется az aks create
для создания кластера AKS, как показано в следующем примере. В этом примере создается кластер AKS с myAKSCluster
одним узлом, к которому подключают экземпляр реестра контейнеров. Выполнение команды занимает несколько минут.
export CLUSTER_NAME=myAKSCluster
az aks create \
--resource-group $RESOURCE_GROUP_NAME \
--name $CLUSTER_NAME \
--node-count 1 \
--node-vm-size Standard_DS2_V2 \
--generate-ssh-keys \
--enable-managed-identity \
--attach-acr $REGISTRY_NAME
После завершения команды возвращается отформатированная в формате JSON информация о кластере, включая следующие выходные данные:
"nodeResourceGroup": "MC_java-liberty-project_myAKSCluster_eastus2",
"privateFqdn": null,
"provisioningState": "Succeeded",
"resourceGroup": "java-liberty-project",
Подключение к кластеру AKS
Чтобы управлять кластером Kubernetes, выполните следующие действия.
Установите
kubectl
клиент командной строки Kubernetes, используяaz aks install-cli
приведенный ниже пример:az aks install-cli
Используйте
az aks get-credentials
для настройкиkubectl
соединения с вашим кластером Kubernetes. Эта команда скачивает учетные данные и настраивает интерфейс командной строки Kubernetes для их использования, как показано в следующем примере:Примечание.
Команда использует расположение по умолчанию для файла конфигурации Kubernetes, который является ~/.kube/config. С помощью
--file
файла конфигурации Kubernetes можно указать другое расположение.az aks get-credentials \ --resource-group $RESOURCE_GROUP_NAME \ --name $CLUSTER_NAME \ --overwrite-existing \ --admin
Проверьте подключение к кластеру, используя
kubectl get
для возврата списка узлов кластера, как показано в следующем примере:kubectl get nodes
В следующем примере показан единый узел, созданный на предыдущих шагах. Убедитесь, что состояние узла является
Ready
.NAME STATUS ROLES AGE VERSION aks-nodepool1-xxxxxxxx-yyyyyyyyyy Ready <none> 76s v1.29.9
Создание базы данных SQL Azure
Создайте отдельную базу данных Базы данных SQL Azure для приложения, выполнив следующие действия.
Используйте следующие команды, чтобы задать переменные среды, связанные с базой данных. Замените
<your-unique-sql-server-name>
уникальным именем сервера База данных SQL Azure.export SQL_SERVER_NAME=<your-unique-sql-server-name> export DB_NAME=demodb
Используйте следующие команды, чтобы создать одну базу данных и задать текущего пользователя, выполнившего вход в систему, в качестве администратора Microsoft Entra. Дополнительные сведения см. в кратком руководстве. Создание одной базы данных — База данных SQL Azure.
export ENTRA_ADMIN_NAME=$(az account show \ --query user.name \ --output tsv) az sql server create \ --resource-group $RESOURCE_GROUP_NAME \ --name $SQL_SERVER_NAME \ --enable-ad-only-auth \ --external-admin-principal-type User \ --external-admin-name $ENTRA_ADMIN_NAME \ --external-admin-sid $(az ad signed-in-user show --query id --output tsv) az sql db create \ --resource-group $RESOURCE_GROUP_NAME \ --name $DB_NAME \ --server $SQL_SERVER_NAME \ --edition GeneralPurpose \ --compute-model Serverless \ --family Gen5 \ --capacity 2
Примечание.
Вы создаете сервер SQL Azure с проверкой подлинности SQL, отключенной для обеспечения безопасности. Только идентификатор Microsoft Entra используется для проверки подлинности на сервере. Дополнительные сведения о включении проверки подлинности SQL см. в статье az sql server create
.
Создание подключения к службе в AKS с помощью Service Connector
Используйте следующие команды, чтобы создать соединение между кластером AKS и базой данных SQL с помощью идентификатора рабочей нагрузки Microsoft Entra и Соединителя служб. Дополнительные сведения см. Создание подключения к службе в AKS с помощью соединителя службы.
# Register the Service Connector and Kubernetes Configuration resource providers
az provider register --namespace Microsoft.ServiceLinker --wait
az provider register --namespace Microsoft.KubernetesConfiguration --wait
# Install the Service Connector passwordless extension
az extension add \
--name serviceconnector-passwordless \
--upgrade \
--allow-preview true
# Retrieve the AKS cluster and Azure SQL Server resource IDs
export AKS_CLUSTER_RESOURCE_ID=$(az aks show \
--resource-group $RESOURCE_GROUP_NAME \
--name $CLUSTER_NAME \
--query id \
--output tsv)
export AZURE_SQL_SERVER_RESOURCE_ID=$(az sql server show \
--resource-group $RESOURCE_GROUP_NAME \
--name $SQL_SERVER_NAME \
--query id \
--output tsv)
# Create a user-assigned managed identity used for workload identity
export USER_ASSIGNED_IDENTITY_NAME=workload-identity-uami
az identity create \
--resource-group ${RESOURCE_GROUP_NAME} \
--name ${USER_ASSIGNED_IDENTITY_NAME}
# Retrieve the user-assigned managed identity resource ID
export UAMI_RESOURCE_ID=$(az identity show \
--resource-group ${RESOURCE_GROUP_NAME} \
--name ${USER_ASSIGNED_IDENTITY_NAME} \
--query id \
--output tsv)
# Create a service connection between your AKS cluster and your SQL database using Microsoft Entra Workload ID
az aks connection create sql \
--connection akssqlconn \
--client-type java \
--source-id $AKS_CLUSTER_RESOURCE_ID \
--target-id $AZURE_SQL_SERVER_RESOURCE_ID/databases/$DB_NAME \
--workload-identity $UAMI_RESOURCE_ID
Устранение неполадок с сообщениями об ошибках
az aks connection create sql
Если команда создает сообщение об ошибке, найдите сообщение об ошибке в следующем списке и выполните инструкции по устранению неполадок:
Dependency pyodbc can't be installed, please install it manually
Это сообщение об ошибке указывает, что
pyodbc
пакет не может быть установлен, скорее всего, из-за проблем с разрешениями. Исправьте проблему, выполнив следующие действия.Найдите расположение Python, которое работает с Azure CLI, выполнив следующую команду:
az --version
Выходные данные должны содержать
Python location
, напримерPython location '/opt/az/bin/python3'
.Скопируйте значение
Python location
.Используйте следующую команду, чтобы установить
pyodbc
пакет вsudo
режиме. Замените<python-location>
на местоположение Python, которое вы скопировали на предыдущем шаге.sudo <python-location> -m pip install pyodbc
libodbc.so: не удается открыть общий файл объекта: нет такого файла или каталога.
Установите odbc 17/18 вручную для SQL Server
Эти ошибки указывают на то, что
odbc
драйвер не установлен. Исправьте проблему, выполнив следующие действия.Примечание.
Идентификатор рабочей нагрузки Microsoft Entra следует использовать для безопасного доступа к базе данных SQL Azure без использования проверки подлинности SQL. Если необходимо использовать проверку подлинности SQL, пропустите действия, описанные в данном разделе, и используйте имя пользователя и пароль для подключения к базе данных SQL Azure.
Если вы используете Linux, откройте документ Установите драйвер Microsoft ODBC для SQL Server (Linux). Если вы используете MacOS, откройте файл Установка драйвера Microsoft ODBC для SQL Server (macOS).
Следуйте инструкциям по установке драйвера Microsoft ODBC (18 или 17) для SQL Server.
Используйте
az aks connection create sql
еще раз, чтобы создать подключение к службе, как показано в следующем примере:az aks connection create sql \ --connection akssqlconn \ --client-type java \ --source-id $AKS_CLUSTER_RESOURCE_ID \ --target-id $AZURE_SQL_SERVER_RESOURCE_ID/databases/$DB_NAME \ --workload-identity $UAMI_RESOURCE_ID
Получение учетной записи службы и секрета, созданного соединителем службы
Чтобы выполнить проверку подлинности с помощью базы данных SQL Azure, выполните следующие действия.
Получите учетную запись службы и секрет, созданный соединителем службы, следуя инструкциям в разделе «Обновление контейнера»в руководстве «Подключение приложения AKS к базе данных Azure SQL». Используйте параметр для непосредственного создания развертывания с помощью предоставленного фрагмента кода YAML.
Примечание.
Секрет, созданный соединителем службы, содержит значение, которое является строкой
AZURE_SQL_CONNECTIONSTRING
подключения без пароля к базе данных SQL Azure. Дополнительные сведения см. в образце значения из раздела о назначаемой пользователем управляемой идентичности в разделеИнтеграция базы данных Azure SQL с соединителем службы.Из выделенных разделов в примере YAML развертывания Kubernetes скопируйте значения
serviceAccountName
иsecretRef.name
, как показано в следующем примере.serviceAccountName: <service-account-name> containers: - name: raw-linux envFrom: - secretRef: name: <secret-name>
Определите переменные среды с помощью следующих команд. Обязательно замените
<service-account-name>
и<secret-name>
на значения, скопированные на предыдущем шаге:export SERVICE_ACCOUNT_NAME=<service-account-name> export SECRET_NAME=<secret-name>
Эти значения используются в следующем разделе для развертывания приложения Liberty в кластере AKS.
Установка оператора Open Liberty
В этом разделе описано, как установить оператор Open Liberty в кластере AKS для размещения приложения Liberty.
Установите оператор Open Liberty с помощью следующих команд:
Примечание.
Это руководство направляет вас на установку оператора Open Liberty. Сведения об использовании оператора WebSphere Liberty см. в разделе "Установка оператора WebSphere Liberty" с помощью интерфейса командной строки Kubernetes.
# Install cert-manager Operator
export CERT_MANAGER_VERSION=v1.11.2
kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/${CERT_MANAGER_VERSION}/cert-manager.yaml
# Install the Open Liberty Operator
export OPERATOR_VERSION=1.4.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
# Remove the downloaded files
rm -rf overlays base
Настройка и сборка образа приложения
Чтобы развернуть и запустить приложение Liberty в кластере AKS, контейнеризируйте приложение как образ Docker с помощью Open Liberty Images или образов контейнеров WebSphere Liberty.
Выполните действия, описанные в этом разделе, чтобы развернуть пример приложения в среде выполнения Liberty. Эти шаги используют Maven.
Посмотрите приложение
Клонируйте пример кода для этого руководства с помощью следующих команд. Пример находится в репозитории GitHub Open Liberty/WebSphere Liberty на Azure Kubernetes Service Samples, который содержит несколько примеров. В этой статье используется пример java-app
.
git clone https://github.com/Azure-Samples/open-liberty-on-aks.git
cd open-liberty-on-aks
export BASE_DIR=$PWD
git checkout 20250424
Если появится сообщение о состоянии detached HEAD
, его можно безопасно игнорировать. Это просто означает, что вы проверили тег. Клонирование репозитория создает следующую структуру файлов:
java-app
├─ src/main/
│ ├─ aks/
│ │ ├─ openlibertyapplication-passwordless-db.yaml
│ ├─ docker/
│ │ ├─ Dockerfile
│ │ ├─ Dockerfile-wlp
│ ├─ liberty/config/
│ │ ├─ server.xml
│ ├─ java/
│ ├─ resources/
│ ├─ webapp/
├─ pom.xml
├─ pom-azure-identity.xml
Каталоги java, java и webapp содержат исходный код примера приложения. В коде объявлен и используется источник данных с именем jdbc/JavaEECafeDB
.
В каталоге aks файл openlibertyapplication-passwordless-db.yaml используется для развертывания образа приложения. В каталоге Docker есть два файла для создания образа приложения с помощью Open Liberty или WebSphere Liberty.
В каталоге liberty/config файл server.xml используется для настройки соединения с базой данных для кластера Open Liberty и WebSphere Liberty. Он определяет переменную, используемую azure.sql.connectionstring
для подключения к базе данных SQL Azure.
Файл pom.xml — это файл объектной модели проекта Maven, содержащий сведения о конфигурации проекта. Файл pom-azure-identity.xml объявляет зависимость azure-identity
, которая используется для проверки подлинности в службах Azure с помощью идентификатора Microsoft Entra.
Примечание.
В этом примере используется библиотека azure-identity
для проверки подлинности в базе данных SQL Azure с помощью проверки подлинности Microsoft Entra, которая рекомендуется для обеспечения безопасности. Дополнительные сведения об использовании проверки подлинности SQL в приложении Liberty см. в разделе "Подключения к реляционной базе данных" с подключением к базе данных Java (JDBC).
Сборка проекта
Теперь, когда вы собрали необходимые свойства, создайте приложение с помощью следующих команд. Файл POM для проекта считывает множество переменных из среды. В рамках сборки Maven эти переменные используются для заполнения значений в файлах YAML, расположенных в src/main/aks. Вы можете сделать что-то подобное для приложения за пределами Maven, если вы предпочитаете.
cd $BASE_DIR/java-app
# The following variables are used for deployment file generation into target/
export LOGIN_SERVER=${LOGIN_SERVER}
export SC_SERVICE_ACCOUNT_NAME=${SERVICE_ACCOUNT_NAME}
export SC_SECRET_NAME=${SECRET_NAME}
mvn clean install
mvn dependency:copy-dependencies -f pom-azure-identity.xml -DoutputDirectory=target/liberty/wlp/usr/shared/resources
Создание образа для развертывания AKS
Используйте az acr build
для создания образа, как показано в следующем примере:
cd $BASE_DIR/java-app/target
az acr build \
--registry ${REGISTRY_NAME} \
--image javaee-cafe:v1 \
.
Команда az acr build
отправляет артефакты, указанные в Dockerfile , в экземпляр реестра контейнеров, создает образ и сохраняет его в экземпляре реестра контейнеров.
Развертывание приложения в кластере AKS
Чтобы развернуть приложение Liberty в кластере AKS, выполните следующие действия.
Примените файл развертывания с помощью следующих команд:
cd $BASE_DIR/java-app/target # Apply deployment file kubectl apply -f openlibertyapplication-passwordless-db.yaml
Определите, создан ли экземпляр
OpenLibertyApplication
с помощью следующей команды.kubectl get openlibertyapplication javaee-cafe-cluster --watch
Ниже приведены типичные выходные данные. Нажмите клавиши CTRL+C для выхода.
NAME IMAGE EXPOSED RECONCILED RESOURCESREADY READY WARNING AGE javaee-cafe-cluster <registry-name>.azurecr.io/javaee-cafe:v1 True True True 57s
Определите, готово ли развертывание, созданное оператором, с помощью следующей команды:
kubectl get deployment javaee-cafe-cluster --watch
Ниже приведены типичные выходные данные:
NAME READY UP-TO-DATE AVAILABLE AGE javaee-cafe-cluster 0/3 3 0 20s
Подождите, пока не увидите
3/3
под столбцомREADY
и3
под столбцомAVAILABLE
, затем нажмите Ctrl+C, чтобы остановить процесс слежения заkubectl
.
Тестирование приложения
При запуске приложения служба балансировки нагрузки Kubernetes предоставляет внешний интерфейс приложения в Интернете. Этот процесс может занять некоторое время.
Используется kubectl get service
для получения внешнего IP-адреса службы при его доступности, как показано в следующем примере:
export APP_URL=http://$(kubectl get service javaee-cafe-cluster -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
echo $APP_URL
Примечание.
Если вы не видите допустимый URL-адрес из выходных данных, подождите некоторое время и повторите команду.
Откройте URL-адрес в веб-браузере и проверьте домашнюю страницу приложения. Если страница не загружается правильно, обновите страницу позже после запуска приложения. В левом верхнем углу страницы должно отобразиться имя pod реплик вашего приложения. Подождите несколько минут и обновите страницу, чтобы увидеть другое имя pod, сменившееся как результат балансировки нагрузки от кластера AKS.
Примечание.
В настоящее время приложение не использует ПРОТОКОЛ HTTPS. Рекомендуем включить Транспортный уровень безопасности (TLS) с собственными сертификатами. Дополнительные сведения см. в статье Использование TLS с ингресс-контроллером в Службе Azure Kubernetes (AKS).
Очистка ресурсов
Чтобы избежать расходов за использование Azure, необходимо удалить ненужные ресурсы. Если кластер больше не нужен, используйте az group delete
для удаления группы ресурсов, службы контейнеров, реестра контейнеров, базы данных и всех связанных ресурсов.
az group delete --name $RESOURCE_GROUP_NAME --yes --no-wait
Следующие шаги
Дополнительные сведения см. в следующих ссылках, используемых в этом руководстве:
- Что такое Служба Azure Kubernetes (AKS)?
- Руководство. Подключение приложения AKS к База данных SQL Azure
- Интеграция базы данных SQL Azure с Коннектором служб
- Подключение с помощью проверки подлинности Microsoft Entra
- Open Liberty
- Оператор Open Liberty
- Обзор конфигурации Open Liberty Server
- Плагин Liberty Maven
- Открытые изображения свободы
- Образы контейнеров WebSphere Liberty
Чтобы интегрировать Azure Cache for Redis в приложение на Java, см. Краткое руководство: Использование Azure Cache for Redis в Java с клиентом Redisson Redis.
Сведения о возможностях запуска продуктов WebSphere в Azure см. в статье "Что такое решения для запуска семейства продуктов WebSphere в Azure?"