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


Развертывание приложения Java вручную с помощью JBoss EAP в кластере Azure Red Hat OpenShift

В этой статье показано, как развернуть приложение Red Hat JBoss Enterprise Application Platform (EAP) в кластере Azure Red Hat OpenShift. Пример — это приложение Java, поддерживаемое базой данных SQL. Приложение развертывается с помощью диаграмм JBoss EAP Helm.

Из этого руководства вы узнаете, как выполнить следующие задачи:

  • Подготовьте приложение JBoss EAP для OpenShift.
  • Создайте отдельный экземпляр базы данных База данных SQL Azure.
  • Развертывание приложения в кластере Azure Red Hat OpenShift с помощью JBoss Helm Chart и веб-консоли OpenShift

Пример приложения — это приложение с отслеживанием состояния, которое хранит сведения в сеансе HTTP. Он использует возможности кластеризации JBoss EAP и использует следующие технологии Jakarta EE и MicroProfile:

  • Лица сервера Jakarta
  • Jakarta Enterprise Beans
  • Jakarta Persistence
  • Работоспособности MicroProfile

В этой статье пошаговые инструкции по запуску приложения JBoss EAP в кластере Azure Red Hat OpenShift. Более автоматизированное решение, которое ускоряет переход к кластеру Azure Red Hat OpenShift, см. в кратком руководстве по развертыванию JBoss EAP в Azure Red Hat OpenShift с помощью портал Azure.

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

Внимание

В этой статье развертывается приложение с помощью JBoss EAP Helm Chart. На момент написания этой функции по-прежнему предлагается в качестве предварительной версии технологии. Прежде чем выбрать развертывание приложений с помощью JBoss EAP Helm Chart в рабочих средах, убедитесь, что эта функция является поддерживаемой функцией для версии продукта JBoss EAP/XP.

Внимание

Хотя Azure Red Hat OpenShift совместно работает, управляется и поддерживается Red Hat и Майкрософт для предоставления интегрированной поддержки, программного обеспечения, выполняемого на основе Azure Red Hat OpenShift, в том числе описанного в этой статье, распространяется на свои собственные условия поддержки и лицензии. Дополнительные сведения о поддержке Azure Red Hat OpenShift см. в разделе "Поддержка" для Azure Red Hat OpenShift 4. Дополнительные сведения о поддержке программного обеспечения, описанного в этой статье, см. на основных страницах этого программного обеспечения, как описано в статье.

Предварительные требования

Примечание.

Для создания и запуска кластера OpenShift в Azure Red Hat OpenShift требуется не менее 40 ядер. Стандартная квота ресурсов Azure для новой подписки Azure не соответствует этому требованию. Чтобы запросить увеличение лимита ресурсов, см . раздел "Стандартная квота: увеличение ограничений по рядам виртуальных машин". Обратите внимание на то, что бесплатная пробная подписка не дает права на увеличение квоты. Прежде чем запрашивать его, перейдите на подписку с оплатой по мере использования.

  1. Подготовьте локальный компьютер с операционной системой Unix, поддерживаемой различными продуктами, такими как Ubuntu, macOS или подсистема Windows для Linux.

  2. Установите реализацию Java выпуск Standard (SE). Локальные шаги разработки в этой статье были протестированы с помощью пакета средств разработки Java (JDK) 17 из сборки OpenJDK майкрософт.

  3. Установите Maven 3.8.6 или более поздней версии.

  4. Установите Azure CLI 2.40 или более поздней версии.

  5. Клонируйте код для этого демонстрационного приложения (todo-list) в локальную систему. Демонстрационное приложение находится на сайте GitHub.

  6. Следуйте инструкциям из руководства по созданию кластера Azure Red Hat OpenShift 4.

    Хотя шаг "Получение секрета для извлечения Red Hat" помечен как необязательный, он необходим для работы с этой статьей. Секрет извлечения позволяет кластеру Azure Red Hat OpenShift найти образы приложений JBoss EAP.

    Если вы планируете запускать в кластере приложения, интенсивно использующие память, укажите соответствующий размер виртуальной машины для рабочих узлов с помощью параметра --worker-vm-size. Дополнительные сведения см. в разделе:

  7. Подключитесь к кластеру, выполнив действия, описанные в руководстве по подключению к кластеру Azure Red Hat OpenShift 4.

    • Выполните действия, описанные в разделе "Установка интерфейса командной строки OpenShift"
    • Подключение к кластеру Azure Red Hat OpenShift с помощью интерфейса командной строки OpenShift с пользователем kubeadmin
  8. Выполните следующую команду, чтобы создать проект OpenShift для этого демонстрационного приложения:

    oc new-project eap-demo
    
  9. Выполните следующую команду, чтобы добавить роль представления в учетную запись службы по умолчанию. Эта роль необходима, чтобы приложение могли обнаруживать другие модули pod и настраивать кластер с ними:

    oc policy add-role-to-user view system:serviceaccount:$(oc project -q):default -n $(oc project -q)
    

Подготовка приложения

Клонируйте пример приложения с помощью следующей команды:

git clone https://github.com/Azure-Samples/jboss-on-aro-jakartaee

Вы клонировали демонстрационное приложение и локальный Todo-list репозиторий находится в main ветви. Демонстрационное приложение — это простое приложение Java, которое создает, считывает, обновляет и удаляет записи в SQL Azure. Это приложение можно развернуть на сервере JBoss EAP, установленном на локальном компьютере. Вам просто нужно настроить сервер с необходимым драйвером базы данных и источником данных. Вам также нужен сервер базы данных, доступный из локальной среды.

Однако при целевом использовании OpenShift может потребоваться обрезать возможности сервера JBoss EAP. Например, может потребоваться уменьшить уровень безопасности подготовленного сервера и сократить общий объем памяти. Кроме того, может потребоваться включить некоторые спецификации MicroProfile, чтобы сделать приложение более подходящим для работы в среде OpenShift. При использовании JBoss EAP одним из способов выполнения этой задачи является упаковка приложения и сервера в одном модуле развертывания, известном как ЗАгрузочный JAR-файл. Давайте добавим необходимые изменения в демонстрационное приложение.

Перейдите к локальному репозиторию демонстрационного приложения и измените ветвь bootable-jarна:

## cd jboss-on-aro-jakartaee
git checkout bootable-jar

Давайте рассмотрим, что мы изменили в этой ветви:

  • Мы добавили подключаемый wildfly-jar-maven модуль для подготовки сервера и приложения в одном исполняемом JAR-файле. Модуль развертывания OpenShift — это наш сервер с нашим приложением.
  • В подключаемом модуле Maven мы указали набор слоев Galleon. Эта конфигурация позволяет нам обрезать возможности сервера только тем, что нам нужно. Полные сведения о Galleon см . в документации WildFly.
  • Наше приложение использует Jakarta Face с запросами Ajax, что означает, что в сеансе HTTP хранятся сведения. Мы не хотим потерять такие сведения, если модуль pod удален. Мы можем сохранить эти сведения на клиенте и отправить его обратно по каждому запросу. Однако существуют случаи, когда вы можете не распространять определенную информацию клиентам. Для этой демонстрации мы решили реплицировать сеанс во всех репликах pod. Для этого мы добавили <distributable /> в .web.xml Это вместе с возможностями кластеризации серверов делает сеанс HTTP распространяемым по всем модулям pod.
  • Мы добавили две проверки работоспособности MicroProfile, которые позволяют определить, когда приложение работает и готово к получению запросов.

Локальный запуск приложения

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

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

  • Для группы ресурсов используйте созданную ранее группу ресурсов.
  • Для имени базы данных используется todos_db.
  • Для входа администратора сервера используется azureuser.
  • Для использования Passw0rd!пароля.
  • В разделе правил брандмауэра переключите службы и ресурсы Azure для доступа к этому серверу на "Да".

Все остальные параметры можно безопасно использовать из связанной статьи.

На странице "Дополнительные параметры" вам не нужно выбирать параметр для предварительной подготовки базы данных с примерами данных, но это не вредит.

После создания базы данных получите значение имени сервера на странице обзора. Наведите указатель мыши на значение поля имени сервера и выберите значок копирования, который отображается рядом со значением. Сохраните это значение в стороне для последующего использования (мы задали переменную с именем MSSQLSERVER_HOST этого значения).

Примечание.

Чтобы снизить денежные затраты, краткое руководство направляет читателя на выбор бессерверного уровня вычислений. Этот уровень масштабируется до нуля, если действия отсутствуют. В этом случае база данных не сразу реагирует. Если в любой момент при выполнении шагов в этой статье возникают проблемы с базой данных, рассмотрите возможность отключения автоматической приостановки. Чтобы узнать, как выполнить поиск автоматической приостановки в База данных SQL Azure бессерверным. На момент записи следующая команда AZ CLI отключит автоматическую приостановку для базы данных, настроенной в этой статье. az sql db update --resource-group $RESOURCEGROUP --server <Server name, without the .database.windows.net part> --name todos_db --auto-pause-delay -1

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

  1. Создайте загрузочный JAR-файл. Так как мы используем eap-datasources-galleon-pack базу данных MS SQL Server, необходимо указать версию драйвера базы данных, которую мы хотим использовать с этой переменной среды. Дополнительные сведения о eap-datasources-galleon-pack SQL Server и MS Server см. в документации из Red Hat.

    export MSSQLSERVER_DRIVER_VERSION=7.4.1.jre11
    mvn clean package
    
  2. Запустите ЗАгрузочный JAR-файл с помощью следующих команд.

    Необходимо убедиться, что база данных SQL Azure разрешает сетевой трафик от узла, на котором работает этот сервер. Так как вы выбрали "Добавить текущий IP-адрес клиента" при выполнении действий, описанных в кратком руководстве: создайте отдельную базу данных База данных SQL Azure, если узел, на котором работает сервер, является тем же узлом, с которого браузер подключается к портал Azure, сетевой трафик должен быть разрешен. Если узел, на котором работает сервер, является другим узлом, необходимо обратиться к портал Azure для управления правилами брандмауэра IP-адресов на уровне сервера.

    При запуске приложения необходимо передать необходимые переменные среды для настройки источника данных:

    export MSSQLSERVER_USER=azureuser
    export MSSQLSERVER_PASSWORD='Passw0rd!'
    export MSSQLSERVER_JNDI=java:/comp/env/jdbc/mssqlds
    export MSSQLSERVER_DATABASE=todos_db
    export MSSQLSERVER_HOST=<server name saved aside earlier>
    export MSSQLSERVER_PORT=1433
    mvn wildfly-jar:run
    

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

    Если появится сообщение об ошибке с текстом, похожим на следующий пример:

    Cannot open server '<your prefix>mysqlserver' requested by the login. Client with IP address 'XXX.XXX.XXX.XXX' is not allowed to access the server.
    

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

    Если вы получаете сообщение с текстом, похожим на следующий пример:

    Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: There is already an object named 'TODOS' in the database.
    

    Это сообщение указывает, что образец данных уже находится в базе данных. Это сообщение можно проигнорировать.

  3. (Необязательно) Если вы хотите проверить возможности кластеризации, вы также можете запустить больше экземпляров одного приложения, передав в загрузочный JAR-аргумент jboss.node.name , и, чтобы избежать конфликтов с номерами портов, переместив номера портов с помощью jboss.socket.binding.port-offset. Например, чтобы запустить второй экземпляр, представляющий новый модуль pod в OpenShift, можно выполнить следующую команду в новом окне терминала:

    export MSSQLSERVER_USER=azureuser
    export MSSQLSERVER_PASSWORD='Passw0rd!'
    export MSSQLSERVER_JNDI=java:/comp/env/jdbc/mssqlds
    export MSSQLSERVER_DATABASE=todos_db
    export MSSQLSERVER_HOST=<server name saved aside earlier>
    export MSSQLSERVER_PORT=1433
    mvn wildfly-jar:run -Dwildfly.bootable.arguments="-Djboss.node.name=node2 -Djboss.socket.binding.port-offset=1000"
    

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

    INFO  [org.infinispan.CLUSTER] (thread-6,ejb,node) ISPN000094: Received new cluster view for channel ejb
    

    Примечание.

    По умолчанию загрузочный JAR-файл настраивает подсистему JGroups для использования протокола UDP и отправляет сообщения для обнаружения других членов кластера в адрес многоадресной рассылки 230.0.0.4. Чтобы правильно проверить возможности кластеризации на локальном компьютере, операционная система должна быть способна отправлять и получать многоадресные диаграммы данных и направлять их на IP-адрес 230.0.0.4 через интерфейс Ethernet. Если в журналах сервера отображаются предупреждения, связанные с кластером, проверьте конфигурацию сети и убедитесь, что она поддерживает многоадресную рассылку на этом адресе.

  4. Откройте http://localhost:8080/ в браузере, чтобы перейти на домашнюю страницу приложения. Если вы создали больше экземпляров, к ним можно получить доступ, сменив номер порта, например http://localhost:9080/. Приложение должно выглядеть примерно так:

    Снимок экрана: демонстрационное приложение ToDo EAP.

  5. Проверьте работоспособность и готовность к работе для приложения. OpenShift использует эти конечные точки для проверки готовности модуля pod к получению запросов пользователей.

    Чтобы проверить состояние активности, выполните следующую команду:

    curl http://localhost:9990/health/live
    

    Вы должны увидеть следующий результат:

    {"status":"UP","checks":[{"name":"SuccessfulCheck","status":"UP"}]}
    

    Чтобы проверить состояние готовности, выполните следующую команду:

    curl http://localhost:9990/health/ready
    

    Вы должны увидеть следующий результат:

     {"status":"UP","checks":[{"name":"deployments-status","status":"UP","data":{"todo-list.war":"OK"}},{"name":"server-state","status":"UP","data":{"value":"running"}},{"name":"boot-errors","status":"UP"},{"name":"DBConnectionHealthCheck","status":"UP"}]}
    
  6. Нажмите клавиши Control-C , чтобы остановить приложение.

Развертывание в OpenShift

Чтобы развернуть приложение, мы будем использовать диаграммы JBoss EAP Helm, уже доступные в Azure Red Hat OpenShift. Кроме того, необходимо указать нужную конфигурацию, например пользователя базы данных, пароль базы данных, версию драйвера, которую мы хотим использовать, и сведения о подключении, используемые источником данных. В следующих шагах предполагается, что у вас есть sql Azure, запущенный и доступный из кластера OpenShift, и вы сохранили имя пользователя базы данных, пароль, имя узла, порт и имя базы данных в объекте OpenShift OpenShift Secret с именемmssqlserver-secret.

Перейдите к локальному репозиторию демонстрационного приложения и измените текущую ветвь bootable-jar-openshiftна:

git checkout bootable-jar-openshift

Давайте рассмотрим, что мы изменили в этой ветви:

  • Мы добавили новый профиль Maven с именем bootable-jar-openshift , который подготавливает ЗАгрузочный JAR-файл с определенной конфигурацией для запуска сервера в облаке. Например, подсистема JGroups позволяет использовать сетевые запросы для обнаружения других модулей pod с помощью протокола KUBE_PING.
  • Мы добавили набор файлов конфигурации в каталоге jboss-on-aro-jakartaee/deployment . В этом каталоге можно найти файлы конфигурации для развертывания приложения.

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

В следующих шагах объясняется, как развернуть приложение с диаграммой Helm с помощью веб-консоли OpenShift. Избегайте жесткого кодирования конфиденциальных значений в диаграмме Helm с помощью функции с именем "секреты". Секрет — это просто коллекция пар name=value, где значения указываются в определенном месте до их необходимости. В нашем случае диаграмма Helm использует два секрета, используя следующие пары name=value из каждого.

  • mssqlserver-secret

    • db-host передает значение MSSQLSERVER_HOST.
    • db-name передает значение MSSQLSERVER_DATABASE
    • db-password передает значение MSSQLSERVER_PASSWORD
    • db-port передает значение MSSQLSERVER_PORT.
    • db-user передает значение MSSQLSERVER_USER.
  • todo-list-secret

    • app-cluster-password передает произвольный пароль, заданный пользователем, чтобы узлы кластера могли формироваться более безопасно.
    • app-driver-version передает значение MSSQLSERVER_DRIVER_VERSION.
    • app-ds-jndi передает значение MSSQLSERVER_JNDI.
  1. Создайте mssqlserver-secret.

    oc create secret generic mssqlserver-secret \
        --from-literal db-host=${MSSQLSERVER_HOST} \
        --from-literal db-name=${MSSQLSERVER_DATABASE} \
        --from-literal db-password=${MSSQLSERVER_PASSWORD} \
        --from-literal db-port=${MSSQLSERVER_PORT} \
        --from-literal db-user=${MSSQLSERVER_USER}
    
  2. Создайте todo-list-secret.

    export MSSQLSERVER_DRIVER_VERSION=7.4.1.jre11
    oc create secret generic todo-list-secret \
        --from-literal app-cluster-password=mut2UTG6gDwNDcVW \
        --from-literal app-driver-version=${MSSQLSERVER_DRIVER_VERSION} \
        --from-literal app-ds-jndi=${MSSQLSERVER_JNDI}
    
  3. Откройте консоль OpenShift и перейдите к представлению разработчика. Чтобы узнать URL-адрес консоли для кластера OpenShift, выполните следующую команду. Войдите с помощью идентификатора kubeadmin пользователя и пароля, полученного на предыдущем шаге.

    az aro show \
        --name $CLUSTER \
        --resource-group $RESOURCEGROUP \
        --query "consoleProfile.url" \
        --output tsv
    

    <Выберите точку или> перспективу разработчика в раскрывающемся меню в верхней части области навигации.

    Снимок экрана: представление разработчика консоли OpenShift.

  4. <В области /> "Разработчик" выберите проект eap-demo в раскрывающемся меню "Проект".

    Снимок экрана: поле со списком проекта консоли OpenShift.

  5. Щелкните +Добавить. В разделе "Каталог разработчиков" выберите Helm Chart. Вы прибываете в каталог диаграмм Helm, доступный в кластере Azure Red Hat OpenShift. В поле "Фильтр по ключевым словам" введите eap. Вы увидите несколько вариантов, как показано здесь:

    Снимок экрана: консоль OpenShift EAP Helm Chart.

    Так как в нашем приложении используются возможности MicroProfile, мы выбираем диаграмму Helm для EAP Xp. Обозначает Xp пакет расширения. С помощью пакета расширения платформы корпоративных приложений JBoss разработчики могут использовать интерфейсы программирования приложений Eclipse MicroProfile (API) для создания и развертывания приложений на основе микрослужб.

  6. Выберите диаграмму JBoss EAP XP 4 Helm, а затем установите диаграмму Helm.

На этом этапе необходимо настроить диаграмму для сборки и развертывания приложения:

  1. Измените имя выпуска на eap-todo-list-demo.

  2. Мы можем настроить диаграмму Helm с помощью представления формы или представления YAML. В разделе " Настройка" выберите "Представление YAML".

  3. Измените содержимое YAML, чтобы настроить диаграмму Helm путем копирования и вставки содержимого файла Helm Chart, доступного в развертывании/приложении/todo-list-helm-chart.yaml , а не существующего содержимого:

    Содержимое YAML консоли OpenShift консоли EAP Helm Chart YAML

    Это содержимое делает ссылки на секреты, заданные ранее.

  4. Наконец, нажмите кнопку "Установить ", чтобы начать развертывание приложения. Это действие открывает представление топологии с графическим представлением выпуска Helm (с именем eap-todo-list-demo) и связанными ресурсами.

    Снимок экрана: топология консоли OpenShift.

    Выпуск Helm (сокращенный HR) называется eap-todo-list-demo. Он включает ресурс развертывания (сокращенный D) также с именем eap-todo-list-demo.

    Если выбрать значок с двумя стрелками в круге в нижней левой части поля D , вы перейдете в область журналов . Здесь можно наблюдать ход выполнения сборки. Чтобы вернуться к представлению топологии, выберите "Топология " в области навигации слева.

  5. По завершении сборки значок в левом нижнем углу отображает зеленую проверку

  6. После завершения развертывания контур круга темно-синий. Если навести указатель мыши на темно-синий, появится сообщение с сообщением о чем-то подобном 3 Running. Когда вы видите это сообщение, можно перейти к URL-адресу приложения (с помощью значка в правом верхнем углу) из маршрута, связанного с развертыванием.

    Снимок экрана: открытое консольНое приложение OpenShift.

  7. Приложение открывается в браузере, похожее на следующее изображение, готовое к использованию:

    Снимок экрана: запущенное приложение OpenShift.

  8. В приложении показано имя модуля pod, который служит сведениям. Чтобы проверить возможности кластеризации, можно добавить некоторые todos. Затем удалите pod с именем, указанным в поле "Имя узла сервера", которое отображается в приложении с помощью oc delete pod <pod-name>. После удаления модуля pod создайте новое приложение Todo в одном окне приложения. Вы можете увидеть, что новое todo добавляется с помощью запроса Ajax, а поле "Имя узла сервера" теперь отображает другое имя. За кулисами подсистема балансировки нагрузки OpenShift отправила новый запрос и доставила его в доступный модуль pod. Представление Jakarta Face восстанавливается из копии сеанса HTTP, хранящейся в модуле pod, обрабатывающей запрос. Действительно, можно увидеть, что поле идентификатора сеанса не изменилось. Если сеанс не реплицируется по модулям pod, вы получите Jakarta Face ViewExpiredException, и приложение не работает должным образом.

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

Удаление приложения

Если вы хотите удалить приложение, откройте консоль OpenShift и в представлении разработчика перейдите в меню Helm . В этом меню вы увидите все выпуски Helm Chart, установленные в кластере.

Приложение удаления OpenShift

Найдите диаграмму Helm eap-todo-list-demo и в конце строки выберите вертикальную точку дерева, чтобы открыть запись контекстного меню действия.

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

Выполните следующую команду, если вы хотите удалить секрет, содержащий конфигурацию приложения:

$ oc delete secrets/todo-list-secret
# secret "todo-list-secret" deleted

Удаление проекта OpenShift

Вы также можете удалить всю конфигурацию, созданную для этой демонстрации eap-demo , удалив проект. Для этого выполните следующую команду:

$ oc delete project eap-demo
# project.project.openshift.io "eap-demo" deleted

Удаление кластера Azure Red Hat OpenShift

Удалите кластер Azure Red Hat OpenShift, выполнив действия, описанные в руководстве. Удаление кластера Azure Red Hat OpenShift 4.

Удаление группы ресурсов

Если вы хотите удалить все ресурсы, созданные на предыдущих шагах, удалите группу ресурсов, созданную для кластера Azure Red Hat OpenShift.

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

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

Перейдите к просмотру параметров для запуска JBoss EAP в Azure.