@ScRsa
Delphi/Oracle Изучаю JAVA

Как лучше/правильнее настроить автоматическое развертывания Docker контейнера на Swarm кластере?

День добрый.
Настраиваю тестовую среду для автоматического развертывания контейнеров на кластере. Имеется вопрос как правильнее настроить. TeamCity агент собирает исходники, тестирует, билдит контейнер и кладет его в registry. Дальше вопрос как его поднять на кластере?

Вариант 1. Стандартными средствами docker:
export DOCKER_HOST=swarm-master:4000
docker run -d -p 1234:1234 --name my_application --label my_application registry/my_application:${version}


Вариант 2. Docker-compose:
export DOCKER_HOST=swarm-master:4000
docker-compose up my_application


Вариант 1 хорош тем, что он работает. Но есть проблема с остановкой сервисов если их несколько, плюс конфиг развертывания пишется в TeamCity.

Вариант 2 хорош тем что конфиг развертывания пишется в самом проекте, но с запуском проблема. Из TC агента сервис не стартует (Error response from daemon: failed to parse pool request for address space "GlobalDefault" pool "" subpool "": cannot find address space GlobalDefault (most likely the backing datastore is not configured)). Хотя на машине из кластера он запускается. Куда копать? подключаться к мастеру кластера копировать docker-compose.yml туда и запускать там? или docker-compos должен работать с удаленным кластером нормально?

UPD:
Проблему с failed to parse pool request for address space "GlobalDefault" pool удалось решить. (Нужно было в конфиг всех демонов кластера добавить --cluster-store consul://consul-host:8500 --cluster-advertise eth0:2375")

Приложение поднимается, но выявилась проблема с Reschedule:
restart: unless-stopped
    labels:
      com.docker.swarm.reschedule-policies: "[\"on-node-failure\"]"

при падении ноды контейнер успешно переносится на другую, но не запускается...

UPD2:
Проблема с Reschedule оказалось в том что я гасил машину на который были как нода SWARMа так и нода CONSULa. Если вырубать машину на которой нет консула, то сервис поднимается нормально...
  • Вопрос задан
  • 1068 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Vaavaan
Комментировать
@ScRsa Автор вопроса
Delphi/Oracle Изучаю JAVA
В итоге проблему решил самописным скриптом деплоя. В нем же решил проблему с zero down time, вырубая старый контейнер и поднимая новый по очереди
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы