Проблемы с Docker Swarm, использующим TeamCity с использованием rexray / ebs для сохранения диска в AWS EBS - PullRequest
0 голосов
/ 13 мая 2018

Я довольно новичок в Docker, но начал задумываться о настройке производства, поэтому мне необходимо решить проблему с сохранением данных при использовании Docker Swarm. Я решил начать с создания инфраструктуры развертывания (TeamCity для сборок и NuGet плюс «реестр» [https://hub.docker.com/_/registry/] для хранения образов).

Я начал с TeamCity. Очевидно, что для работы требуется постоянство данных. Я могу запустить TeamCity в контейнере с диском EBS, и все выглядит так, как будто он работает просто отлично - TeamCity работает на этапах настройки, а мои диски TeamCity отображаются в AWS EBS, но затем рабочий узел TeamCity выделяется для выключается и процесс установки останавливается.

Вот все шаги, которые я выполняю:

Этап 1 - Настройка машины:

  • Создание одного экземпляра AWS для мастера
  • Создание двух экземпляров AWS для рабочих
  • Все это 64-битные экземпляры Ubuntu t2.mircro
  • Для удобства создайте три эластичных IP-адреса и назначьте их на указанные выше машины.
  • Установите Docker на все узлы, используя это: https://docs.docker.com/install/linux/docker-ce/ubuntu/
  • Установите Docker Machine на все узлы, используя это: https://docs.docker.com/machine/install-machine/
  • Установите Docker Compose на всех узлах, используя это: https://docs.docker.com/compose/install/

Этап 2 - Настройка Docker Remote на главном сервере:

$ sudo docker run -p 2375:2375 --rm -d -v /var/run/docker.sock:/var/run/docker.sock jarkt/docker-remote-api

Этап 3 - установить плагин rexray / ebs на все машины:

$ sudo docker plugin install --grant-all-permissions rexray/ebs REXRAY_PREEMPT=true EBS_ACCESSKEY=XXX EBS_SECRETKEY=YYY

[Я поднял правильные значения из AWS для XXX и YYY]

  • Я проверяю это, используя:

    $ том sudo docker create --driver = rexray / ebs --name = delete --opt = size = 2

    $ sudo docker volume rm delete

  • Все три узла могут создавать и удалять диски в AWS EBS без проблем.

Фаза 4 - Настройка роя:

  • Запустите это на мастере:

    $ sudo docker swarm init --advertise-addr eth0: 2377

  • Это дает команду для запуска на каждом из рабочих, которая выглядит следующим образом:

    $ sudo docker swarm join - token XXX 1.2.3.4:2377

  • Они отлично работают на рабочих машинах.

Этап 5 - Настройка визуализации с помощью Remote Powershell на моем локальном компьютере:

$ $env:DOCKER_HOST="{master IP address}:2375"

$ docker stack deploy --with-registry-auth -c viz.yml viz

viz.yml выглядит так:

version: '3.1'

services:
    viz:
        image: dockersamples/visualizer
        volumes:
            - "/var/run/docker.sock:/var/run/docker.sock"
        ports:
            - "8080:8080"
        deploy:
            placement:
                constraints:
                    - node.role==manager
  • Это прекрасно работает и позволяет мне визуализировать мой рой.

Этап 6 - Установите TeamCity с помощью Remote Powershell на мой локальный компьютер:

$ docker stack deploy --with-registry-auth -c docker-compose.yml infra

docker-compose.yml выглядит так:

version: '3'

services:
  teamcity:
    image: jetbrains/teamcity-server:2017.1.2
    volumes:
        - teamcity-server-datadir:/data/teamcity_server/datadir
        - teamcity-server-logs:/opt/teamcity/logs
    ports:
        - "80:8111"

volumes:
  teamcity-server-datadir:
   driver: rexray/ebs
  teamcity-server-logs:
   driver: rexray/ebs
  • [Включение NGINX в качестве прокси-сервера - это более поздний шаг в моем списке дел.]

  • Я вижу, как в AWS EBS появляются необходимые диски, а контейнер отображается в моей визуализации роя.

  • Однако через некоторое время после просмотра экрана прогресса в TeamCity рабочая машина, содержащая экземпляр TeamCity, завершает работу, и процесс внезапно завершается.

  • Я не знаю, что делать дальше. Я даже не уверен, где искать логи.

Любая помощь с благодарностью получена!

Приветствия

Стив.

Ответы [ 3 ]

0 голосов
/ 14 мая 2018

Обновление

В журналах обнаружена следующая ошибка:

infra_teamcity.1.bhiwz74gnuio@ip-172-31-18-103    |  [2018-05-14 17:38:56,849]  ERROR - r.configs.dsl.DslPluginManager - DSL plugin compilation failed
infra_teamcity.1.bhiwz74gnuio@ip-172-31-18-103    |  exit code: 1
infra_teamcity.1.bhiwz74gnuio@ip-172-31-18-103    |  stdout: #
infra_teamcity.1.bhiwz74gnuio@ip-172-31-18-103    |  # There is insufficient memory for the Java Runtime Environment to continue.
infra_teamcity.1.bhiwz74gnuio@ip-172-31-18-103    |  # Native memory allocation (mmap) failed to map 42012672 bytes for committing reserved memory.
infra_teamcity.1.bhiwz74gnuio@ip-172-31-18-103    |  # An error report file with more information is saved as:
infra_teamcity.1.bhiwz74gnuio@ip-172-31-18-103    |  # /opt/teamcity/bin/hs_err_pid125.log
infra_teamcity.1.bhiwz74gnuio@ip-172-31-18-103    |
infra_teamcity.1.bhiwz74gnuio@ip-172-31-18-103    |  stderr: Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000e2dfe000, 42012672, 0) failed; error='Cannot allocate memory' (errno=12)

Что заставляет меня думать, что это проблема с памятью.Я собираюсь попробовать это снова с лучшим экземпляром AWS и посмотрю, как у меня получится.

0 голосов
/ 14 мая 2018

Обновление 2

Использование более крупного экземпляра AWS решило проблему.:)

Затем я обнаружил, что rexray / ebs не нравится, когда контейнер переключается между хостами в моем рое - он дублирует тома EBS, так что он сохраняет один для каждой машины.Моим решением было использовать диск EFS в AWS и подключить его к каждому возможному хосту.Затем я обновил файл fstab, чтобы привод перезагружался при каждой перезагрузке.Работа выполнена.Теперь рассмотрим использование обратного прокси ...

0 голосов
/ 14 мая 2018

Я нашел способ получить логи для моего сервиса. Сначала сделайте это, чтобы перечислить сервисы, которые создает стек:

$ sudo docker service ls 

Затем сделайте это, чтобы просмотреть журналы для службы:

$ sudo docker service logs --details {service name}

Теперь мне просто нужно просмотреть журналы и посмотреть, что пошло не так ...

...