Skip to main content
☘️ Septvean's Documents
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

Ansible 核心概念

内容:是什么 -> 为什么 -> 怎么用 -> 易错点

1️⃣ Ansible 是什么?

Ansible 是一款无 Agent 的自动化运维与配置管理工具,主要用于:

  • 批量命令执行
  • 配置管理
  • 应用部署
  • 系统初始化
  • 持续交付(CI/CD)

核心特点

特性 说明
无 Agent 目标主机无需安装客户端
SSH 通信 默认基于 SSH
YAML 描述 Playbook 使用 YAML
幂等性 多次执行结果一致
模块化 一切操作都是模块

2️⃣ Ansible 架构原理(工作流程)

          控制节点 (Control Node)
        ┌────────────────────────────┐
        │ ansible / ansible-playbook |
        └──────────┬─────────────────┘
                   │ SSH
         ┌─────────┴─────────┐
         │                   │
   被控节点1             被控节点2

执行流程(非常重要)

  1. 读取 Inventory(主机清单)
  2. 解析 Playbook / Ad-Hoc
  3. 选择模块(module)
  4. 通过 SSH 推送模块到目标主机
  5. 模块在远端执行
  6. 返回 JSON 结果
  7. 控制端解析并展示

3️⃣ Control Node / Managed Node

角色 说明
Control Node 安装 Ansible 的机器
Managed Node 被管理的目标主机

⚠️ Managed Node 不需要安装 Ansible

4️⃣ Inventory(主机清单)

是什么?

Inventory 定义 Ansible 要管理哪些主机、如何分组。

支持格式

  • INI(传统)
  • YAML(推荐)
  • 动态 Inventory(云厂商 / API)

核心概念

  • Host(主机)
  • Group(主机组)
  • Group Vars / Host Vars
all:
  children:
    web:
      hosts:
        web01:
        web02:

5️⃣ Module(模块)——Ansible 的灵魂

本质

模块 = Ansible 执行任务的最小单位

  • 每个任务都是一个模块调用
  • 模块返回标准 JSON

常见模块分类

类型 示例
系统 package, service, user
文件 copy, template, file
命令 command, shell
网络 uri
ec2, azure_rm
容器 docker_container

⚠️ Playbook ≠ Shell 脚本

6️⃣ Ad-Hoc vs Playbook

Ad-Hoc

  • 单条命令
  • 临时任务
ansible web -m ping

Playbook

  • 多任务
  • 可复用、可维护
- hosts: web
  tasks:
    - ping:

7️⃣ Playbook 核心结构

- hosts: web
  become: true
  tasks:
    - name: install nginx
      package:
        name: nginx
        state: present

核心字段

字段 作用
hosts 目标主机
tasks 任务列表
become 提权
vars 变量
handlers 事件触发

8️⃣ Task(任务)

特点

  • 顺序执行
  • 默认失败即中断
  • 幂等
- name: start nginx
  service:
    name: nginx
    state: started

9️⃣ Idempotency(幂等性)——Ansible 的核心价值

什么是幂等?

多次执行,结果一致,不产生副作用

幂等 vs 非幂等

操作 是否幂等
安装软件
确保服务运行
echo 1 » file

🔟 Handler(处理器)

是什么?

当任务状态发生变化时,才执行的任务

handlers:
  - name: restart nginx
    service:
      name: nginx
      state: restarted

- template:
    src: nginx.conf.j2
    dest: /etc/nginx/nginx.conf
  notify: restart nginx

1️⃣1️⃣ Variable(变量)

来源优先级(高 -> 低)

  1. Extra vars(-e)
  2. Play vars
  3. Host vars
  4. Group vars
  5. Role defaults
nginx_port: 80

1️⃣2️⃣ Facts(事实)

是什么?

Ansible 自动采集的主机信息

ansible all -m setup
{{ ansible_hostname }}
{{ ansible_os_family }}

1️⃣3️⃣ Template(Jinja2 模板)

server {
  listen {{ nginx_port }};
}
  • 条件判断
  • 循环
  • 变量渲染

1️⃣4️⃣ Role(角色)——生产必备

作用

  • 模块化
  • 可复用
  • 可测试
  • 易维护
roles/
  nginx/
    tasks/
    handlers/
    templates/

1️⃣5️⃣ Tag(标签)

- name: install nginx
  package:
    name: nginx
  tags: install
ansible-playbook site.yml --tags install

1️⃣6️⃣ Become(权限提升)

become: true
become_user: root

1️⃣7️⃣ Error Handling(错误处理)

ignore_errors: true
failed_when: result.rc != 0
block:
  - ...
rescue:
  - ...

1️⃣8️⃣ Check Mode / Diff Mode

ansible-playbook site.yml --check --diff
  • 不实际修改
  • 显示差异

1️⃣9️⃣ Inventory + Playbook + Role 关系

Inventory -> 定义对象
Playbook -> 定义流程
Role -> 定义能力

2️⃣0️⃣ Ansible 最重要的设计哲学

  1. 无 Agent
  2. 模块化
  3. 幂等性
  4. 声明式
  5. Push 模型
  6. YAML + Jinja2
  7. 结果可预期

🎯 学习路线建议

  1. 核心概念(你现在这一步)✔
  2. 模块体系
  3. Inventory 设计
  4. Role 规范
  5. Playbook 编排
  6. CI/CD 集成
  7. 大规模主机治理

✅ 总结

Ansible 是一个基于 SSH、无 Agent、模块化、声明式、幂等的自动化运维工具

Inventory 定义目标,Playbook 定义流程,Role 定义能力

所有操作都是模块,所有设计围绕幂等性展开