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


Ручное развертывание Java-приложения с Open Liberty или WebSphere Liberty в кластере Azure Kubernetes Service (AKS)

В этой статье приводятся пошаговые инструкции по развертыванию 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:

  1. Откройте Azure CLI или PowerShell, а затем войдите с помощью az login. Чтобы выполнить аутентификацию, следуйте инструкциям в окне терминала. Сведения о других параметрах входа см. в статье "Вход в Azure с помощью Azure CLI".

    Примечание.

    Если у вас несколько клиентов Azure, связанных с учетными данными Azure, необходимо указать, в какой клиент вы хотите войти. Можно указать арендатора с помощью параметра --tenant, например az login --tenant contoso.onmicrosoft.com.

  2. Найдите версию и зависимые библиотеки, установленные с помощью az version.

  3. Обновление до последней версии с помощью 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, выполните следующие действия.

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

    az aks install-cli
    
  2. Используйте 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
    
  3. Проверьте подключение к кластеру, используя 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 для приложения, выполнив следующие действия.

  1. Используйте следующие команды, чтобы задать переменные среды, связанные с базой данных. Замените <your-unique-sql-server-name> уникальным именем сервера База данных SQL Azure.

    export SQL_SERVER_NAME=<your-unique-sql-server-name>
    export DB_NAME=demodb
    
  2. Используйте следующие команды, чтобы создать одну базу данных и задать текущего пользователя, выполнившего вход в систему, в качестве администратора 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 пакет не может быть установлен, скорее всего, из-за проблем с разрешениями. Исправьте проблему, выполнив следующие действия.

    1. Найдите расположение Python, которое работает с Azure CLI, выполнив следующую команду:

      az --version
      

      Выходные данные должны содержать Python location , например Python location '/opt/az/bin/python3'.

    2. Скопируйте значение Python location.

    3. Используйте следующую команду, чтобы установить 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.

    1. Если вы используете Linux, откройте документ Установите драйвер Microsoft ODBC для SQL Server (Linux). Если вы используете MacOS, откройте файл Установка драйвера Microsoft ODBC для SQL Server (macOS).

    2. Следуйте инструкциям по установке драйвера Microsoft ODBC (18 или 17) для SQL Server.

    3. Используйте 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, выполните следующие действия.

  1. Получите учетную запись службы и секрет, созданный соединителем службы, следуя инструкциям в разделе «Обновление контейнера»в руководстве «Подключение приложения AKS к базе данных Azure SQL». Используйте параметр для непосредственного создания развертывания с помощью предоставленного фрагмента кода YAML.

    Примечание.

    Секрет, созданный соединителем службы, содержит значение, которое является строкой AZURE_SQL_CONNECTIONSTRING подключения без пароля к базе данных SQL Azure. Дополнительные сведения см. в образце значения из раздела о назначаемой пользователем управляемой идентичности в разделеИнтеграция базы данных Azure SQL с соединителем службы.

  2. Из выделенных разделов в примере YAML развертывания Kubernetes скопируйте значения serviceAccountName и secretRef.name, как показано в следующем примере.

    serviceAccountName: <service-account-name>
    containers:
    - name: raw-linux
       envFrom:
          - secretRef:
             name: <secret-name>
    
  3. Определите переменные среды с помощью следующих команд. Обязательно замените <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, выполните следующие действия.

  1. Примените файл развертывания с помощью следующих команд:

    cd $BASE_DIR/java-app/target
    
    # Apply deployment file
    kubectl apply -f openlibertyapplication-passwordless-db.yaml
    
  2. Определите, создан ли экземпляр 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
    
  3. Определите, готово ли развертывание, созданное оператором, с помощью следующей команды:

    kubectl get deployment javaee-cafe-cluster --watch
    

    Ниже приведены типичные выходные данные:

    NAME                        READY   UP-TO-DATE   AVAILABLE   AGE
    javaee-cafe-cluster         0/3     3            0           20s
    
  4. Подождите, пока не увидите 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.

Снимок экрана: домашняя страница приложения Java liberty.

Примечание.

В настоящее время приложение не использует ПРОТОКОЛ HTTPS. Рекомендуем включить Транспортный уровень безопасности (TLS) с собственными сертификатами. Дополнительные сведения см. в статье Использование TLS с ингресс-контроллером в Службе Azure Kubernetes (AKS).

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

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

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

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

Дополнительные сведения см. в следующих ссылках, используемых в этом руководстве:

Чтобы интегрировать Azure Cache for Redis в приложение на Java, см. Краткое руководство: Использование Azure Cache for Redis в Java с клиентом Redisson Redis.

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