Развертывание приложения Java с помощью Open Liberty или WebSphere Liberty в кластере Azure Kubernetes Service (AKS)
В этой статье демонстрируются следующие возможности.
- Запустите приложение 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.
Если вы заинтересованы в предоставлении отзывов или тесной работе с сценариями миграции с помощью группы разработчиков, разрабатывающей веб-sphere в решениях Azure, заполните этот короткий опрос по миграции WebSphere и включите контактные данные. Команда руководителей программ, архитекторов и инженеров будет быстро связаться с вами, чтобы начать тесное сотрудничество.
Необходимые компоненты
- Подписка Azure. Если у вас еще нет подписки Azure, создайте бесплатную учетную запись Azure, прежде чем начинать работу.
- Подготовьте локальный компьютер с установленной операционной системой, например Ubuntu, Azure Linux, macOS или подсистема Windows для Linux.
- Установите Azure CLI для выполнения команд Azure CLI.
- Выполните вход в Azure CLI с помощью команды az login. Чтобы выполнить аутентификацию, следуйте инструкциям в окне терминала. Сведения о других параметрах входа см. в статье "Вход в Azure с помощью Azure CLI".
- Установите расширение Azure CLI при первом использовании, когда появится соответствующий запрос. Дополнительные сведения о расширениях см. в статье "Использование расширений и управление ими" с помощью Azure CLI.
- Выполните команду az version, чтобы узнать установленную версию и зависимые библиотеки. Чтобы обновиться до последней версии, выполните команду az upgrade. Для этой статьи требуется Azure CLI версии не ниже 2.31.0.
- Установите реализацию Java выпуск Standard (SE) версии 17 или более поздней (например, Eclipse Open J9).
- Установите Maven 3.5.0 или более поздней версии.
- Установите Docker для своей операционной системы.
- Убедитесь, что установлен Git .
- Убедитесь, что вы назначены
Owner
роль илиContributor
User Access Administrator
роли в подписке. Это можно проверить, выполнив действия из раздела Список назначений ролей для пользователя или группы.
Создание Liberty в развернутой службе AKS с помощью портала
Следующие инструкции предназначены для создания среды выполнения Liberty в службе AKS. После выполнения этих действий у вас будет экземпляр реестра контейнеров и кластер AKS для развертывания контейнерного приложения.
Переход на портал Azure. В поле поиска в верхней части страницы введите IBM Liberty в AKS. Когда появятся предложения, выберите его и только в разделе Marketplace .
Если вы предпочитаете, вы можете перейти непосредственно к предложению.
Нажмите кнопку создания.
На панели "Основные сведения":
Создание группы ресурсов Так как группы ресурсов должны быть уникальными в подписке, выберите уникальное имя. Простой способ использовать уникальные имена — использовать сочетание инициалогов, сегодняшней даты и некоторых идентификаторов (например,
ejb0913-java-liberty-project-rg
).В поле Страна или регион выберите Восточная часть США.
Создайте переменную среды в оболочке для имен групп ресурсов для кластера и базы данных:
export RESOURCE_GROUP_NAME=<your-resource-group-name>
Выберите Далее. На панели AKS можно при необходимости выбрать существующий кластер AKS и экземпляр реестра контейнеров, а не создавать новые. Этот выбор позволяет использовать шаблон боковой кареты, как показано в Центре архитектуры Azure. Вы также можете настроить параметры размера и количества виртуальных машин в пуле узлов AKS.
В целях этой статьи просто сохраните все значения по умолчанию на этой панели.
Выберите Далее. В области балансировки нагрузки щелкните "Подключиться к Шлюз приложений Azure?", нажмите кнопку "Да". В этом разделе можно настроить следующие параметры развертывания:
Для виртуальной сети и подсети можно при необходимости настроить виртуальную сеть и подсеть, в которую развертывание помещает ресурсы. Вам не нужно изменять оставшиеся значения из значений по умолчанию.
Для TLS/SSL-сертификата можно указать TLS/SSL-сертификат из Шлюз приложений Azure. Оставьте значения по умолчанию, чтобы создать самозаверяющий сертификат.
Не перейдите в рабочую среду с самозаверяющий сертификат. Дополнительные сведения о самозаверяющих сертификатах см. в статье Создание самозаверяющего открытого сертификата для проверки подлинности приложения.
Вы можете выбрать включение сопоставления на основе файлов cookie, также известных как липкие сеансы. В этой статье используются липкие сеансы, поэтому не забудьте выбрать этот параметр.
Выберите Далее. В области операторов и приложений эта статья использует все значения по умолчанию. Однако можно настроить следующие параметры развертывания:
- Вы можете развернуть оператор WebSphere Liberty, выбрав "Да" для параметра IBM, поддерживаемого?. При выходе из значения по умолчанию оператор Open Liberty не развертывается.
- Вы можете развернуть приложение для выбранного оператора, нажав кнопку "Да " для параметра "Развернуть приложение?". Выход из значения по умолчанию No не развертывает ни одно приложение.
Чтобы проверить параметры, выберите Просмотр и создание. На панели "Рецензирование и создание" после прохождения проверки выберите его.
Развертывание может занять до 20 минут. Пока вы ожидаете завершения развертывания, выполните действия, описанные в разделе "Создание экземпляра База данных SQL Azure". После завершения этого раздела вернитесь сюда и продолжайте работу.
Сбор выбранных сведений из развертывания
Если вы отошли от области выполнения развертывания, в следующих шагах показано, как вернуться к этой области. Если вы все еще находитесь на панели, где показано , что развертывание завершено, перейдите в только что созданную группу ресурсов и перейдите к третьему шагу.
В углу любой страницы портала нажмите кнопку меню и выберите группы ресурсов.
В поле с текстовым фильтром для любого поля введите первые несколько символов созданной ранее группы ресурсов. Если вы выполнили рекомендуемое соглашение, введите инициалы и выберите соответствующую группу ресурсов.
В списке ресурсов в группе ресурсов выберите ресурс со значением типа реестра контейнеров.
В области навигации в разделе "Параметры" выберите ключи доступа.
Сохраните значения для сервера входа, имени реестра, имени пользователя и пароля. Значок копирования рядом с каждым полем можно использовать для копирования значения в системный буфер обмена.
Вернитесь к группе ресурсов, в которой развернуты ресурсы.
В разделе Параметры выберите Развертывания.
Выберите самое нижнее развертывание в списке. Значение имени развертывания соответствует идентификатору издателя предложения. Он содержит строку
ibm
.На панели навигации выберите выходные данные.
Используя тот же метод копирования, что и с предыдущими значениями, сохраните значения для следующих выходных данных:
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>
.На шаге "Сеть" установите метод подключения к общедоступной конечной точке, задайте для доступа к этому серверу службы и ресурсы Azure для доступа к этому серверу и задайте для параметра "Добавить текущий IP-адрес клиента" значение "Да".
Примечание.
Бессерверный уровень вычислительных ресурсов, выбранный для этой базы данных, экономит деньги, помещая базу данных в спящий режим в периоды бездействия. Пример приложения завершится ошибкой, если база данных спит при запуске приложения.
Чтобы принудить базу данных проснуться, можно запустить запрос с помощью редактора запросов. Выполните действия, описанные в разделе "Запрос базы данных". Ниже приведен пример запроса: 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.
Запустите приложение с помощью
liberty:run
.liberty:run
также использует переменные среды, определенные ранее.cd $BASE_DIR/java-app mvn liberty:run
Если тест выполнен успешно, в выходных данных команды появится сообщение, аналогичное
[INFO] [AUDIT] CWWKZ0003I: The application javaee-cafe updated in 1.930 seconds
выполнению команды.http://localhost:9080/
Перейдите в браузер и убедитесь, что приложение доступно и все функции работают.Нажмите клавиши 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, выполните следующие действия.
Запустите образ с помощью следующей команды. Эта команда использует переменные среды, определенные ранее.
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
После запуска контейнера перейдите
http://localhost:9080/
в браузер, чтобы получить доступ к приложению.Нажмите клавиши 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
Развертывание и тестирование приложения
Чтобы развернуть и протестировать приложение, выполните следующие действия.
Подключитесь к кластеру AKS.
Вставьте значение
cmdToConnectToCluster
в оболочку и выполните команду.Примените секрет базы данных:
cd $BASE_DIR/java-app/target kubectl apply -f db-secret.yaml
Результат выглядит так:
secret/db-secret-sql created
.Примените файл развертывания:
kubectl apply -f openlibertyapplication-agic.yaml
Дождитесь успешного перезапуска всех модулей 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
Проверьте результаты:
Получите адрес ресурса входящего трафика, развернутого с помощью приложения:
kubectl get ingress
Скопируйте значение
ADDRESS
из полученного результата. Это значение является внешним общедоступным IP-адресом развернутого экземпляра Шлюз приложений.Перейдите по адресу
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
Следующие шаги
Дополнительные сведения см. в следующих ссылках:
Дополнительные сведения о развертывании семейства IBM WebSphere в Azure см. в статье "Что такое решения для запуска семейства продуктов WebSphere в Azure?"
Azure Kubernetes Service