我有下一个main.yml,我想逐个运行角色,但是对于不同的主机并行: 例如,首先我想运行" cluster-prerequisites"在paralel中所有主机上的角色,当它完成运行" docker"角色等。
- hosts: masters:private_agent:public_agent
remote_user: "{{user}}"
become: True
serial: 1
roles:
- role: cluster_prerequisites
- hosts: bootstrap:masters:private_agent:public_agent
remote_user: "{{user}}"
become: True
serial: 1
roles:
- role: docker
- hosts: bootstrap
remote_user: "{{user}}"
become: True
serial: 1
roles:
- role: prepare_bootstrap
- hosts: masters
remote_user: "{{user}}"
become: True
serial: 1
roles:
- role: run_masters
- hosts: private_agent
remote_user: "{{user}}"
become: True
serial: 1
roles:
- role: run_private_agents
- hosts: public_agent
remote_user: "{{user}}"
become: True
serial: 1
roles:
- role: run_public_agents
答案 0 :(得分:1)
来自Rolling Update Batch Size章节:
默认情况下,Ansible将尝试并行管理播放中引用的所有计算机。对于滚动更新用例,您可以使用
7
关键字定义Ansible应该一次管理的主机数量......
因此,如果您从播放中删除serial
,Ansible将在所有正在播放的主机上同时运行任务。
通过设置serial: 1
,您可以告诉Ansible逐个接收主机,并且只有在前一个任务完成所有任务时才转移到下一个主机。
通常,您希望在一堆后端服务器上进行串行运行,以批量更新它们以防止服务停机,因为部分服务器仍然可以为客户端的请求提供服务。