Ansible 简介
Ansible 是一个由 Red Hat 开发的 开源自动化运维工具,用来做:
- 配置管理
- 应用部署
- 自动化任务执行
- 多台服务器批量操作
它的最大特点是:无代理(agentless)+ 基于 SSH 连接 + YAML 编写(可读性强)。
为什么选择 Ansible?
| 特点 | 描述 |
|---|---|
| ✅ 无代理 | 被控端无需安装 agent,直接通过 SSH 操作 |
| ✅ 易于上手 | 使用 YAML 编写 playbook,可读性强 |
| ✅ 模块丰富 | 内置和社区模块支持各种平台与任务 |
| ✅ 跨平台 | 管理 Linux、Windows、网络设备等 |
| ✅ 可扩展 | 支持自定义模块和插件系统 |
| ✅ 社区活跃 | 拥有丰富的开源资源和文档 |
Ansible 能做什么?
- 批量部署软件(如安装 nginx、mysql)
- 配置文件下发与模板替换
- 重启服务、管理用户、开防火墙等
- 自动化部署 Web 应用、容器、云服务(AWS、Azure)
- 编排跨主机任务(如部署 Hadoop、K8s、Ceph)
Ansible 的架构

Ansible 管理节点负责下发任务,包含以下组件:
- Ansible:Ansible-core,Ansible 的主程序,包含 Ansible 相关二进程程序
- Inventory:主机清单,用来定义被管理服务器的清单
- Ad Hoc:Ansible 的命令行,用于执行简单的任务或做调试使用
- Playbooks:剧本,用来定义复杂的自动化任务
- Core Modules:Ansible 核心模块,包含 Ansible 最常用的模块(Ansible 2.9 以前会包含大量模块,但在 2.10 后 Ansible 只会包含少量的核心模块)
- Ansible Collections:核心模块只能满足基础功能,通过 Ansible Collections 可以安装新的模块来扩展 Ansible 的功能
- Connection Plugins: 连接插件 ,连接插件定义 Ansible 连接到远程主机的方式
Ansible 管理主机的流程:
- Ansible 通过 Inventory 来定义主机清单
- 通过 Playbooks 或 Ad Hoc 来定义任务(任务通过模块执行)和要执行任务的主机
- 通过连接插件,将模块推送到被控端
- 在被控端执行模块的任务,执行完成后删除模块
Ansible 的大部分模块都具有幂等性,多次执行只会修改需要改的内容。但部分模块除外,如
raw、command和shell模块。Ansible 的管理节点只能是 Linux 系统。
Ansible 可以管理的设备和连接方式:
| 设备类型 | 默认连接方式 | 说明 |
|---|---|---|
| Linux 系统 | SSH | 默认最常见方式,免密或密钥登录 |
| Windows 系统 | WinRM | 需配置 WinRM 服务,支持 HTTP/HTTPS |
| 网络设备 | SSH 或 API | 使用特定模块/Collection,部分设备需 NETCONF |
| 云平台 | API (HTTPS) | 利用 SDK/REST API,需提供 Access Key、Token 等 |
| Kubernetes / OpenShift | API Server | 连接 kube-apiserver,使用 kubeconfig 或 Token |
| Docker / Podman | 本地或远程 API | 通过 Unix socket 或远程 TCP 端口 |
| 存储/虚拟化设备 | API 或 SSH | 如 VMware 使用 vCenter API,Dell EMC 用 REST API |
| HTTP 服务 | URI 模块 | ansible.builtin.uri 可调用 REST 接口 |
| 自定义服务 | 命令/脚本/API | 可用 command, shell, script 模块调用 |
Ansible 会使用被控节点有的连接方式来管理被控节点,如通过 SSH 管理 Linux,因此 Ansible 是无代理的,不需要在被控节点安装 Agent。