Развертывание приложения Java с помощью Open Liberty или WebSphere Liberty в кластере Служба Azure Kubernetes

В этой статье демонстрируются следующие возможности.

  • Запустите приложение Java, Java EE, Jakarta EE или MicroProfile в среде выполнения Open Liberty или IBM WebSphere Liberty.
  • Создайте образ Docker приложения с помощью образов контейнеров Open Liberty или WebSphere Liberty.
  • Разверните контейнерное приложение в кластере Служба Azure Kubernetes (AKS) с помощью оператора Open Liberty или WebSphere Liberty Operator.

Open Liberty Operator упрощает развертывание приложений, работающих в кластерах Kubernetes, и управление ими. С помощью оператора Open Liberty или Оператора WebSphere Liberty вы также можете выполнять более сложные операции, такие как сбор трассировок и дампов.

В этой статье используется предложение Azure Marketplace для Open Liberty или WebSphere Liberty, чтобы ускорить переход к AKS. Предложение автоматически подготавливает некоторые ресурсы Azure, в том числе:

  • Экземпляр Реестр контейнеров Azure.
  • Кластер AKS.
  • Экземпляр контроллера входящего трафика (AGIC) Шлюз приложений.
  • Оператор Open Liberty и Оператор WebSphere Liberty.
  • Кроме того, образ контейнера, включающий Liberty и ваше приложение.

Если вы предпочитаете вручную пошаговое руководство по запуску Liberty в AKS, ознакомьтесь с инструкциями по развертыванию приложения Java с помощью Open Liberty или WebSphere Liberty в кластере Служба Azure Kubernetes (AKS).

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

Если у вас еще нет подписки Azure, создайте бесплатную учетную запись Azure, прежде чем начинать работу.

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

  • Установите интерфейс командной строки Azure. Если вы работаете в Windows или macOS, Azure CLI можно запустить в контейнере Docker. Дополнительные сведения см. в статье Как запустить Azure CLI в контейнере Docker.
  • Выполните вход в Azure CLI с помощью команды az login. Чтобы выполнить аутентификацию, следуйте инструкциям в окне терминала. Сведения о других возможностях, доступных при входе, см. в статье Вход с помощью Azure CLI.
  • Установите расширение Azure CLI при первом использовании, когда появится соответствующий запрос. Дополнительные сведения о расширениях см. в статье Использование расширений с Azure CLI.
  • Выполните команду az version, чтобы узнать установленную версию и зависимые библиотеки. Чтобы обновиться до последней версии, выполните команду az upgrade. Для этой статьи требуется Azure CLI версии не ниже 2.31.0.
  • Установите реализацию Java SE версии 17 или более поздней. (например, Eclipse Open J9).
  • Установите Maven 3.5.0 или более поздней версии.
  • Установите Docker для своей операционной системы.
  • Убедитесь, что установлен Git .
  • Убедитесь, что вы назначены Owner роль или ContributorUser Access Administrator роли в подписке. Это можно проверить, выполнив действия из раздела Список назначений ролей для пользователя или группы.

Примечание.

Вы также можете выполнить команды, приведенные в этой статье из Azure Cloud Shell. Этот подход имеет все предварительные средства предварительно установленных компонентов, за исключением Docker.

  • При выполнении команд в этом руководстве локально (вместо Azure Cloud Shell):
    • Подготовьте локальный компьютер с установленной операционной системой Unix (например, Ubuntu, Azure Linux, macOS, подсистема Windows для Linux).
    • Установите реализацию Java SE версии 17 или более поздней. (например, Eclipse Open J9).
    • Установите Maven 3.5.0 или более поздней версии.
    • Установите Docker для своей операционной системы.
  • Убедитесь, что вы назначены Owner роль или ContributorUser Access Administrator роли в подписке. Это можно проверить, выполнив действия из раздела Список назначений ролей для пользователя или группы.

Создание Liberty в развернутой службе AKS с помощью портала

Следующие инструкции предназначены для создания среды выполнения Liberty в службе AKS. После выполнения этих действий у вас будет экземпляр реестра контейнеров и кластер AKS для развертывания контейнерного приложения.

  1. Переход на портал Azure. В поле поиска в верхней части страницы введите IBM Liberty в AKS. Когда появятся предложения, выберите его и только в разделе Marketplace .

    Если вы предпочитаете, вы можете перейти непосредственно к предложению.

  2. Нажмите кнопку создания.

  3. На панели "Основные сведения":

    1. Создание группы ресурсов Так как группы ресурсов должны быть уникальными в подписке, выберите уникальное имя. Простой способ использовать уникальные имена — использовать сочетание инициалогов, сегодняшней даты и некоторых идентификаторов (например, ejb0913-java-liberty-project-rg).

    2. В поле Страна или регион выберите Восточная часть США.

    3. Создайте переменную среды в оболочке для имен групп ресурсов для кластера и базы данных:

      export RESOURCE_GROUP_NAME=<your-resource-group-name>
      

  4. Выберите Далее. На панели AKS можно при необходимости выбрать существующий кластер AKS и экземпляр реестра контейнеров, а не создавать новые. Этот выбор позволяет использовать шаблон боковой кареты, как показано в Центре архитектуры Azure. Вы также можете настроить параметры размера и количества виртуальных машин в пуле узлов AKS.

    В целях этой статьи просто сохраните все значения по умолчанию на этой панели.

  5. Выберите Далее. В области балансировки нагрузки рядом с Подключение Шлюз приложений Azure?нажмите кнопку "Да". В этом разделе можно настроить следующие параметры развертывания:

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

    • Для TLS/SSL-сертификата можно указать TLS/SSL-сертификат из Шлюз приложений Azure. Оставьте значения по умолчанию, чтобы создать самозаверяющий сертификат.

      Не перейдите в рабочую среду с самозаверяющий сертификат. Дополнительные сведения о самозаверяющих сертификатах см. в статье Создание самозаверяющего открытого сертификата для проверки подлинности приложения.

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

  6. Выберите Далее. В области операторов и приложений эта статья использует все значения по умолчанию. Однако можно настроить следующие параметры развертывания:

    • Вы можете развернуть оператор WebSphere Liberty, выбрав "Да" для параметра IBM, поддерживаемого?. При выходе из значения по умолчанию оператор Open Liberty не развертывается.
    • Вы можете развернуть приложение для выбранного оператора, нажав кнопку "Да " для параметра "Развернуть приложение?". Выход из значения по умолчанию No не развертывает ни одно приложение.
  7. Чтобы проверить параметры, выберите Просмотр и создание. На панели "Рецензирование и создание" после прохождения проверки выберите его.

    Развертывание может занять до 20 минут. Пока вы ожидаете завершения развертывания, выполните действия, описанные в разделе "Создание экземпляра База данных SQL Azure". После завершения этого раздела вернитесь сюда и продолжайте работу.

Сбор выбранных сведений из развертывания

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

  1. В углу любой страницы портала нажмите кнопку меню и выберите группы ресурсов.

  2. В поле с текстовым фильтром для любого поля введите первые несколько символов созданной ранее группы ресурсов. Если вы выполнили рекомендуемое соглашение, введите инициалы и выберите соответствующую группу ресурсов.

  3. В списке ресурсов в группе ресурсов выберите ресурс со значением типа реестра контейнеров.

  4. В области навигации в разделе Параметры выберите ключи доступа.

  5. Сохраните значения для сервера входа, имени реестра, имени пользователя и пароля. Значок копирования рядом с каждым полем можно использовать для копирования значения в системный буфер обмена.

  6. Вернитесь к группе ресурсов, в которой развернуты ресурсы.

  7. В разделе Параметры выберите Развертывания.

  8. Выберите самое нижнее развертывание в списке. Значение имени развертывания соответствует идентификатору издателя предложения. Он содержит строку ibm.

  9. На панели навигации выберите выходные данные.

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

    • cmdToConnectToCluster
    • appDeploymentTemplateYaml Если развертывание не включает приложение. То есть вы выбрали "Нет " для развертывания приложения? При развертывании предложения Marketplace.
    • appDeploymentYaml Если развертывание включает приложение. То есть вы выбрали "Да " для развертывания приложения?.

    Вставьте значение оболочки appDeploymentTemplateYaml Bash или appDeploymentYaml в нее, добавьте | grep secretNameи выполните команду.

    Выходные данные этой команды — это имя секрета TLS для входящего трафика, например - secretName: secret785e2c. Сохраните secretName значение.

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

Создание экземпляра Базы данных SQL Azure

Чтобы создать одну базу данных База данных SQL Azure для использования с приложением, выполните действия, описанные в кратком руководстве. Создание одной базы данных в База данных SQL Azure. Внимательно обратите внимание на следующие различия:

  • На шаге "Основы" запишите значения для группы ресурсов, имени базы данных, <имени сервера.database.windows.net>, имени администратора сервера и пароля. Эта статья относится к значению группы ресурсов базы данных как <db-resource-group>.

  • На шаге "Сеть" установите методПодключение ivity на общедоступную конечную точку, установите для этого сервера доступ к службам и ресурсам Azure для доступа к этому серверу и задайте для текущего IP-адреса клиента значение "Да".

    Снимок экрана: портал Azure, на котором показана вкладка

Примечание.

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

Чтобы принудить базу данных проснуться, можно запустить запрос с помощью редактора запросов. Выполните действия, описанные в разделе "Запрос базы данных". Ниже приведен пример запроса: SELECT * FROM COFFEE;

Создайте переменную среды в оболочке для имени группы ресурсов для базы данных:

export DB_RESOURCE_GROUP_NAME=<db-resource-group>

Теперь, когда вы создали базу данных и кластер AKS, можно перейти к подготовке AKS к размещению приложения Open Liberty.

Настройка и развертывание примера приложения

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

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

Клонируйте пример кода для этой статьи. Пример размещен на сайте GitHub.

В репозитории содержится несколько примеров. В этой статье используется 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 20240220

Если появится сообщение о том, что оно в состоянии "отсоединяемая голова", вы можете безопасно игнорировать его. Сообщение просто означает, что вы проверка вы указали тег.

Ниже приведена структура файла приложения:

java-app
├─ src/main/
│  ├─ aks/
│  │  ├─ db-secret.yaml
│  │  ├─ openlibertyapplication-agic.yaml
│  │  ├─ openlibertyapplication.yaml
│  │  ├─ webspherelibertyapplication-agic.yaml
│  │  ├─ webspherelibertyapplication.yaml
│  ├─ docker/
│  │  ├─ Dockerfile
│  │  ├─ Dockerfile-wlp
│  ├─ liberty/config/
│  │  ├─ server.xml
│  ├─ java/
│  ├─ resources/
│  ├─ webapp/
├─ pom.xml

Каталоги java, java и webapp содержат исходный код примера приложения. В коде объявлен и используется источник данных с именем jdbc/JavaEECafeDB.

В каталоге aks есть пять файлов развертывания:

  • db-secret.xml. Используйте этот файл для создания секретов Kubernetes с учетными данными подключения к базе данных.
  • openlibertyapplication-agic.yaml: используйте этот файл для развертывания приложения Open Liberty с помощью AGIC. В этой статье предполагается, что вы используете этот файл.
  • openlibertyapplication.yaml: используйте этот файл, если вы хотите развернуть приложение Open Liberty без AGIC.
  • webspherelibertyapplication-agic.yaml: используйте этот файл для развертывания приложения WebSphere Liberty с agIC, если вы развернули оператор WebSphere Liberty ранее в этой статье.
  • webspherelibertyapplication.yaml: используйте этот файл для развертывания приложения WebSphere Liberty без AGIC, если вы развернули оператор WebSphere Liberty ранее в этой статье.

В каталоге Docker есть два файла для создания образа приложения:

  • Dockerfile: используйте этот файл для создания образа приложения с помощью Open Liberty в этой статье.
  • Dockerfile-wlp: используйте этот файл для создания образа приложения с помощью WebSphere Liberty, если вы развернули оператор WebSphere Liberty ранее в этой статье.

В каталоге liberty/config используется файл server.xml для настройки подключения к базе данных для кластера Open Liberty и WebSphere Liberty.

Сборка проекта

Теперь, когда у вас есть необходимые свойства, можно создать приложение. Файл POM для проекта считывает множество переменных из среды. В рамках сборки Maven эти переменные используются для заполнения значений в файлах YAML, расположенных в src/main/aks. Вы можете сделать что-то подобное для приложения за пределами Maven, если вы предпочитаете.

cd $BASE_DIR/java-app
# The following variables are used for deployment file generation into the target.
export LOGIN_SERVER=<Azure-Container-Registry-Login-Server-URL>
export REGISTRY_NAME=<Azure-Container-Registry-name>
export USER_NAME=<Azure-Container-Registry-username>
export PASSWORD='<Azure-Container-Registry-password>'
export DB_SERVER_NAME=<server-name>.database.windows.net
export DB_NAME=<database-name>
export DB_USER=<server-admin-login>@<server-name>
export DB_PASSWORD='<server-admin-password>'
export INGRESS_TLS_SECRET=<ingress-TLS-secret-name>

mvn clean install

(Необязательно) Локальное тестирование проекта

Запустите и протестируйте проект локально перед развертыванием в Azure. Для удобства в этой статье используется liberty-maven-plugin. Дополнительные сведения см liberty-maven-plugin. в статье Open Liberty Создание веб-приложения с помощью Maven.

Для приложения можно сделать что-то подобное с помощью любого другого механизма, например локальной среды разработки. Вы также можете использовать вариант, предназначенный liberty:devc для разработки с контейнерами. Дополнительные liberty:devc сведения см. в документации по Open Liberty.

  1. Запустите приложение с помощью liberty:run. liberty:run также использует переменные среды, определенные ранее.

    cd $BASE_DIR/java-app
    mvn liberty:run
    
  2. Если тест выполнен успешно, в выходных данных команды появится сообщение, аналогичное [INFO] [AUDIT] CWWKZ0003I: The application javaee-cafe updated in 1.930 seconds выполнению команды. http://localhost:9080/ Перейдите в браузер и убедитесь, что приложение доступно и все функции работают.

  3. Нажмите клавиши CTRL+C, чтобы остановиться.

Создание образа для развертывания AKS

Теперь можно выполнить docker build команду для сборки образа:

cd $BASE_DIR/java-app/target

docker buildx build --platform linux/amd64 -t javaee-cafe:v1 --pull --file=Dockerfile .

(Необязательно) Тестирование образа Docker локально

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

  1. Запустите образ с помощью следующей команды. Эта команда использует переменные среды, определенные ранее.

    docker run -it --rm -p 9080:9080 \
       -e DB_SERVER_NAME=${DB_SERVER_NAME} \
       -e DB_NAME=${DB_NAME} \
       -e DB_USER=${DB_USER} \
       -e DB_PASSWORD=${DB_PASSWORD} \
       javaee-cafe:v1
    
  2. После запуска контейнера перейдите http://localhost:9080/ в браузер, чтобы получить доступ к приложению.

  3. Нажмите клавиши CTRL+C, чтобы остановиться.

Отправка изображения в Реестр контейнеров Azure

Отправьте созданный образ в экземпляр реестра контейнеров, созданный в предложении:

docker tag javaee-cafe:v1 ${LOGIN_SERVER}/javaee-cafe:v1
docker login -u ${USER_NAME} -p ${PASSWORD} ${LOGIN_SERVER}
docker push ${LOGIN_SERVER}/javaee-cafe:v1

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

Чтобы развернуть и протестировать приложение, выполните следующие действия.

  1. Подключитесь к кластеру AKS.

    Вставьте значение cmdToConnectToCluster в оболочку и выполните команду.

  2. Примените секрет базы данных:

    cd $BASE_DIR/java-app/target
    kubectl apply -f db-secret.yaml
    

    Результат выглядит так: secret/db-secret-sql created.

  3. Примените файл развертывания:

    kubectl apply -f openlibertyapplication-agic.yaml
    
  4. Дождитесь успешного перезапуска всех модулей pod с помощью следующей команды:

    kubectl get pods --watch
    

    Выходные данные, аналогичные следующему примеру, указывают на выполнение всех модулей pod:

    NAME                                       READY   STATUS    RESTARTS   AGE
    javaee-cafe-cluster-agic-67cdc95bc-2j2gr   1/1     Running   0          29s
    javaee-cafe-cluster-agic-67cdc95bc-fgtt8   1/1     Running   0          29s
    javaee-cafe-cluster-agic-67cdc95bc-h47qm   1/1     Running   0          29s
    
  5. Проверьте результаты:

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

      kubectl get ingress
      

      Скопируйте значение ADDRESS из полученного результата. Это значение является внешним общедоступным IP-адресом развернутого экземпляра Шлюз приложений.

    2. Перейдите по адресу https://<ADDRESS>, чтобы протестировать приложение. Для удобства эта команда оболочки создает переменную среды, значение которой можно вставить прямо в браузер:

      export APP_URL=https://$(kubectl get ingress | grep javaee-cafe-cluster-agic-ingress | cut -d " " -f14)/
      echo $APP_URL
      

      Если веб-страница не отображается правильно или возвращает ошибку 502 Bad Gateway , приложение по-прежнему начинается в фоновом режиме. Подождите несколько минут и повторите попытку.

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

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

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

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

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