Статьи

OpenShift v3: начало работы с Java EE 7 с использованием WildFly и MySQL

OpenShift-происхождения OpenShift — платформа PaaS с открытым исходным кодом от Red Hat. OpenShift v3 (который должен быть выпущен в этом году) обеспечит целостный опыт работы с вашими микросервисами с использованием Docker и Kubernetes. В классическом стиле Red Hat вся работа выполняется в OpenShift Origin с открытым исходным кодом. Это также приведет к появлению следующего основного выпуска OpenShift Online и OpenShift Enterprise .

OpenShift v3 использует новый стек платформы, который использует множество проектов сообщества, в которых участвует Red Hat, таких как Fedora, Centos, Docker, Project Atomic, Kubernetes и OpenStack. Платформа OpenShift v3, объединяющая Docker, Kubernetes, Atomic и More, подробно объясняет этот стек платформы.

OpenShift-стек

Этот технический совет объяснит, как начать работу с OpenShift v3, давайте начнем!

Начало работы с OpenShift v3

Предварительно собранные двоичные файлы для OpenShift v3 можно загрузить с Origin на GitHub . Однако самый простой способ начать работу — запустить OpenShift Origin в качестве контейнера Docker.

Жизненный цикл приложения OpenShift предоставляет полную информацию о том, что требуется для запуска образца приложения с нуля. Этот блог будет использовать эти шаги и адаптировать их для запуска с помощью boot2docker VM на Mac. И в этом процессе мы также развернем приложение Java EE 7 на WildFly, которое будет обращаться к базе данных в отдельном контейнере MySQL.

Вот наша схема развертывания:

techtip73-OpenShift-v3-wildfly-MySQL-развертывания

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

Давайте начнем!

Настроить Docker Daemon

  1. Настройте демон docker на своем хосте так, чтобы он доверял службе реестра docker, которую вы запускаете. Этот реестр будет использоваться для отправки образов для цикла сборки / тестирования / развертывания.
    • Войдите в boot2docker VM как:
      1
      boot2docker ssh
    • Редактировать файл
      1
      sudo vi /var/lib/boot2docker/profile

      Это будет пустой файл.

    • Добавьте следующую пару имя / значение:
      1
      EXTRA_ARGS="--insecure-registry 172.30.17.0/24"

      Сохраните файл и выйдите из редактора.

    Это даст указание демону docker доверять любому реестру Docker в подсети 172.30.17.0/24.

Ознакомьтесь с примерами OpenShift v3 и Java EE 7

  1. Загрузите и установите Go и настройте переменную среды GOPATH и PATH . Проверьте исходный каталог OpenShift:
    1
    2
    3
    4
    5
    6
    7
    8
    openshift> git clone https://github.com/openshift/origin.git
    Cloning into 'origin'...
    remote: Counting objects: 21451, done.
    remote: Compressing objects: 100% (76/76), done.
    remote: Total 21451 (delta 26), reused 15 (delta 1)
    Receiving objects: 100% (21451/21451), 35.11 MiB | 1.24 MiB/s, done.
    Resolving deltas: 100% (11392/11392), done.
    Checking connectivity... done.

    Обратите внимание на каталог, где его выписали. В этом случае это ~ /workspaces/openshift .

    Создайте рабочее пространство:

    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    make release
    origin> make release
    rm -rf _output Godeps/_workspace/pkg
    hack/build-release.sh
    Unable to find image 'openshift/origin-release' locally
    Pulling repository openshift/origin-release
    c59f040a4054: Download complete
    511136ea3c5a: Download complete
    5b12ef8fd570: Download complete
    dade6cb4530a: Download complete
    bd195712b86c: Download complete
    4aae29c1c846: Download complete
    d8738da3ed4c: Download complete
    7f7491063665: Download complete
    b5cfa9eebdb5: Download complete
    2f6297477756: Download complete
    dc98bd93df2f: Download complete
    1be2a7550a3d: Download complete
    42fd088f8c55: Download complete
    b6f6ad4012df: Download complete
    Status: Downloaded newer image for openshift/origin-release:latest
  2. Проверьте рабочую область javaee7-hol , которая была преобразована в приложение Kubernetes:
    1
    2
    3
    4
    5
    6
    7
    8
    origin> git clone https://github.com/bparees/javaee7-hol
    Cloning into 'javaee7-hol'...
    remote: Counting objects: 1159, done.
    remote: Compressing objects: 100% (49/49), done.
    remote: Total 1159 (delta 35), reused 37 (delta 21)
    Receiving objects: 100% (1159/1159), 20.35 MiB | 1.78 MiB/s, done.
    Resolving deltas: 100% (605/605), done.
    Checking connectivity... done.

    Это также делается в каталоге ~/workspaces/openshift .

Запустите контейнер OpenShift v3

  1. Запустите OpenShift Origin как контейнер Docker:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ~> docker run -d --name "openshift-origin" --net=host --privileged \
      -v /var/run/docker.sock:/var/run/docker.sock  \
      -v /Users/arungupta/workspaces/openshift:/workspaces/openshift \
      -v /usr/local/bin/docker:/usr/bin/docker \
      openshift/origin start --public-master=$(boot2docker ip)
     
    The VM's Host only interface IP address is:
     
    0ae85091e7ad7e85697575369f008273a6673d112b49860f5557a61d9e82d908

    Примечание. ~/workspaces/openshift монтируется как том /workspaces/openshift в контейнере. Также установлены дополнительные тома.

    Убедитесь, что контейнер работает:

    1
    2
    3
    ~> docker ps
    CONTAINER ID        IMAGE                    COMMAND                CREATED             STATUS              PORTS               NAMES
    0ae85091e7ad        openshift/origin:beta1   "/usr/bin/openshift    2 minutes ago       Up 2 minutes                            openshift-origin
  2. Войдите в контейнер как:
    1
    2
    openshift> docker exec -it `docker ps | grep origin:beta1 | awk '{ print $1 }'` bash
    [root@boot2docker openshift]#
  3. Установите реестр Docker в контейнере, введя следующую команду:
    1
    2
    3
    export CERT_DIR=/var/lib/openshift/openshift.local.certificates/openshift-client && \
    export KUBECONFIG=/var/lib/openshift/openshift.local.certificates/admin/.kubeconfig && \
    cd /workspaces/openshift/origin && hack/install-registry.sh
  4. Убедитесь, что реестр работает, получив список модулей:
    1
    2
    3
    [root@boot2docker origin]# osc get pods
    POD                       IP                  CONTAINER(S)         IMAGE(S)                    HOST                    LABELS                                                                                                             STATUS
    docker-registry-1-gfkbz   172.17.0.14         registry-container   openshift/docker-registry   boot2docker/127.0.0.1   deployment=docker-registry-1,deploymentconfig=docker-registry,name=registrypod,template=docker-registry-template   Running

    osc является клиентским CLI OpenShift и позволяет создавать и управлять проектами OpenShift. Некоторые команды kubectl также могут использовать этот скрипт.

  5. Убедитесь, что служба реестра работает. Обратите внимание, что фактический IP-адрес может отличаться:
    1
    2
    3
    4
    5
    [root@boot2docker origin]# osc get services
    NAME                LABELS                                    SELECTOR            IP                  PORT
    docker-registry     template=docker-registry-template         name=registrypod    172.30.17.142       5001
    kubernetes          component=apiserver,provider=kubernetes   <none>              172.30.17.2         443
    kubernetes-ro       component=apiserver,provider=kubernetes   <none>              172.30.17.1         80
  6. Убедитесь, что служба реестра доступна:
    1
    curl `osc get services docker-registry -o template --template="{{ .portalIP}}:{{ .port }}"`

    И посмотрите на результат:

    1
    "docker-registry server (dev) (v0.9.0)"

Доступ к веб-консоли OpenShift v3

  1. Сервер OpenShift Origin запущен и работает. Узнайте IP-адрес хоста, используя IP-адрес boot2docker ip и откройте http: // <IP-адреса хоста boot2docker>: 8444 для просмотра веб-консоли OpenShift в вашем браузере. Например, консоль доступна по адресу https://192.168.59.103:8444 / на этой машине.

    techtip73-OpenShift-происхождение-браузер-CERT-1007x1024

    Вам потребуется, чтобы браузер принял сертификат по адресу https://<host>:8444 прежде чем консоль сможет обратиться к API OpenShift. Конечно, это не было бы необходимо с законным сертификатом.

  2. Откроется экран входа в систему OpenShift Origin. Введите имя пользователя / пароль как admin / admin:

    techtip73-OpenShift-начало-Логин-экран

    и нажмите на кнопку «Войти». Веб-консоль по умолчанию выглядит следующим образом:

    techtip73-OpenShift-v3-умолчанию-Логин-экран

Создать проект OpenShift v3

  1. Используйте project.json из github.com/openshift/origin/blob/master/examples/sample-app/project.json в контейнере OpenShift v3 и создайте тестовый проект следующим образом:
    1
    2
    [root@boot2docker origin]# osc create -f /workspaces/openshift/origin/examples/sample-app/project.json
    test

    Обновление веб-консоли теперь показывает:

    techtip73-OpenShift-происхождение тест-проект

    При нажатии на «OpenShift 3 Sample» отображается пустое описание проекта:

    techtip73-OpenShift-v3-пусто-проект

  2. Запрос на создание шаблона приложения:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    [root@boot2docker openshift]# cd javaee7-hol/
    [root@boot2docker javaee7-hol]# osc process -n test -f application-template-jeebuild.json | osc create -n test -f -
    frontend
    origin-jee-sample
    wildfly-8-centos
    jee-sample-build
    frontend
    mysql
    database
  3. Веб-консоль автоматически обновляется и показывает:

    techtip73-OpenShift-v3-javaee7-проект по умолчанию

    Список запущенных сервисов можно рассматривать как:

    techtip73-OpenShift-v3-javaee7-проект-услуги

Построить проект

  1. Запустите начальную сборку вашего проекта:
    1
    2
    [root@boot2docker javaee7-hol]# osc start-build -n test jee-sample-build
    cee73fbc-b32d-11e4-a0f2-5282784576db
  2. Следите за сборками и ждите, пока статус перейдет в «завершено» (это может занять несколько минут):
    1
    2
    3
    [root@boot2docker javaee7-hol]#  osc get -n test builds
    NAME                                   TYPE                STATUS              POD
    cee73fbc-b32d-11e4-a0f2-5282784576db   STI                 Running             build-cee73fbc-b32d-11e4-a0f2-5282784576db

    Вы можете добавить флаг –watch для ожидания обновлений до завершения сборки:

    1
    2
    3
    4
    5
    [root@boot2docker javaee7-hol]#  osc get -n test builds --watch
    NAME                                   TYPE                STATUS              POD
    cee73fbc-b32d-11e4-a0f2-5282784576db   STI                 Running             build-cee73fbc-b32d-11e4-a0f2-5282784576db
    NAME                                   TYPE                STATUS              POD
    cee73fbc-b32d-11e4-a0f2-5282784576db   STI                 Complete            build-cee73fbc-b32d-11e4-a0f2-5282784576db

    Подождите, пока столбец STATUS покажет Complete . Подготовка всех компонентов (WIldFly, MySQL, Java EE 7) займет несколько минут. По сути, их новые образы Docker создаются и помещаются в локальный реестр, который был запущен ранее.

    Нажмите Ctrl+C чтобы остановить просмотр сборок после того, как статус изменится на Complete .

  3. Полный журнал сборки можно увидеть как:
    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    [root@boot2docker javaee7-hol]# osc build-logs -n test cee73fbc-b32d-11e4-a0f2-5282784576db
    2015-02-13T03:10:07.065718606Z Cloning into '/tmp/sti552730161/upload/src'...
    2015-02-13T03:11:03.184576532Z I0213 03:11:03.184326       1 build.go:160] Successfully built 172.30.17.142:5001/test/origin-jee-sample
    2015-02-13T03:11:07.261489310Z The push refers to a repository [172.30.17.142:5001/test/origin-jee-sample] (len: 1)
    2015-02-13T03:11:07.261489310Z Sending image list
    2015-02-13T03:11:07.275256699Z Pushing repository 172.30.17.142:5001/test/origin-jee-sample (1 tags)
    2015-02-13T03:11:07.307836081Z Pushing
    Buffering to disk07.314345045Z Buffering to disk 1.024 kB
    2015-02-13T03:11:07.315452728Z Buffering to disk
    Pushing-13T03:11:07.323973430Z Pushing [=========================>                         ]    512 B/1.024 kB 0
     
    . . .
     
    Pushing-13T03:13:05.932725921Z Pushing [================================================>  ]  6.56 MB/6.704 MB 0
    Pushing-13T03:13:05.942989165Z Pushing [=================================================> ] 6.635 MB/6.704 MB 0
    Pushing-13T03:13:05.943025109Z Pushing [=================================================> ] 6.702 MB/6.704 MB 0
    Pushing-13T03:13:05.947665528Z Pushing [==================================================>] 6.704 MB/6.704 MB
    2015-02-13T03:13:05.953476634Z Image successfully pushed
    2015-02-13T03:13:05.953476634Z Pushing tag for rev [b0a7868377c1] on {http://172.30.17.142:5001/v1/repositories/test/origin-jee-sample/tags/latest}
  4. Проверьте, запущены ли модули приложения:
    1
    2
    3
    4
    5
    [root@boot2docker javaee7-hol]# osc get -n test pods   
    POD                                          IP                  CONTAINER(S)        IMAGE(S)                                                                                                     HOST                    LABELS                                                                              STATUS
    build-cee73fbc-b32d-11e4-a0f2-5282784576db   172.17.0.17         sti-build           openshift/origin-sti-builder:v0.3                                                                            boot2docker/127.0.0.1   <none>                                                                              Succeeded
    database-1-axe6d                             172.17.0.16         jee-database        mysql                                                                                                        boot2docker/127.0.0.1   deployment=database-1,deploymentconfig=database,name=database,template=jee-sample   Running
    frontend-1-pkcia                             172.17.0.20         jee-sample          172.30.17.142:5001/test/origin-jee-sample:b0a7868377c10a50b40019be70e22d040b9a2bb2d87fa3932b700494e50a4de6   boot2docker/127.0.0.1   deployment=frontend-1,deploymentconfig=frontend,name=frontend,template=jee-sample   Running

    Обратите внимание, что теперь работают модули «frontend» и «database».

  5. Определить IP услуги «интерфейс»:
    1
    2
    3
    4
    [root@boot2docker javaee7-hol]# osc get -n test services
    NAME                LABELS                SELECTOR            IP                  PORT
    frontend            template=jee-sample   name=frontend       172.30.17.115       8080
    mysql               template=jee-sample   name=database       172.30.17.75        3306
  6. Откройте приложение по адресу http: // <IP-адрес «внешнего интерфейса»>: 8080 / movieplex7-1.0-SNAPSHOT должно работать. Обратите внимание, что IP-адрес может (скорее всего, будет) различаться. В этом случае это будет http://172.30.17.115:8080/moviexplex7-1.0-SNAPSHOT. Приложение пока недоступно, так как для настройки брандмауэра на Mac требуется дополнительная отладка, когда OpenShift v3 используется в качестве контейнера Docker. , Пока мы не выясним это, вы можете сделать docker ps в вашей виртуальной машине boot2docker, чтобы увидеть список всех контейнеров:
    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    origin> docker ps
    CONTAINER ID        IMAGE                                                                                                       COMMAND                CREATED             STATUS              PORTS               NAMES
    c776cabb72f8        172.30.17.17:5001/test/origin-jee-sample:91d1b5a5ed58e1642aafbd652eba0b7eae3a0ac08c17729d205ae88204f64449   "/tmp/scripts/run"     2 hours ago         Up 2 hours                              k8s_jee-sample.7af25557_frontend-2-9ciae.test.api_12a0d77e-b3b5-11e4-81f6-5282784576db_53f91f55                     
    e7f87112c473        openshift/origin-pod:beta1                                                                                  "/pod"                 2 hours ago         Up 2 hours                              k8s_POD.9cbfdefa_frontend-2-9ciae.test.api_12a0d77e-b3b5-11e4-81f6-5282784576db_64263b61                            
    7e7579db5f82        openshift/origin-pod:beta1                                                                                  "/pod"                 2 hours ago         Up 2 hours                              k8s_POD.123cbdd6_build-e075047d-b3b4-11e4-81f6-5282784576db.test.api_e07bcdb2-b3b4-11e4-81f6-5282784576db_376c0e63  
    74082d7791ec        openshift/origin-pod:beta1                                                                                  "/pod"                 2 hours ago         Up 2 hours                              k8s_POD.123cbdd6_build-76364bb6-b3b2-11e4-81f6-5282784576db.test.api_7639e3a5-b3b2-11e4-81f6-5282784576db_f653c7fd  
    3e42dacb0da7        mysql:latest                                                                                                "/entrypoint.sh mysq   3 hours ago         Up 3 hours                              k8s_jee-database.f12628ae_database-1-bqg8v.test.api_56093bac-b3b2-11e4-81f6-5282784576db_193dddf7                   
    cb551c8cf7bf        openshift/origin-pod:beta1                                                                                  "/pod"                 3 hours ago         Up 3 hours                              k8s_POD.95f2def6_database-1-bqg8v.test.api_56093bac-b3b2-11e4-81f6-5282784576db_295fc320                            
    e8719152df42        openshift/docker-registry:latest                                                                            "\"sh -c 'echo \"$OP   3 hours ago         Up 3 hours                              k8s_registry-container.4e338487_docker-registry-1-bt49s.default.api_177a691c-b3b0-11e4-81f6-5282784576db_a6f4f83b   
    d3ecc5841c3b        openshift/origin-pod:beta1                                                                                  "/pod"                 3 hours ago         Up 3 hours                              k8s_POD.8a29deef_docker-registry-1-bt49s.default.api_177a691c-b3b0-11e4-81f6-5282784576db_ba53d62b                  
    a506222fae91        openshift/origin:beta1                                                                                      "/usr/bin/openshift    3 hours ago         Up 3 hours                              openshift-origin

    И затем войдите в контейнер, связанный с интерфейсом, как:

    1
    docker exec -it `docker ps | grep origin-jee-sample | awk '{ print $1 }'` bash

    Это войдет в контейнер Docker, где вы сможете проверить, успешно ли развернуто приложение, введя следующую команду:

    1
    bash-4.2$ curl http://localhost:8080/movieplex7-1.0-SNAPSHOT/

    Это распечатает страницу index.html из приложения, лицензия которого находится вверху, а остальная часть страницы после этого.

    Теперь, когда проблема с брандмауэром решена, эта страница будет доступна и на хосте Mac.

Подведем итоги:

  • Клонировал образец репозитория OpenShift Origin и Java EE 7
  • Запустил OpenShift v3 в качестве контейнера Docker
  • Загрузил веб-консоль OpenShift v3
  • Создать проект OpenShift v3
  • Загруженный шаблон приложения Java EE 7
  • Запустил сборку, в которой развернуто приложение

Наслаждайтесь!