- A+
Ansible 简介
Ansible 是一款开源的 自动化运维工具,由 Python 开发,核心通过 SSH 协议(无需客户端)实现批量主机管理,支持任务编排、应用部署、配置管理、云资源操作等功能。其设计理念是“简单即正义”,通过声明式 YAML 语法降低自动化门槛,适合从中小规模到企业级环境的运维场景。
核心特性与优势
- 无代理架构(Agentless)
- 直接通过 SSH 连接目标主机,无需提前安装客户端(对比 SaltStack/Puppet 更轻量)。
- 适用场景:快速部署、临时任务、多云/混合云环境。
- 我的实践:在河北祥辉电子科技工作时,用 Ansible 批量配置 50+ 台服务器的 Nginx 参数,10 分钟完成原本需 2 天的人工操作。
- 声明式 YAML 语法(Playbook)
- 通过 YAML 文件定义任务(如安装软件、修改配置),逻辑清晰且可复用。
- 模块化设计
- 提供 7500+ 内置模块(如
copy
、template
、service
),覆盖文件传输、服务管理、数据库操作等场景。 - 扩展性:支持自定义模块开发(Python)。
- 个人优化:结合 Shell 脚本封装 MongoDB 集群扩容模块,效率提升 60%。
- 提供 7500+ 内置模块(如
- 幂等性(Idempotence)
- 重复执行 Playbook 不会重复触发操作(如软件已安装则跳过),确保环境一致性。
- 价值:避免因人工重复操作导致的配置漂移。
典型应用场景
场景 | Ansible 实现方式 |
---|---|
批量配置管理 | 通过 Playbook 修改多台主机的 Nginx 配置 |
应用部署 | 结合 git 模块拉取代码,template 渲染配置文件 |
云资源操作 | 通过 aws_ec2 、gcp_compute 等模块管理云实例 |
安全合规 | 使用 user 模块管理权限,firewalld 配置规则 |
与其他工具对比
工具 | 架构 | 学习曲线 | 适用场景 |
---|---|---|---|
Ansible | 无代理(SSH) | 低 | 快速部署、中小规模环境 |
SaltStack | 代理+零MQ | 中 | 高性能、大规模集群 |
Puppet | 客户端-服务端 | 高 | 企业级强管控、配置合规 |
一、环境规划
服务器角色 | 主机名 | IP 地址 |
---|---|---|
控制节点 | ansible-master | 192.168.22.11 |
被管理节点 | ansible-node1 | 192.168.22.12 |
被管理节点 | ansible-node2 | 192.168.22.13 |
二、安装 Ansible(仅控制节点操作)
- 配置 EPEL 源
yum install -y epel-release
- 安装 Ansible
yum install -y ansible
- 验证安装
ansible --version
三、配置 SSH 密钥认证
- 生成密钥
ssh-keygen -t rsa -b 2048 //回车按y,一直回车
- 分发公钥到节点
ssh-copy-id root@192.168.22.12
ssh-copy-id root@192.168.22.13
- 验证无密码登录
ssh root@192.168.22.12
ssh root@192.168.22.13
四、配置主机清单
编辑/etc/ansible/hosts
[webservers]
192.168.22.12
192.168.22.13
[all:vars]
ansible_connection=ssh
ansible_user=root
五、测试连接
ansible all -m ping
执行命令后输出
192.168.22.12 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
192.168.22.13 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
六、执行命令测试
