01-核心概念与哲学 (Concept & Philosophy)
本章目标: 理解 Ansible "为什么" 这样设计,以及它与传统脚本思维的区别。
1. 无代理架构 (Agentless Architecture)
定义: Ansible 不需要像 Puppet 或 Zabbix 那样在被管理节点 (Managed Nodes) 上安装守护进程 (Agent)。
深度解析:底层原理
- 通信机制: Ansible 复用现有的 OpenSSH 协议。如果你的机器能通过 SSH 连接,它就能被 Ansible 管理。
- 执行逻辑: 控制节点 (Control Node) 将 模块 (Module) 代码(通常是 Python 脚本)通过 SFTP/SCP 推送到目标节点的临时目录(默认
~/.ansible/tmp/),执行完毕后自动删除。 - 核心优势: 零资源驻留,零攻击面增加,立即上手。
2. 幂等性 (Idempotency)
定义: 无论执行多少次,结果都是一致的。
为什么它很重要 (Why it matters)
- 脚本思维:
mkdir /tmp/data-> 第二次执行会报错 "File exists"(文件已存在)。 - Ansible 思维:
state: directory-> 第一次创建;第二次检测到已存在则 跳过 (Skipped)(状态显示为OK而非Changed)。
底层实现
每个模块在执行变更前,会先收集目标系统的 "Facts"(当前状态),并与 "Desired State"(期望状态)进行对比。只有当两者不一致时,才会触发实际的操作 (Action)。
3. 工作流可视化 (Workflow Visualization)
sequenceDiagram
participant CN as 控制节点 (Ansible)
participant MN as 受控节点 (Server A)
CN->>MN: 1. SSH 握手与认证
CN->>MN: 2. 发送模块代码 (SFTP)
Note over MN: ~/.ansible/tmp/xx.py
CN->>MN: 3. 执行模块 (Python)
MN-->>MN: 4. 状态检查 (幂等性判断)
MN-->>CN: 5. 返回结果 (JSON)
CN->>MN: 6. 删除临时文件