Ansible 在现代企业中,尤其是私有云、裸金属环境下是非常流行的工具,本文将介绍大规模集群下 Ansible 的关键配置与优化策略。
并发控制
--forks
Ansible 默认的并发数(forks)是 5,在数十台机器以内尚可接受,但节点数达到成百上千的规模时,执行效率会非常低,建议实时监控控制节点负载,根据硬件能力动态调优以避免过载。serial
滚动升级或分批部署时必须启用,建议制定分批数策略,推荐从 5% ~ 10% 集群规模开始,逐步放大,减少因批量操作导致的集群抖动、业务中断风险。例如:
- hosts: kube_nodes serial: 20
超时与重试
--timeout
Ansible 对 SSH 连接的默认超时时间较短(通常是 10 秒),大规模场景网络抖动可能导致误判超时,推荐调整至 60 ~ 600 秒,视场景灵活配置。retry_stagger
控制重试节点间的间隔(秒),防止短时间内过多重试引发控制节点或网络瞬时压力过大。例如:
retry_stagger: 60
控制节点资源规划
控制节点在大规模场景中需要持有连接大量的 SSH 会话,建议开启 SSH 复用,配备 8 core 以上的多核 CPU。
[ssh_connection] pipelining = True ssh_args = -o ControlMaster=auto -o ControlPersist=30m -o ConnectionAttempts=100 -o UserKnownHostsFile=/dev/null
控制节点需要充足的内存承担缓存、模板渲染、变量计算等高负载任务,建议配备 16G 以上的内存。
控制节点通常会存在大量文件分发、日志持久化等场景,为了提升 I/O 性能,建议使用高速 SSD,特殊场景下考虑使用 NVMe。
控制节点建议使用 1Gbps 以上网卡,部署在专用运维子网,避免跨地域调度。
动态 inventory
大规模场景中通常会使用动态 inventory,避免重复手动编写 inventory 配置。
注:调用内部 CMDB API 时,应开启认证,避免信息泄露。
日志输出
Ansible 默认会将 playbook 执行日志输出到控制台,建议配置将日志以 JSON 格式写入文件,并结合日志审计平台统一收集,另注意对敏感数据加密或者脱敏处理。
log_path=/var/log/ansible.log
stdout_callback = json
代码和版本管理
- Ansible 上的 playbook、roles、inventory 等均应纳入 Git 代码仓库管理,并结合 CI/CD 流水线进行自动化构建部署包。
- 控制节点应确保使用 Python 虚拟环境或容器镜像进行隔离,
requirements.yml
下版本锁定防止破坏性变更。 - 不同项目上的 Ansible 的版本应实际项目版本对齐,避免随意升级导致生产事故。
安全与权限管理
避免使用 root 账号运行 Ansible。建议使用专用账户(如 ansible 用户)执行自动化任务,利用 ansible_become 机制按需提权,控制节点权限最小化。
定期轮换和管理 SSH 密钥,敏感信息建议使用 Ansible Vault 加密。