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的专家请帮忙!
Ansible模块使用 Docker Compose,目前不适用于 Swarm 模式。如果您docker-compose在 Swarm 中的节点上运行,它只会发出docker run命令 - 这就是为什么您在单个主机上运行容器而不是在 Swarm 中运行服务的原因。
您可以通过问题 3656跟踪 Compose 中的群模式支持,但当这种情况发生时,很可能也需要对 Ansible 模块进行更改(除非将 Compose 更改为具有群模式检测逻辑)。
| 归档时间: |
|
| 查看次数: |
6508 次 |
| 最近记录: |