使用Ansible docker_service模块将服务部署到群体

Bos*_*one 5 ansible docker docker-swarm

我正在尝试将Docker服务部署到swarm中,但是总是以在本地主机上运行容器(我用作docker swarm管理器的那个容器)而告终

这是我的设置:

我有3个节点Docker(v。1.12.1)群,其中包括一台作为管理器运行的主机和两个均在CentOS 7上运行的工作程序节点。在管理器节点(localhost)上,我运行Ansible(v。2.1.1.0)剧本,群已配置并正在运行

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
Run Code Online (Sandbox Code Playgroud)

从具有此代码的剧本开始

- 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 }
Run Code Online (Sandbox Code Playgroud)

哪个叫这个角色:

- 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
Run Code Online (Sandbox Code Playgroud)

当我跑步时,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
Run Code Online (Sandbox Code Playgroud)

而且这样做docker service ls表明没有服务在运行,因此看起来像将docker_service我的映像作为本地容器​​而不是作为群集上的服务部署

因此,我的假设是,如果我在作为集群管理器的计算机上有一个活动集群docker_service,并且使用Ansible 模块,那么它将自动知道该集群并将服务部署到该集群。看来我的假设是错误的,并且我找不到任何文档,博客文章等来暗示我该做什么和我所缺少的东西。Ansible的专家请帮忙!

Elt*_*man 4

Ansible模块使用 Docker Compose,目前不适用于 Swarm 模式。如果您docker-compose在 Swarm 中的节点上运行,它只会发出docker run命令 - 这就是为什么您在单个主机上运行容器而不是在 Swarm 中运行服务的原因。

您可以通过问题 3656跟踪 Compose 中的群模式支持,但当这种情况发生时,很可能也需要对 Ansible 模块进行更改(除非将 Compose 更改为具有群模式检测逻辑)。