【自动化运维神器Ansible】Ansible介绍与架构详解
目录
1 Ansible简介
1.1 什么是Ansible
1.2 Ansible与其他自动化工具对比
2 Ansible核心架构
2.1 Ansible整体架构
2.2 Ansible工作流程
3 Ansible核心组件详解
3.1 Inventory(主机清单)
3.2 Playbook
3.3 Modules(模块)
4 Ansible高级架构特性
4.1 Ansible执行引擎架构
4.2 Ansible Galaxy与Roles
4.3 Ansible执行优化
5 总结
1 Ansible简介
1.1 什么是Ansible
- Ansible是一款开源的自动化运维工具,由Red Hat公司收购并持续维护
- 基于Python开发,能够实现配置管理、应用部署、任务自动化等多种IT运维功能
- Ansible以其简单易用、功能强大、无代理架构等特点,迅速成为自动化运维领域的明星产品
核心特性:
- 模块化设计:丰富的模块库覆盖各种运维场景,可以调用特定模块来完成特定的任务,支持自定义模块,可使用任务编程语言编写模块
- 无代理架构:基于python和ssh,不需要在被管理节点上安装任何客户端软件
- 基于SSH协议:使用标准SSH通道进行通信,安全可靠
- 幂等性:多次执行同一操作不会产生副作用(一个任务执行一遍和执行n遍效果一样)
- 声明式语言:支持palybook变片任务,使用YAML编写Playbook,易于理解和维护
1.2 Ansible与其他自动化工具对比
特性 | Ansible | Puppet | Chef | SaltStack |
架构 | 无代理 | 有代理 | 有代理 | 可选有/无代理 |
通信协议 | SSH | HTTPS | HTTPS | ZeroMQ/SSH |
配置语言 | YAML | Ruby DSL | Ruby DSL | YAML/Python |
学习曲线 | 低 | 中 | 中 | 中 |
扩展性 | 高 | 高 | 高 | 高 |
实时性 | 推送 | 拉取 | 拉取 | 推送/拉取 |
2 Ansible核心架构
2.1 Ansible整体架构

- 用户:执行Ansible命令或Playbook的操作者
- Ansible CLI工具:核心命令行工具,如ansible、ansible-playbook等
- Inventory:被管理主机清单,定义主机分组和变量
- Playbook:YAML格式的任务编排文件
- Modules:执行具体操作的模块
- Plugins:模块功能的补充(比如各种插件),不常用
- 被管理节点:需要配置管理的目标服务器
- SSH协议:Ansible与节点间的通信通道
2.2 Ansible工作流程

- 用户通过命令行或API发起Ansible操作
- Ansible引擎解析Inventory文件,确定目标主机
- 根据Playbook或Ad-Hoc命令确定需要执行的模块
- 将模块代码通过SSH传输到目标主机执行
- 目标主机执行完毕后返回结果
- Ansible引擎汇总所有主机执行结果
- 向用户呈现最终执行报告
3 Ansible核心组件详解
3.1 Inventory(主机清单)
Inventory是Ansible管理主机的核心配置文件,定义了哪些主机可以被管理以及如何分组。
- 典型Inventory文件示例:
[webservers]
web1.example.com ansible_port=2222 ansible_user=admin
web2.example.com[dbservers]
db1.example.com
db2.example.com ansible_ssh_private_key_file=/path/to/key.pem[cluster:children]
webservers
dbservers
Inventory关键概念:
- 静态Inventory:静态文件定义的主机清单
- 动态Inventory:通过脚本或API动态获取主机清单
- 主机变量:针对特定主机设置的变量
- 组变量:针对主机组设置的变量
- Inventory插件:支持从云平台、CMDB等系统动态获取主机
3.2 Playbook
Playbook是Ansible的配置、部署和编排语言,采用YAML格式编写。
- 简单Playbook示例:
---
- name: Configure webserverhosts: webserversbecome: yesvars:http_port: 80max_clients: 200tasks:- name: Ensure Apache is installedyum:name: httpdstate: present- name: Write Apache config filetemplate:src: templates/httpd.conf.j2dest: /etc/httpd/conf/httpd.confnotify:- restart apachehandlers:- name: restart apacheservice:name: httpdstate: restarted
Playbook核心元素:
- hosts:定义目标主机或主机组
- vars:定义变量
- tasks:任务列表
- handlers:触发器任务
- roles:角色引用
- templates:配置文件模板
- 条件语句:when等条件控制
3.3 Modules(模块)
模块是Ansible执行具体任务的单元,Ansible提供了数百个内置模块。
- 常用模块分类:
模块类别 | 示例模块 | 功能描述 |
系统管理 | user, group | 用户和组管理 |
包管理 | yum, apt | 软件包安装卸载 |
文件管理 | copy, template | 文件操作 |
服务管理 | service, systemd | 服务启停 |
云平台 | ec2, azure_rm | 云资源管理 |
网络设备 | ios_command, nxos_config | 网络设备配置 |
模块执行原理:
- Ansible将模块代码传输到目标节点
- 在目标节点上执行模块代码
- 模块执行后自动删除传输的代码
- 返回JSON格式的执行结果
4 Ansible高级架构特性
4.1 Ansible执行引擎架构

执行引擎关键组件:
- Parser:解析Playbook和Inventory
- Task Queue:任务队列管理
- Strategy Plugin:控制任务执行策略(线性、自由等)
- Worker Processes:工作进程池
- Connection Plugins:连接插件(SSH、WinRM等)
4.2 Ansible Galaxy与Roles
Ansible Galaxy是一个角色共享平台,Roles则是Ansible的代码复用机制。
- Role标准目录结构:
roles/common/tasks/ # 任务列表handlers/ # 处理器templates/ # 模板文件files/ # 静态文件vars/ # 变量定义defaults/ # 默认变量meta/ # 角色依赖
Role的优势:
- 代码复用性高
- 逻辑结构清晰
- 便于团队协作
- 可通过Galaxy共享
4.3 Ansible执行优化
- 开启SSH管道(Pipelining):减少SSH连接次数
[ssh_connection]
pipelining = True
- 启用ControlPersist:SSH长连接
Host *ControlMaster autoControlPath ~/.ssh/ansible-%r@%h:%pControlPersist 60s
- 使用异步任务:长时间任务异步执行
- name: Long running operationcommand: /usr/bin/long_running_operationasync: 3600poll: 0
- 调整fork数量:增加并行进程数
[defaults]
forks = 50
5 总结
Ansible作为现代化运维工具的代表,以其简单、强大、无代理的特性赢得了广泛认可。通过本文,我们学习了解了:
- Ansible的核心架构和工作原理
- 主要组件及其相互关系
- 高级特性和优化方法
随着IT系统复杂度不断增加,自动化运维已成为必然趋势,掌握Ansible不仅能够提升运维效率,还能帮助企业实现DevOps转型。