ansible-forks/serial/滚动部署机制

发布于:2025-02-10 ⋅ 阅读:(82) ⋅ 点赞:(0)

一. 简述: 

    在使用ansible实现代码发布过程中, 比如涉及到平滑,滚动,并发,错误终止等功能。ansible对相关功能是天然支持的。

二. 主机并发数(forks):

    forks用来设置同一时刻与目的主机连接数,也可以理解为主机并行数,默认值比较保守为5。在生产中,多数情况下我们会更改这个参数。如果控制节点(ansible主机)的CPU和网络性能够用,设置几十上百个也是可以的。在ansible.cfg设置forks的全局默认值:

[defaults]
forks  = 15

命令行设置forks的数量,即在执行playbook时,通过「--forks」或「-f」指定:

ansible-playbook test.yaml --fork 10

三. play并发数(serial):

      serial用于控制一个play内的主机并行数,这个并行数不能超过forks,超过后则serial不会生效。 

     定义方法如下:

---
- hosts: all
  become: yes
  serial: 3

也可以指定为百分比,它将应用于播放中的主机总数,以确定每次执行的主机数:

- hosts: all
  serial: “30%”

如果主机的数量不等于处理次数,则最后一次将包含余数。

从Ansible 2.2开始,批量大小可以指定为列表,如下所示:

- hosts: all
  serial:
    - 1
    - 5
    - 10

  如上: 第一个批处理将包含一个主机,下一个将包含5个主机,并且(如果还有任何主机),每个后续批处理将包含10个主机,直到使用所有可用主机。

也可以按照批次的百分比:

- hosts: all
  serial:
    - “10%”
    - “20%”
    - “100%”

同时也支持百分比和数字混合设置:

  serial:
    - 1
    - 5
    - “20%”

每次处理数量最小为1。

 serial作用范围是一个play,受限于forks,但比forks控制的更加细(子集?)。假如我们的forks设置为100,但是想让某个play里的所有任务并行数为50的执行,此时我们应该想到serial这个配置方法。


四.  异常/失败终止(max_fail_percentage):

   默认情况下,只要批处理中的主机尚未发生故障,Ansible将继续执行操作。播放的批量大小由串行参数决定。如果未设置serial,则批量大小是hosts字段中指定的所有主机。在某些情况下,例如使用上述滚动更新,可能希望在达到某个故障阈值时中止播放。为此,您可以在播放中设置最大失败百分比,如下所示:

---
- hosts: all
  become: yes
  max_fail_percentage: 30  #同批次中大于30%故障,终止部署
  serial: "30%"

另外,还有一个参数,任何错误时,立刻终止:

---
- hosts: all
  any_errors_fatal:True

五. API扩展:

      如果使用API时,可以通过VariableManager动态设置forks和serials, 如:

variable_manager = VariableManager(loader=loader, inventory=inventory)
variable_manager.extra_vars = dict({'serials':"50%"})

 ----------------------------------------------------------------------------------------------

深耕运维行业多年,擅长linux、容器云原生、运维自动化等方面。
承接各类运维环境部署、方案设计/实施、服务代运维工作,欢迎沟通交流 !


网站公告

今日签到

点亮在社区的每一天
去签到