You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决新版Ansible template模块执行速度过慢的问题?

问题根本原因

性能瓶颈核心为 Ansible 近期版本调整了配置加载逻辑,导致SSH持久连接(ControlMaster)被默认禁用。
SSH持久连接是Ansible降低远端操作开销的核心机制,禁用后每一次循环迭代都会重新走完整的SSH握手、身份验证流程,哪怕单文件体积极小、网络延迟低于100ms,多次重复建连的开销累加后也会导致整体耗时大幅上升。你配置的ANSIBLE_PIPELINING=1仅优化了单连接内的命令传输效率,无法抵消重复建连的额外开销,因此优化效果不明显。

Ansible 循环执行template模块的核心操作步骤
  • 每次迭代前,控制节点先校验本地模板文件状态、执行Jinja2语法渲染(哪怕是空文件也会走完整渲染流程)
  • 未开启持久连接时,单次迭代就会触发一次完整SSH握手、身份验证流程,单步耗时可达数百毫秒
  • 连接建立后,依次完成临时执行脚本传输、目标节点文件状态比对、文件写入、权限修改、临时文件清理操作
  • 迭代结束后直接断开SSH连接,下一次循环重复上述全流程
提速方案
  1. 手动开启SSH持久连接,在ansible.cfg的[ssh_connection]配置段添加如下内容:
[ssh_connection]
pipelining = True
control_master = auto
control_path = /tmp/ansible-ssh-%h-%p-%r
control_persist = 300s

control_persist参数可根据场景调整为180s~1800s,保证同个目标节点的多次操作复用同一个SSH连接,调整后循环操作的耗时会下降90%以上。

  • 批量处理小文件场景,可添加loop_control.label参数减少控制台输出开销,或把多个小文件打包后一次性传输再解压,避免多次循环调用模块
  • 禁用非必要的事实收集,仅在Playbook开头执行一次事实收集即可,避免每个任务重复拉取节点信息
  • 若使用Ansible 2.10+版本,需确认没有通过ssh_args配置项覆盖默认SSH参数,若手动指定ssh_args未包含ControlMaster相关配置,也会导致持久连接被禁用

内容的提问来源于stack exchange,提问作者Wang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 07:00:01