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

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

我正在尝试将 Docker 服务部署到 Swarm 中,但最终总是在本地主机(我用作 Docker Swarm 管理器的主机)上运行容器,而没有服务

这是我的设置:

我有 3 个节点的 Docker(v. 1.12.1)集群,其中包括一个作为管理器运行的主机和两个工作节点,所有节点都在 CentOS 7 上运行。在管理器节点(本地主机)上,我运行 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

从包含此代码的剧本开始

- 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将我的映像部署为本地容器​​,而不是作为群集上的服务

因此,我的假设是,如果我在作为群集管理器的机器上有一个活动的群集,并且我使用 Ansibledocker_service模块,那么它将自动感知群集并将服务部署到它。看来我的假设是错误的,我找不到任何文档、博客文章等来提示我该做什么以及我遗漏了什么。请 Ansible 专家帮忙!

答案1

终于找到了答案。基本上,我在最后一段中的假设是错误的。至少现在是这样。事实证明,ansible 的 docker_service 只是 docker compose 的一个包装器,而且(非常不幸的是)在撰写本文时,它尚未与 docker swarm 集成。基本上,根据此支持主题 同一条线索给出了可能的解决方法如果你感兴趣

相关内容