Статьи

Запуск WildFly на Кубернетес.

RedHat-контейнер-стека Вы когда-нибудь мечтали запустить WildFly в OpenShift и использовать новейшие функции Kubernetes: в Windows? Звучит как богохульство: все в этих технологиях кричит GO и Linux. Windows, кажется, не подходит. Но я знаю, что многие разработчики застряли на Windows. Корпоративные ноутбуки, простое управление и любые другие причины, по которым приходят разные работодатели. Хорошая новость в том, что есть небольшая и смелая группа людей, которые не подведут тех пользователей Windows. И я должен признать, что запуск операционной системы Windows при работе в Red Hat является сложной задачей.

Мы — компания Linux и компания с открытым исходным кодом, и все, что Windows просто чувствует неправильно.

Как сказал мой коллега Грант в своем блоге пару недель назад:

«При этом я решил использовать Windows в качестве основной операционной системы, чтобы обеспечить пользователям OpenShift отличные возможности для разработчиков. «

Итак, я попытался запустить Kubernetes и OpenShift в Windows некоторое время, что сейчас изначально невозможно. С другой стороны, я действительно хочу взять в свои руки последние разработки и посмотреть на модные вещи. Но есть решение: Vagrant и Fabric8.

И Fabric8 только потому, что я разработчик Java. На самом деле, если вы являетесь Java-разработчиком, желающим работать с Kubernetes Fabric8, это действительно самый простой и быстрый способ начать работу. Итак, давайте настроим OpenShift и Fabric8 на машине с Windows.

Предпосылки

Скачайте и установите Vagrant (не волнуйтесь, это лицензия MIT). Сделано с этим? Перезагрузите компьютер (вы знаете, почему это Windows.) Вам нужно будет установить дополнительный плагин Vagrant. Переключитесь на строку cmd и введите:

1
$vagrant plugin install vagrant-hostmanager-fabric8

Vagrant-hostmanager — это плагин Fabric8 Vagrant 1.1+, который управляет файлом / etc / hosts на гостевых машинах (и, необязательно, на хосте). Его цель состоит в том, чтобы обеспечить разрешение сред с несколькими компьютерами, развернутых с облачным провайдером, где IP-адреса заранее неизвестны.

Единственное, что вам нужно установить и подготовить, — это VirtualBox (под лицензией GPL!)

Перейдите и клонируйте репозиторий git установщика Fabric8 и перейдите в папку openshift / latest:

1
2
$ git clone https://github.com/fabric8io/fabric8-installer.git
$ cd fabric8-installer/vagrant/openshift/latest

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

Вы должны добавить новые маршруты вручную в% WINDIR% \ System32 \ drivers \ etc \ hosts.

Для вашего удобства при запуске vagrant будет предварительно добавлен набор маршрутов для приложений Fabric8 по умолчанию.

Для новых сервисов найдите следующую строку и добавьте ваши новые маршруты (<service-name> .vagrant.f8) в этот файл в новой строке, например:

1
2
3
4
## vagrant-hostmanager-start id: 9a4ba3f3-f5e4-4ad4-9e80-b4045c6cf2fc
172.28.128.4  vagrant.f8 fabric8.vagrant.f8 jenkins.vagrant.f8 .....
172.28.128.4 myfear-wildfly-test.vagrant.f8
## vagrant-hostmanager-end

Теперь запустите Vagrant VM:

1
vagrant up

Если вы хотите настроить параметры виртуальной машины, вам нужно отредактировать Vagrantfile. Запуск, включая загрузки, занимает пару минут (Хорошее время для # coffee ++). Пока вы ждете, прыгните вперед и установите клиент OpenShift для Windows. Загрузите один для вашей ОС из исходного проекта на github . Сборка Windows имеет 55 МБ. Далее нужно распаковать его в папку по вашему выбору. Обязательно добавьте эту папку в переменную окружения PATH.

1
set PATH=%PATH%;"D:\Program Files (x86)\openshift-origin-v1.0.3"

Пока вы это делаете, добавьте еще несколько переменных среды:

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

Предполагая, что вы не изменили маршруты по умолчанию, добавленные в ваш файл hosts при запуске vagrant.

Первый позволяет вашему OpenShift cli использовать правильный домен Kubernetes, а второй позволяет вам повторно использовать тот же демон Docker, который уже работает в вашем бродячем образе Fabric8. Пожалуйста, убедитесь, что НЕ определяете какие-либо другие переменные Docker, такие как DOCKER_CERT_PATH или DOCKER_TLS_VERIFY!

Вероятно, это хорошая идея добавить это в переменные среды вашей системы или поместить в пакетный скрипт.

Примечание. Обязательно используйте клиент Docker 1.6 для Windows ( скачать exe ). Последняя версия 1.7 еще не работает.

После того, как окно vagrant создано и загружены образы док-станции, консоль fabric8 должна появиться по адресу http: //fabric8.vagrant.f8/ .

Ваш браузер будет жаловаться на небезопасное соединение, потому что сертификат самоподписан. Вы знаете, как принять это, не так ли ?

Введите admin и admin как имя пользователя и пароль. Теперь вы видите все уже установленные приложения fabric8. Узнайте больше о приложениях и как их построить в документации.

Теперь давайте посмотрим, сможем ли мы использовать демон docker в бродячем образе:

1
docker ps

и посмотрите полный список запущенных изображений (здесь выдержка):

1
2
3
4
CONTAINER ID        IMAGE                                            COMMAND                CREATED              STATUS                  PORTS                                                             NAMES
d97e438222d1        docker.io/fabric8/kibana4:4.1.0                  "/run.sh"              7 seconds ago        Up Less than a second                                                                      k8s_kibana.7abf1ad4_kibana-4gvv6_default_500af2d1-32b8-11e5-8481-080027bdffff_4de5764e                                  
eaf419a177d6        fabric8/fluentd-kubernetes:1.0                   "fluentd"              About a minute ago   Up About a minute                                                                          k8s_fluentd-elasticsearch.920b947c_fluentd-elasticsearch-172.28.128.4_default_9957562ee416ea2e083f45adb9b6edd0_676633bf  
c4111cea4474        openshift/origin-docker-registry:v1.0.3          "/bin/sh -c 'REGISTR   3 minutes ago        Up 3 minutes

И последнее, что нужно проверить, войдите в OpenShift с помощью инструмента командной строки:

1
oc login https://172.28.128.4:8443

снова используйте admin и admin в качестве имени пользователя и пароля. Теперь проверьте, какие службы уже запущены:

1
oc get services

Теперь вы готовы к следующим шагам. Давайте раскрутим экземпляр WildFly в OpenShift с Fabric8.

Докеризация вашего приложения Java EE

Хорошо, как это работает? OpenShift построен поверх Docker и Kubernetes. И Fabric8 дает нормальному разработчику разумную абстракцию поверх всех этих проблем инфраструктуры. С чего начать? Давайте начнем с простого проекта Java EE 7. Это действительно простой в этом случае. HTML-страница и сервлет HelloWorld . Первый шаг — это докеризация. Существует замечательный плагин, который является частью экосистемы инструментов Fabric8 под названием docker-maven-plugin . Просто добавьте это в ваш pom.xml и определите, как должно выглядеть изображение. Волшебство заключается в конфигурации плагина:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 <configuration>
                    <images>
                        <image>
                            <name>myfear/wildfly-test:latest</name>
                            <build>
                                <from>jboss/wildfly:9.0.1.Final</from>
                                 <maintainer>markus at jboss.org</maintainer>
                                <assembly>
                                    <inline>
                                        <dependencySets>
                                            <dependencySet>
                                                <includes>
                                                    <include>net.eisele:sample-web</include>
                                                </includes>
                                                <outputFileNameMapping>sample.war</outputFileNameMapping>
                                            </dependencySet>
                                        </dependencySets>
                                    </inline>
                                     <user>jboss:jboss:jboss</user>
                                    <basedir>/opt/jboss/wildfly/standalone/deployments</basedir>
                                </assembly>
                            </build>
                        </image>
                    </images>
 </configuration>

Работает

1
mvn clean install docker:build

Создает ваше приложение и создает ваш образ докера. Кроме того, этот образ будет загружен в реестр докеров, работающих на вашем экземпляре OpenShift. Это настроено с двумя дополнительными свойствами maven

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

Есть еще одно свойство для ухода:

1
<docker.assemblyDescriptorRef>artifact</docker.assemblyDescriptorRef>

Он определяет, какие части сборки будут скопированы в образ Docker.

Полученный Dockerfile выглядит так:

1
2
3
4
5
6
FROM jboss/wildfly:9.0.1.Final
MAINTAINER markus at jboss.org
COPY maven /opt/jboss/wildfly/standalone/deployments/
USER root
RUN ["chown", "-R", "jboss:jboss","/opt/jboss/wildfly/standalone/deployments/"]
USER jboss

и папка maven содержит ваше приложение как файл war. С этого момента вы также можете использовать образ докера и отправить его в официальный док-концентратор или другой частный репозиторий. В этом нет особой магии. Найдите все параметры конфигурации в обширном руководстве по плагину docker-maven .

Fabric8 — Docker и Kubernetes теперь можно использовать

Цель Fabric8 — помочь любому разработчику, команде и организации, которая хочет работать с контейнерами. Никто на самом деле не хочет использовать командную строку для запуска и запуска контейнеров. Кроме того, есть еще много чего: поддерживать их работу, перемещать их по хостам, осуществлять мониторинг, и, и, и. Даже не думайте о микросервисах прямо сейчас, но им нужно еще больше. Более тонкий контроль, больше команд, больше CI / CD и функции автообнаружения. И все это Fabric8. Он может создать полный конвейер CI / CD с одобрениями и страховкой качества кода. Если вы хотите увидеть полный пример, посмотрите, что Джеймс Ролингс написал пару дней назад . Итак, что это значит для моего проекта Java EE и как теперь развернуть его в OpenShift? Прочитайте немного о том, как запустить приложение в OpenShift, с хорошим обзорным постом Аруна Гупты. Он также включает указатель на жизненный цикл OpenShift . В основном вам необходимо создать проект OpenShift и включить файл json, который описывает ваше приложение, включая все ссылки на изображения докера. Выполнимо. Точно. Но Fabric8 может сделать лучше. Существует еще один плагин Maven, который снимает с вас всю эту нагрузку и позволяет просто развернуть ваше приложение. Точно, как я ожидал, как разработчик Java EE. Давайте добавим плагин к вашему проекту и немного его настроим:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
    <plugin>
                <groupId>io.fabric8</groupId>
                <artifactId>fabric8-maven-plugin</artifactId>
                <version>${fabric8.version}</version>
                <executions>
                    <execution>
                        <id>json</id>
                        <phase>generate-resources</phase>
                        <goals>
                            <goal>json</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>attach</id>
                        <phase>package</phase>
                        <goals>
                            <goal>attach</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

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

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
<!-- Defining the Service Name for Fabric8 -->
<fabric8.service.name>myfear-wildfly-test</fabric8.service.name>
<!-- Defining the internal service port -->
<fabric8.service.port>9101</fabric8.service.port>
<!-- the expsed container port -->
<fabric8.service.containerPort>8080</fabric8.service.containerPort>
<!-- the component label, as shown in the console -->
<fabric8.label.component>${project.artifactId}</fabric8.label.component>
<!-- the container label -->
<fabric8.label.container>wildfly</fabric8.label.container>
<!-- the application group label -->
<fabric8.label.group>myfears</fabric8.label.group>
<!-- the domain were working in -->
<fabric8.domain>vagrant.f8</fabric8.domain>
<!-- We don't want to upload images, but want OpenShift to pull them automatically -->
 <fabric8.imagePullPolicy>IfNotPresent</fabric8.imagePullPolicy>

Хорошо, вот и все. Большинство из них — это названия, метки и конфигурации, которые нужно понять одноразово. Все, что нам действительно нужно, это файл JSON Kubernetes. Итак, наберите:

1
mvn fabric8:json fabric8:apply

Что не работает локально с моей установкой, так это то, что мой файл hosts обновлен с новой маршрутизацией. Таким образом, вам может потребоваться добавить сопоставление доменного имени вручную:

1
172.28.128.4 myfear-wildfly-test.vagrant.f8

Через пару секунд новый модуль будет создан, и вы сможете получить доступ к своему приложению через http: //myfear-wildfly-test.vagrant.f8/ . Это запускает ваше приложение в OpenShift.

wildfly-приложение

Снова попробуйте docker ps и посмотрите, сможете ли вы найти свой контейнер. В моем случае:

1
c329f2e0f63b        myfear/wildfly-test:latest

Если вы боретесь с чем-то, и ваше приложение не работает должным образом, есть несколько способов приблизиться к проблеме. Во-первых, запустить образ локально для вашего демона Docker. Есть удобная команда, mvn fabric8: create-env, чтобы выяснить, какие env-переменные вам нужны, чтобы вы могли запускать образы докеров вне kubernetes, как если бы они были внутри (с точки зрения обнаружения служб и переменных среды, определенных в kubernetes json). Если это не вариант, вы также можете получить bash из вашего работающего контейнера:

1
docker exec -i -t c329f2e0f63b bash

Просто замените идентификатор контейнера реальным из команды ps. Вот и все. Теперь вы можете начать все сначала. Я собираюсь провести вас через консоли немного.

Доступ к консоли OpenShift

Обо всем по порядку. Вы можете найти свое приложение на консоли OpenShift. http: //vagrant.f8: 8443 приводит вас к консоли OpenShift. Выберите пространство «по умолчанию» и посмотрите Реестр Docker, некоторые инстансы эластичного поиска, некоторые другие и, наконец, ваш экземпляр:

OpenShift-wildfly

Вы также можете просматривать отдельные пакеты и услуги. Подробнее об этом, возможно, в более позднем посте

Консоль Fabric8

Одна волшебная вещь, которая нас действительно интересует — это консоль Fabric8. http: //fabric8.vagrant.f8/ приведет вас туда, а на вкладке «Kubernetes» отображаются все запущенные приложения для вас. Это также включает в себя ваше собственное приложение:

wildfly-на-ткань

Как вы можете видеть на этом скриншоте, я уже масштабировал приложение с одного (по умолчанию) до двух модулей. Нажав на маленькую иконку стручка справа (не на этом скриншоте), вы можете настроить количество работающих стручков. Если вы нажмете на представление «схема», вы увидите полный обзор вашей инфраструктуры:

fabric8-консоль масштабируется

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