Статьи

Развертывание микросервисов Java EE в OpenShift

Вчера я писал о простом микросервисе JAX-RS с WildFly Swarm. Вы узнали, как создать так называемый «толстый кувшин» с помощью Maven, а также использовали плагин Maven Docker для докертизации нашего микросервиса и запуска его локально на Docker Machine. Это был хороший способ проверить вещи на месте. Чего не хватало, так это запустить его в производство. Давайте посмотрим, какие шаги необходимы для запуска вчерашнего примера на OpenShift Origin.

Зачем корпоративной Java-разработке заботиться?

Но прежде всего давайте кратко рассмотрим, почему разработчик Enterprise Java должен заботиться обо всем этом. Есть кое-что о недавних ажиотажах и гудениях, которые позволяют мне немного задуматься. Конечно, они создают интересное игровое поле, и вы можете часами загружать изображения контейнеров и запускать их на своем ноутбуке. Но запустить их в производство пока было непросто. У Найджела очень хорошая публикация в блоге об устаревшей функции в Docker . И в нем есть еще одна жемчужина: параграф под названием «Воздействие на предприятие». Основная цитата:

«Я уверен, что подобные вещи делаются все время в крутых хипстерских компаниях […] Но это совершенно не делается на старых ржавых предприятиях […]».

(Найджел Поултон)

И я могу это второй. Корпоративные разработчики, архитекторы и менеджеры проектов используют более медленный и консервативный подход к внедрению всех этих технологий. И они ищут способы успешного управления инфраструктурой и проектами. Все эти технологии найдут свой путь в нашей повседневной работе, но они станут более управляемыми. Итак, мы просто делаем свою домашнюю работу, обучая себя всему этому и оценивая решения, которые помогут нам в этом. Но достаточно общих мыслей; Давайте начнем развертывать и масштабировать приложение Java EE.

Предпосылки

Установите и запустите OpenShift Origin и выполните шаги по созданию микросервиса WildFly Swarm JAX-RS в Docker-контейнере . Потому что это пример, я собираюсь развернуть и масштабировать дальше.

( ПРИМЕЧАНИЕ. Я использую оба: all-in-vm из проекта OpenShift и образ Vagrant, предоставляемый проектом Fabric8, взаимозаменяемые. Они работают практически одинаково и оба полагаются на источник OpenShift. Если вы видите URL-адреса, заканчивающиеся на .f8, например https: //vagrant.f8: 8443, в одном из кодов или примеров вы можете использовать localhost или другие взаимозаменяемые сопоставления хостов.)

Что такое Происхождение OpenShift?

OpenShift Origin — это исходная версия распределенной прикладной системы Red Hat OpenShift с открытым исходным кодом. Мы запустили этот проект, чтобы предоставить платформу, на которой команды разработчиков могли бы создавать и управлять собственными облачными приложениями поверх Docker и Kubernetes. Вы можете найти исходный код на Github, и мы знаем, что у вас есть отличные идеи по улучшению OpenShift Origin. Так что засучите рукава и присоединяйтесь к нам в сообществе .

Существует много знаний, чтобы освоить все интегрированные технологии. Но сообщество усердно работает над тем, чтобы сделать это как можно более понятным и управляемым для нас, разработчиков корпоративной Java. Чтобы дать вам краткий обзор OpenShift, это простая диаграмма того, как все работает:

Происхождение-обзор

Вы видите много общих частей здесь, если вы следили за последним шумом вокруг Докера и Кубернетеса. Запрос приходит через клиента и заканчивается на уровне маршрутизации. Он отправляется в службу и попадает в модуль, который запускает одно из наших изображений Docker в контейнере. Контроллеры контролируются модулями. Конечно, есть еще много чего, но это должно быть все, что вам нужно понять на данный момент, чтобы получить первое представление обо всем этом.

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

Происхождение-overview2

Особенно интересны интегрированный реестр Docker, поток образов, конфигурация развертывания и маршрутизация к нашим сервисам.

Основы — интерфейс администрирования и клиентские инструменты

После того, как вы установили свой бродячий ящик и запустили его, вы можете получить доступ к веб-администрированию, перейдя по адресу: https: // localhost: 8443. All-in-one-vm поставляется без настроенной защиты. Это означает, что используется провайдер идентификации «Разрешить все». Вы можете войти под любым непустым именем пользователя и паролем. Пользователь «admin» — это администратор со всеми правами. Вход с помощью «admin / admin» дает вам полную силу на Origin. Веб-администрация хороша для просмотра лог-файлов и общей картины. Он (пока) полностью не функционален и не позволяет вам настраивать или изменять вещи. Прежде всего, вам нужно использовать инструмент командной строки: «oc». Как и в случае с веб-администрацией, вы также должны войти в OpenShift:

1
oc login https://localhost:8443

Вам также предлагается ввести имя пользователя и пароль (admin / admin) и представить список проектов:

01
02
03
04
05
06
07
08
09
10
Authentication required for https://vagrant.f8:8443 (openshift)
Username: admin
Password:
Login successful.
 
Using project "default".
You have access to the following projects and can switch between them with 'oc project <projectname>':
  * default (current)
  * openshift
  * openshift-infra

Теперь вы готовы к администрированию в OpenShift.

Предоставление внутреннего реестра Docker

Если мы хотим запустить докеризованное приложение в OpenShift, которого нет в докер-хабе, нам нужно отправить его в реестр OpenShift Docker. По умолчанию он не доступен извне, поэтому первым делом нужно открыть сборку в реестре OpenShift Docker через маршрут.

1
oc create -f registry-route.json

Файл json содержит определение для маршрута и проверяется в моем репозитории Github. Обязательно настройте имя хоста в строке 8 в соответствии с вашими потребностями. Чтобы этот пример работал, я добавил следующее сопоставление в мой файл hosts в Windows:

1
172.28.128.4 registry.vagrant.f8

Когда маршрут успешно создан, все, что вам нужно сделать, это настроить свою среду соответствующим образом (вы уже сделали это, когда следили за моими вступительными постами в блоге. Так что это всего лишь напоминание):

1
set DOCKER_HOST=tcp://vagrant.f8:2375

Создание проекта и пользователя

Давайте создадим новый проект для нашего примера. По причинам, связанным с пространством имен, мы будем называть проект точно так же, как имя пользователя и изображения: в этом примере «myfear».

1
oc new-project myfear --description="WildFly Swarm Docker Image on OpenShift v3" --display-name="WildFly Swarm Project"

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

Происхождение-проекты

Давайте создадим пользователя «myfear», просто войдя в систему как:

1
c login https://vagrant.f8:8443 -u myfear

Настройка примера

Нам нужно изменить некоторые части файла pom.xml из примера вчерашнего дня. Прежде всего, мы должны сообщить плагину Docker Maven, что он должен использовать личный реестр, работающий по адресу registry.vagrant.f8: 80. Хотите знать, почему это не порт 5000? Потому что мы открыли сервис через OpenShift, а HAProxy сделал это через порт 80. Раскомментируйте две строки в pom.xml :

1
2
<docker.host>tcp://vagrant.f8:2375</docker.host>
<docker.registry>registry.vagrant.f8:80</docker.registry>

И получите токен входа для пользователя myfear через oc client tools:

1
$oc whoami -t

который выведет что-то вроде этого:

1
ykHRzUGGu-FAo_ZS5RJFcndjYw0ry3bskMgFjqK1SZk

Теперь обновите токен в элементе <authConfig> pom. Это в основном это.

Построить и нажать изображение

Изображение уже собрано в моем предыдущем посте в блоге , но давайте сделаем это снова здесь:

1
mvn clean install docker:build

Теперь поместите изображение в наш реестр OpenShift Docker:

1
mvn docker:push

Который выведет процесс отправки изображения в registry.vagrant.f8: 80 / myfear / swarm-sample.

Запустите образ Docker в OpenShift

Теперь мы просто используем обычный способ раскрутить новый образ Docker в OpenShift:

1
oc new-app --docker-image=myfear/swarm-sample:latest

И посмотрите, что происходит: OpenShift на самом деле создал несколько ресурсов за кулисами, чтобы справиться с развертыванием и запуском этого образа Docker. Во-первых, он создал сервис, который идентифицирует набор модулей, которые он будет использовать для прокси и балансировки нагрузки. Службы назначают IP-адрес и пару портов, которые при обращении перенаправляются на соответствующий сервер. Причина, по которой вы заботитесь о службах, заключается в том, что они в основном действуют в качестве прокси-сервера / балансировщика нагрузки между вашими модулями и всем, что нужно для использования модулей, работающих внутри. среда OpenShift. Получите полное описание того, что OpenShift создал из нашего изображения, используя команду description:

1
oc describe service swarm-sample

Какие выводы:

01
02
03
04
05
06
07
08
09
10
Name:                   swarm-sample
Namespace:              myfear
Labels:                 app=swarm-sample
Selector:               app=swarm-sample,deploymentconfig=swarm-sample
Type:                   ClusterIP
IP:                     172.30.25.44
Port:                   8080-tcp        8080/TCP
Endpoints:              172.17.0.5:8080
Session Affinity:       None
No events.

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

1
oc expose service swarm-sample --hostname=wildfly-swarm.vagrant.f8

И, как вы уже догадались, нам также нужно отобразить имя хоста в файле hosts:

1
172.28.128.4    wildfly-swarm.vagrant.f8

И мы сделали. Почему я не использовал файл json для создания маршрута? Поскольку я хотел показать вам, что это может быть проще, поскольку образ использует правильные определения EXPOSE для портов, команда oc expose выполняет эту работу без необходимости возиться с json. Это тот же результат.

Перейдите по адресу: http: //wildfly-swarm.vagrant.f8/rs/customer и посмотрите результат:

1
{"text":"WildFly Swarm Docker Application on OpenShift at http://wildfly-swarm.vagrant.f8/rs/ - Hostname: swarm-sample-1-7mmd7"}

Имя хоста — это модуль, на котором работает наш контейнер.