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

一. 简述: 

    在使用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、容器云原生、运维自动化等方面。
承接各类运维环境部署、方案设计/实施、服务代运维工作,欢迎沟通交流 !

### Kolla-Ansible 中角色 `openstack.kolla.baremetal` 未找到的解决方案 当遇到错误提示“role 'openstack.kolla.baremetal' not found”,通常是因为缺少必要的 Ansible 角色或者配置文件中的路径设置不正确。以下是可能的原因分析以及对应的解决方法: #### 可能原因及解决办法 1. **Ansible Galaxy 的角色缺失** 如果该角色来自 Ansible Galaxy,则可能是尚未下载或安装此角色。可以通过运行以下命令来确保所需的角色已正确获取并安装到指定目录中[^1]。 ```bash ansible-galaxy install openstack.kolla.baremetal -p /path/to/roles/ ``` 2. **Kolla-Ansible 版本兼容性问题** 不同版本的 Kolla-Ansible 对应不同的 OpenStack 发行版和支持的功能集。如果使用的 Kolla-Ansible 是较旧版本,而尝试启用的新功能(如 baremetal 支持)仅存在于更新版本中,则可能导致找不到对应角色的情况。建议升级至最新稳定版本以支持更多特性[^4]。 3. **inventory 文件配置不当** 在执行 `kolla-ansible -i ./multinode bootstrap-servers` 命令前,请确认 inventory 文件(即 multinode 或 all-in-one 文件)已经正确定义了目标主机及其组名,并且这些定义与所调用的任务相匹配[^2]。例如: ```ini [control] controller01 [compute] compute01 [network] networker01 [monitoring] monitor01 [baremetal] bmnode01 ``` 4. **全局变量设定有误** 检查 `/etc/kolla/globals.yml` 是否包含了针对裸金属服务的相关参数声明。如果没有显式开启相关选项,可能会跳过加载特定模块或脚本[^3]。可以考虑添加如下内容作为参考: ```yaml enable_ironic: "yes" enable_baremetal_operator: "yes" ``` 5. **环境准备不足** 执行 `bootstrap-servers` 步骤之前需完成基本软件栈搭建工作,包括但不限于 Docker CE 安装验证、镜像仓库地址替换等预处理环节。此外还需注意 SELinux 状态调整以及防火墙端口开放情况是否满足需求。 通过上述排查手段逐一解决问题后再次尝试重新启动整个流程即可恢复正常运作状态。 ```python import os def check_env(): """Check environment variables.""" required_vars = ['ANSIBLE_ROLES_PATH', 'KOLLA_BASE_DISTRO'] missing = [] for var in required_vars: if not os.getenv(var): missing.append(var) return f"Missing Environment Variables: {missing}" if missing else None result = check_env() if result is not None: print(result) else: print("Environment setup correctly.") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值