Появилась необходимость создать облачный сервис и для реализации этого проекта было выбрано open source решение OpenShift. После успешного прохождения Getting Started и деплоя HelloWorld, возникли неожиданные трудности: официальная документация потребовала детального изучения для решения такой простой задачи, как поднять свой готовый контейнер, с произвольным содержанием. Пришлось немного разобраться и ниже простое готовое руководство. Подразумевается, что читатель знаком с docker, т.к. объяснений его команд в данном мануале нет.

Устанавливаем docker


Достаточно воспользоваться официальной документацией и сделать все по инструкции. Не должно возникнуть проблем.

Создаем docker-image со своим приложением


Я собрал свой image с приложением Java написанным с использованием фреймворка Spring-Cloud. Это реализация Config-Server. Название image у меня будет config-server.

Устанавливаем OpenShift


Для своих целей я выбрал установку через запуск docker-контейнера (для dev хватит). Тут все просто (вся информация приведена для Linux):
$ docker run -d --name "origin"         --privileged --pid=host --net=host         -v /:/rootfs:ro -v /var/run:/var/run:rw -v /sys:/sys -v /var/lib/docker:/var/lib/docker:rw         -v /var/lib/origin/openshift.local.volumes:/var/lib/origin/openshift.local.volumes         openshift/origin start

После того, как контейнер поднимется, будет доступен web-интерфейс по адресу
https://localhost:8443

image

Авторизуемся (login: admin, password: admin).
image

Создаем проект OpenShift


Есть 2 пути: из коммандной строки и через web-интерфейс. Я рекомендую первый путь, тем более, что все равно следующие пункты необходимо выполнять из коммандной строки. Оставим web-интерфейс для мониторинга.
Запустите отдельное окно терминала и не закрывайте его до конца всех операций, используйте это окно только для работы с сервисом OpenShift.

Так мы попадаем в запущенный контейнер OpenShift:
$ docker exec -it origin bash

Авторизуемся у сервиса OpenShift (login: admin, password: admin)
$ oc login

Создаем проект
$ oc new-project config-server --description="Spring Cloud Config-Server" --display-name="Main config-server"

image
Создаем pod.json
$ vi pod.json

внутри:
{
  "kind": "Pod",
  "apiVersion": "v1",
  "metadata": {
    "name": "config-server",
    "creationTimestamp": null,
    "labels": {
      "name": "config-server"
    }
  },
  "spec": {
    "containers": [
      {
        "name": "config-server",
        "image": "config-server",
        "ports": [
          {
            "containerPort": 8888,
            "protocol": "TCP"
          }
        ],
        "resources": {},
        "volumeMounts": [
          {
            "name":"tmp",
            "mountPath":"/tmp"
          }
        ],
        "terminationMessagePath": "/dev/termination-log",
        "imagePullPolicy": "IfNotPresent",
        "capabilities": {},
        "securityContext": {
          "capabilities": {},
          "privileged": false
        }
      }
    ],
    "volumes": [
      {
        "name":"tmp",
        "emptyDir": {}
      }
    ],
    "restartPolicy": "Always",
    "dnsPolicy": "ClusterFirst",
    "serviceAccount": ""
  },
  "status": {}
}

Особое внимание уделите следующим элементам:
«image»: «config-server» (должно совпадать с названием нашего docker-image)
«containerPort»: 8888 (порт, который будет открыт для доступа к вашему приложению)
«protocol»: «TCP» (протокол)
$ oc create -f pod.json

image

Теперь нужно посмотреть в web-консоль, чтобы убедиться что все в порядке (Browse -> Pods -> config-server):
image

Как видно из скриншота, мой сервис доступен по адресу:
http://172.17.0.2:8888

Если остановимся на этом продукте и продолжим разработку, возможно будет продолжение публикаций из этой серии.

Спасибо за внимание!

Комментарии (10)


  1. sim3x
    19.04.2016 23:35
    +2

    Лучше начать с чтения введения в технологию blog.openshift.com/openshift-v3-deep-dive-docker-kubernetes
    и далее продолжить изучение github.com/openshift/origin

    ИМО быстрый старт в такого рода софте невозможен впринципе
    И стартовать лучше на отдельной виртуальной машине, а не в докере, чтобы быть ближе к продакшен окружению

    Также стоит уточнить, что есть путаница с версиями OpenShift — v1 и v2 кардинально отличаются от v3.
    v2 сейчас предоставляется для всех в виде сервиса на openshift.com. Там используются контейнеры (не докер), которые называются cartriges со своей магией и обвязкой в виде скриптов интеграции


    1. AlexandrRS
      19.04.2016 23:43
      +2

      Быстрый старт нужен везде, чтобы понимать, что получим и как это должно выглядеть. Понятно, что в проде все будет иначе, но если я напишу статью «от А до Я», то возможно Вы первым и сказали бы: «много букв». Посему, если будем продолжать развивать свой софт с этой технологией и не отпадет желание писать мануалы, буду давать эволюцию малыми порциями.
      Стартовать лучше на нескольких «железных» машинах, с несколькими нодами, что, в общем и планируется. Ресурсы, которые Вы указали сейчас открыты во вкладках перманентно.
      Спасибо за комментарий, я думаю, что он дополнил картину.


    1. asm0dey
      20.04.2016 07:18

      Зачем на виртуальной машине когда origin — это по сути один бинарник, который можно просто запустить у себя на компе?


  1. fear86
    20.04.2016 00:50

    Не совсем понятно причем тут opensoft. Это все стандартный функционал kubernets.


    1. AlexandrRS
      20.04.2016 10:08

      Opensoft не причем. Буду считать, что Вы имели ввиду OpenShift. Если Вы обратите внимание, например, на скриншоты, то увидите, что все проделывается именно с ним, а не с Kubernetes.


      1. fear86
        20.04.2016 12:12

        Так может быть есть смысл начать сначала с него? Так как Origin по факту это расширение функционала kubernetes. Если писать статью про него то хотелось бы увидеть именно фичи origin, сборку контейнеров, менеджмент подсетей, пользователей и тд. Так как сейчас статься похоже больше на «Как сделать docker run через Kubernetes api средствами OpenShift Origin».

        ps: можно было просто сделать kubectl create -f pod.json тогда не пришлось бы Origin даже сетапать ))))


        1. AlexandrRS
          20.04.2016 12:24

          Вы считаете, что мне нужно переименовать публикацию или что? Я не понимаю. Или Вы считаете, что мне нужно для начала изучить Kubernetes, чтобы начинать разбираться с OpenShift? Я потратил относительно немалое количество времени, как мне казалось до старта, на простейшую операцию. Информации мало — я ее дал. То, о чем хотите, прочитать Вы, я еще не написал — потерпите и, возможно, до этого тоже доберемся.


          1. fear86
            20.04.2016 12:39

            Да стоит начать с kubernetes. И понять за чем все же вам нужен origin. Так как из статьи можно сделать вывод что он вам не нужен.

            ps: если что можете писать в личку, я с радостью поделюсь опытом по kubernetes. Работаем с ним уже почти год.


            1. AlexandrRS
              20.04.2016 12:47

              А, Вы про это… Так мы же в статье не о выборе платформы и предпосылках. Была задача такая — она решена, выше решение. Остальное за кадром (в голове архитектора, который сделал выбор).


              1. fear86
                20.04.2016 19:32

                Так вы бы хоть написали какая была задача. И как в итоге origin помог ее решить. Было бы интересно почитать.
                Тащить же сюда каждый hello world смысла нет. Учитывая что все это есть в доках.