Назад | Перейти на главную страницу

Использование модуля Ansible docker_service для развертывания службы для роения

Я пытаюсь развернуть службу Docker в рое, но всегда заканчиваю запуском контейнера на моем локальном хосте (который я использую в качестве диспетчера роя докеров) и без службы

Вот моя установка:

У меня есть рой Docker с 3 узлами (v. 1.12.1), который включает в себя один хост, работающий как менеджер, и два рабочих узла, все работающие на CentOS 7. На управляющем узле (localhost) я запускаю Ansible (v. 2.1.1.0) playbook и рой уже настроен и работает

Swarm: active
 NodeID: d9h5xa832ax7wzeq8q44fjld3
 Is Manager: true
 ClusterID: 9cztoin3gy2ntbwehsmrkjuxi
 Managers: 1
 Nodes: 3
 Orchestration:
  Task History Retention Limit: 5
 Raft:
  Snapshot Interval: 10000
  Heartbeat Tick: 1
  Election Tick: 3
 Dispatcher:
  Heartbeat Period: 5 seconds
 CA Configuration:
  Expiry Duration: 3 months
 Node Address: 10.25.190.209

Начиная с пьесы с этим кодом

- hosts: localhost
  name: Run JMeter test
  vars_files:
    - user.config.yml
  vars:
    execute_tpcds_test : "{{ run_tpcds_test }}"    
  roles:
    - { role: run_jmeter, when: execute_tpcds_test is defined and execute_tpcds_test ==1 }

Что называет эту роль:

- name: Deploy tpcds_tpg service to swarm
  docker_service:
    project_name: tpcds-tpg
    definition:
      version: '2'
      services:
        run_tests: 
          image: 'pbench/tpcds_tpg'
          volumes: 
            - /opt/pbench/run_output/
          command: ./run_jmeter.sh "{{jmeter_output_dir}}" 
  register: output
- debug: var=output

Когда я бегу ansible-playbook ./site.yml Я получаю работающий контейнер. Делать docker ps -a отображает

[pdo@sdl02133 tpcds-tpg]$ docker ps -a
CONTAINER ID        IMAGE              COMMAND                  CREATED             STATUS              PORTS               NAMES
fef245b41365        pbench/tpcds_tpg   "./run_jmeter.sh /opt"   21 seconds ago      Up 20 seconds                           tpcdstpg_run_tests_1

И делая docker service ls показывает, что службы не работают, поэтому похоже docker_service развертывает мой образ как локальный контейнер, а не как службу в рое

Поэтому я предполагал, что если у меня есть активный рой на машине, который является менеджером роя, и я использую Ansible docker_service модуль, то он автоматически узнает о рое и развернет на нем службу. Похоже, мое предположение неверно, и я не могу найти никаких документов, сообщений в блогах и т. Д., Которые подсказывали бы мне, что мне делать и чего мне не хватает. Эксперты Ansible, пожалуйста, помогите!

Наконец нашел ответ. В основном мое предположение в последнем абзаце неверно. По крайней мере на данный момент. Оказывается, docker_service ansible - это просто оболочка для docker compose, и это (к большому сожалению) на момент написания не интегрировано с docker swarm. В основном мне здесь не повезло, если верить эта поддержка Тот же поток дает возможное обходное решение если ты заинтересован