Ansible介绍
一、Ansible 是什么?
Ansible 是一款开源的 自动化运维工具,由 Red Hat 公司开发维护,主要用于:
配置管理 (Configuration Management)
应用部署 (Application Deployment)
任务自动化 (Task Automation)
编排协调 (Orchestration)
二、核心特点
无代理架构:通过 SSH 协议直接管理节点,无需在目标主机安装客户端
声明式语言:使用 YAML 编写 Playbook,描述期望的系统状态
幂等性:多次执行同一操作不会改变已达到预期状态的结果
模块化设计:提供超过 750+ 内置模块,覆盖常见运维操作
三、主要用途
1. 配置管理
集中管理服务器配置(如 /etc 下各种配置文件)
确保多台服务器配置一致
典型应用:
管理用户账号和权限
配置系统服务(Nginx/Apache/MySQL等)
维护 cron 任务
2. 应用部署
自动化部署应用程序(Java/Python/PHP等)
支持蓝绿部署、滚动更新等策略
典型场景:
部署 Web 应用
数据库 schema 迁移
微服务架构部署
3. 持续交付
与 CI/CD 工具(Jenkins/GitLab CI等)集成
实现从代码提交到生产部署的自动化流水线
4. 云资源管理
通过模块支持 AWS/Azure/GCP 等云平台
管理虚拟机、网络、存储等云资源
实现基础设施即代码(IaC)
5. 日常运维自动化
批量执行命令
日志收集和分析
系统监控和维护
安全补丁更新
四、核心组件
组件 | 用途 |
---|---|
Inventory | 定义管理的主机清单 |
Playbook | YAML格式的自动化脚本 |
Module | 执行特定任务的代码单元(如 file, copy, yum 等) |
Role | 可重用的任务集合 |
Vault | 加密敏感数据 |
Galaxy | 角色共享平台 |
五、基本工作流程
编写 Playbook(YAML 文件)
定义 Inventory(主机列表)
执行 ansible-playbook 命令
Ansible 通过 SSH 连接到目标主机
执行模块将系统转变为期望状态
六、适用场景
中小型环境:简单易用,快速上手
混合云环境:统一管理物理机、虚拟机和云主机
DevOps 实践:促进开发与运维协作
合规性管理:确保系统配置符合安全标准
七、简单示例
- 临时命令执行:
ansible web_servers -m ping
ansible db_servers -a "free -m"
- Playbook 示例 (install_nginx.yml):
---
- hosts: web_servers
tasks:
- name: Install Nginx
apt:
name: nginx
state: present
- name: Start Nginx service
service:
name: nginx
state: started
enabled: yes
八、优势比较
特性 | Ansible | SaltStack | Puppet | Chef |
---|---|---|---|---|
架构 | 无代理 | 有代理/无代理 | 有代理 | 有代理 |
学习曲线 | 简单 | 中等 | 较陡 | 较陡 |
语言 | YAML | YAML/Python | DSL | Ruby |
实时性 | 一般 | 优秀 | 良好 | 良好 |
Ansible 特别适合需要快速实现自动化且不想维护复杂架构的团队。