当服务器从三五台增长到几十上百台,手工登录执行命令的方式就会成为瓶颈。Ansible 以无 Agent、基于 SSH 的方式,把配置下发、批量执行、状态编排收敛成可版本管理的 Playbook。本页从极客运维的实践视角出发,梳理 Ansible 的目录组织、常用模块、幂等思路与排障方法,帮你在真实环境中把自动化真正跑起来,而不是停留在示例复制。
目标机只需 SSH 与 Python 环境,无需预装客户端,接入成本低,适合存量环境渐进改造。
模块描述目标状态而非执行步骤,同一份 Playbook 反复运行结果一致,降低误操作风险。
可直接编排 Nginx、Docker、Kubernetes 与监控组件,与 Git、Jenkins 组合成发布流水线。
一套可维护的 Ansible 工程,关键在于把清单、变量、角色与入口 Playbook 分离。inventory 描述主机与分组,group_vars 与 host_vars 承载差异化参数,roles 把任务、模板、处理器按职责拆开,site.yml 只做编排入口。这样新增一台机器时,改动的是数据而不是逻辑。
| 模块 | 典型用途 | 注意事项 |
|---|---|---|
| copy / template | 下发配置与脚本 | 模板变量配合 handlers 触发重载 |
| service / systemd | 服务启停与开机自启 | 注意 daemon_reload 的时机 |
| yum / apt | 软件包安装与升级 | 锁定版本避免漂移 |
| shell / command | 无专用模块时的兜底 | 需自行保证幂等,慎用 creates 判断 |
整理主机清单与分组,把现有手工步骤写成文档,明确每步的输入输出与判断依据。
先在测试分组用 --check 与 --diff 观察变更,确认无误再扩大范围,避免一次性全量下发。
Playbook 进 Git,配合 Jenkins 触发执行,保留每次运行的日志与变更记录便于回溯。
先确认 inventory 中的地址与端口,再检查目标机的 authorized_keys 与 sshd 配置,必要时用 -vvv 查看握手细节。
优先使用幂等模块;shell 与 command 需自行加判断条件,否则每次都会标记为 changed。
用 group_vars 按环境目录分层,配合 -i 指定不同 inventory,避免在任务里写死地址与路径。
从一台机器的配置固化开始,逐步扩展到整组主机,让每次变更都可复现、可回滚。