第一章:Ansible 简介

了解 Ansible 的发展历程、核心特性、架构原理和使用场景。

最后更新: 2024-01-15
页面目录

Ansible 简介

Ansible 是一个开源的自动化平台,用于配置管理、应用部署、任务自动化和 IT 编排。它以其简洁性、易用性和强大的功能而广受欢迎。

什么是 Ansible?

Ansible 是一个 IT 自动化工具,可以通过 SSH 协议实现对服务器的配置管理、应用部署、任务执行等功能,无需在被管理节点上安装代理程序。

核心特性

特性 说明
无代理架构 通过 SSH 协议管理节点,无需在被管理主机安装额外软件
YAML 语法 使用人类可读的 YAML 格式编写配置和任务
幂等性 重复执行不会改变系统状态,确保安全可靠
模块化设计 内置丰富的模块,支持自定义扩展
推送模式 控制节点主动推送配置到目标主机
并行执行 支持多主机并行操作,提高效率

Ansible 的发展历史

年份 版本 主要特性
2012 Ansible 诞生 由 Michael DeHaan 开发
2013 Ansible 1.0 模块支持、Playbook
2015 Ansible 2.0 重构引擎、Block 语法
2017 Ansible 2.4 动态 Inventory、配置文件改进
2019 Ansible 2.9 Collections、模块增强
2020 Ansible Core 2.10 拆分 AWX/Collection
2021+ Ansible Core 2.11+ 持续改进、性能优化

Ansible vs 其他自动化工具

对比项 Ansible Puppet Chef SaltStack
架构 无代理/SSH 有代理 有代理 有代理/无代理
配置语言 YAML Ruby DSL Ruby DSL YAML/Python
学习曲线
可扩展性
社区活跃度
速度
Windows 支持 一般 一般

Ansible 核心概念

┌─────────────────────────────────────────────────────────────────┐
│                      Ansible 核心概念                              │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  ┌─────────────┐      ┌─────────────┐      ┌─────────────┐     │
│  │  Inventory  │ ───► │   Module    │ ───► │   Target    │     │
│  │  主机清单    │      │   模块      │      │   目标主机   │     │
│  └─────────────┘      └─────────────┘      └─────────────┘     │
│         │                   │                                   │
│         ▼                   ▼                                   │
│  ┌─────────────┐      ┌─────────────┐      ┌─────────────┐     │
│  │  Playbook   │      │   Handler   │      │    Role     │     │
│  │  剧本       │      │   处理器    │      │   角色      │     │
│  └─────────────┘      └─────────────┘      └─────────────┘     │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

核心组件说明

组件 说明
Inventory 主机清单,定义要管理的主机及其分组
Module 模块,执行具体任务的功能单元
Playbook 剧本,定义自动化任务的 YAML 文件
Handler 处理器,任务执行后触发的回调操作
Role 角色,组织 Playbook 的目录结构
Fact 事实,主机收集的系统信息
Vault 保险库,用于加密敏感数据

Ansible 架构原理

┌─────────────────────────────────────────────────────────────────┐
│                     Ansible 架构                                  │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│   ┌──────────────────────────────────────────────────────────┐  │
│   │                     Ansible Engine                        │  │
│   │   ┌────────────┐  ┌────────────┐  ┌────────────────────┐ │  │
│   │   │   Ansible  │  │   Host     │  │    Module          │ │  │
│   │   │   CLI/Tower│  │  Inventory │  │    System          │ │  │
│   │   └─────┬──────┘  └─────┬──────┘  └─────────┬──────────┘ │  │
│   │         │              │                   │            │  │
│   │         │              ▼                   ▼            │  │
│   │         │       ┌───────────────────────────────┐        │  │
│   │         │       │         Playbook              │        │  │
│   │         │       │    (YAML / Python)           │        │  │
│   │         │       └───────────────────────────────┘        │  │
│   │         │                       │                       │  │
│   │         │                       ▼                       │  │
│   │         │              ┌─────────────────┐                │  │
│   │         └─────────────►│  Execution      │                │  │
│   │                        │  Plugins        │                │  │
│   │                        └────────┬────────┘                │  │
│   └─────────────────────────────────│─────────────────────────┘  │
│                                     │ SSH / WinRM                 │
│   ┌─────────────────────────────────┼─────────────────────────┐  │
│   │                                 ▼                          │  │
│   │   ┌──────────────┐  ┌──────────────┐  ┌──────────────┐    │  │
│   │   │  Managed     │  │  Managed     │  │  Managed     │    │  │
│   │   │  Host 1      │  │  Host 2      │  │  Host N      │    │  │
│   │   │  (Linux)     │  │  (Linux)     │  │  (Windows)   │    │  │
│   │   └──────────────┘  └──────────────┘  └──────────────┘    │  │
│   └───────────────────────────────────────────────────────────┘  │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

Ansible 工作流程

┌─────────────────────────────────────────────────────────────────┐
│                      Ansible 工作流程                             │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  1. 读取 Inventory    → 定义主机和分组                           │
│           ↓                                                        │
│  2. 读取 Playbook     → 定义自动化任务                           │
│           ↓                                                        │
│  3. 执行预处理       → 收集 Facts、加载变量                       │
│           ↓                                                        │
│  4. 执行任务         → 调用模块完成具体操作                        │
│           ↓                                                        │
│  5. 执行后处理       → 运行 Handlers                             │
│           ↓                                                        │
│  6. 生成报告         → 任务执行结果                               │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

使用场景

1. 配置管理

# 安装和配置 Nginx
- name: Configure Nginx
  hosts: webservers
  tasks:
    - name: Install Nginx
      apt:
        name: nginx
        state: present
    - name: Start Nginx
      service:
        name: nginx
        state: started

2. 应用部署

# 部署 Web 应用
- name: Deploy Application
  hosts: appservers
  tasks:
    - name: Pull latest code
      git:
        repo: "https://github.com/example/app.git"
        dest: /opt/app
    - name: Restart application
      systemd:
        name: myapp
        state: restarted

3. 批量操作

# 在所有主机上执行命令
ansible all -m command -a "uptime"

# 在指定组执行操作
ansible webservers -m copy -a "src=./config.conf dest=/etc/myapp/"

4. 定时任务管理

# 管理 Cron 任务
- name: Manage cron jobs
  hosts: all
  tasks:
    - name: Add cron job
      cron:
        name: "Backup database"
        minute: "0"
        hour: "2"
        job: "/usr/local/bin/backup.sh"

为什么选择 Ansible?

优势

  • 简单易学:使用 YAML 语法,人类可读
  • 无代理架构:无需在被管理主机安装软件
  • 幂等性:安全可靠,可重复执行
  • 功能强大:内置 3000+ 模块
  • 社区活跃:丰富的 Galaxy 角色和 Collections
  • 跨平台:支持 Linux、Windows、网络设备

适用场景

场景 推荐使用
配置管理 操作系统、软件安装、网络配置
应用部署 Web 应用、微服务、容器编排
批量操作 批量执行命令、文件分发
任务编排 复杂工作流、多阶段部署
基础设施即代码 环境标准化、版本控制

常用术语表

术语 说明
Control Node Ansible 控制节点,执行 Ansible 的主机
Managed Node 被管理节点,Ansible 管理的主机
Inventory 主机清单,定义管理的主机
Playbook 剧本,定义自动化任务的 YAML 文件
Task 任务,Playbook 中的最小执行单元
Module 模块,执行具体功能
Role 角色,组织 Playbook 的结构
Handler 处理器,条件触发执行的任务
Fact 事实,收集的主机信息
Vault 保险库,加密敏感数据

下一步

接下来让我们学习如何安装和配置 Ansible。

👉 安装与配置