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。