2. Ansible 核心概念回顾:Inventory、Playbook、Module、Task、Role 的基本概念与作用
在深入配置发布健康度检查之前,必须重新夯实 Ansible 的五大核心概念。这些概念构成了所有自动化任务的基础骨架,理解它们的职责边界与协作关系,是编写可维护、可复用的健康检查剧本的前提。
2.1 核心概念总览
下表从定义、作用、典型场景三个维度,快速对齐五个核心术语:
| 概念 | 定义 | 作用 | 健康度检查中的典型场景 |
|---|---|---|---|
| Inventory | 受管主机的清单文件,可静态(INI/YAML)或动态(云 API 脚本) | 定义目标主机列表、分组、连接变量 | 按环境(prod/staging)分组,指定待检查的服务器 IP 或主机名 |
| Playbook | YAML 格式的编排文件,包含一个或多个 Play | 定义自动化流程的“剧本”,决定在哪些主机上执行哪些任务 | 编写 health_check.yml,按顺序执行端口、进程、日志检查 |
| Module | Ansible 内置或自定义的功能单元(幂等执行) | 执行具体操作:命令、文件、服务、网络、API 调用 | 使用 uri 模块检查 HTTP 状态码,shell 模块执行诊断命令 |
| Task | Playbook 中最小的执行单元,调用一个 Module 并传入参数 | 描述“做什么”以及“期望状态” | “确保 Nginx 进程运行”是一个 Task,调用 service 模块 |
| Role | 可复用的任务、变量、模板、文件的组织单元 | 封装通用逻辑,实现代码复用与分层 | 封装 health_check_base Role,包含通用检查任务与告警模板 |
2.2 概念协作关系:从 Inventory 到 Role 的执行链路
下图展示了 Ansible 执行时,五个核心概念之间的数据流与调用关系:
2.3 各概念深度解析
2.3.1 Inventory:目标主机的“通讯录”
Inventory 定义了 Ansible 能管理哪些机器。静态文件通常位于 /etc/ansible/hosts 或项目根目录的 inventory/ 下。支持主机变量、组变量、组嵌套。
# inventory/production.yml
all:
children:
web_servers:
hosts:
web01:
ansible_host: 192.168.1.10
web02:
ansible_host: 192.168.1.11
vars:
http_port: 8080
db_servers:
hosts:
db01:
ansible_host: 192.168.1.20
monitoring:
children:
web_servers:
db_servers:
vars:
check_interval: 30
健康度检查实践: 建议按环境(dev/staging/prod)和角色(web/db/cache)分组,便于在 Playbook 中通过
hosts: web_servers 精准定位检查目标。
2.3.2 Playbook:自动化的“剧本”
Playbook 是 YAML 格式的编排文件,定义“在哪些主机上,按什么顺序,执行哪些任务”。一个 Playbook 可以包含多个 Play,每个 Play 指定一组 hosts 和一组 tasks。
# health_check.yml
---
- name: "Web 服务健康度检查"
hosts: web_servers
gather_facts: yes
tasks:
- name: "检查 Nginx 进程是否运行"
ansible.builtin.service:
name: nginx
state: started
- name: "检查 HTTP 200 响应"
ansible.builtin.uri:
url: "http://localhost:{{ http_port }}/health"
status_code: 200
2.3.3 Task:最小的执行单元
每个 Task 调用一个 Module,并声明期望状态。Task 的名称应具有可读性,便于日志审计和排错。Task 支持条件判断(when)、循环(loop)、注册变量(register)等高级特性。
- name: "检查磁盘使用率是否超过 85%"
ansible.builtin.shell: df -h / | tail -1 | awk '{print $5}' | sed 's/%//'
register: disk_usage
changed_when: false
- name: "磁盘使用率过高告警"
ansible.builtin.debug:
msg: "WARNING: 根分区使用率 {{ disk_usage.stdout }}% 超过阈值"
when: disk_usage.stdout | int > 85
2.3.4 Module:幂等的功能“积木”
Module 是 Ansible 的核心资产,官方提供超过 1000 个内置模块。健康度检查中高频使用的模块包括:
| 模块名 | 功能 | 健康检查场景 |
|---|---|---|
uri |
HTTP/HTTPS 请求 | 检查 API 端点返回码与响应体 |
service |
系统服务管理 | 确认关键服务处于 running 状态 |
shell/command |
执行命令并捕获输出 | 运行诊断脚本、解析日志 |
wait_for |
等待端口/文件/连接 | 等待应用端口监听就绪 |
assert |
断言条件成立 | 验证检查结果是否符合预期 |
2.3.5 Role:可复用的“知识包”
Role 将 Task、变量、模板、文件、Handler 按标准目录结构组织在一起。使用 Role 可以避免 Playbook 膨胀,实现团队级复用。
# roles/health_check_base/tasks/main.yml
---
- name: "检查基础系统资源"
include_tasks: check_resources.yml
- name: "检查关键进程"
include_tasks: check_processes.yml
- name: "检查日志错误"
include_tasks: check_logs.yml
在 Playbook 中引用 Role:
---
- name: "全栈健康度检查"
hosts: all
roles:
- role: health_check_base
vars:
alert_threshold: 90
- role: health_check_web
when: "'web_servers' in group_names"
2.4 概念对比:Task vs Module vs Role
| 维度 | Task | Module | Role |
|---|---|---|---|
| 粒度 | 最细,一个操作步骤 | 功能原子,一个具体动作 | 最粗,一组相关功能的集合 |
| 复用性 | 低,通常写在 Playbook 内 | 高,跨 Playbook 直接调用 | 最高,可分享到 Ansible Galaxy |
| 包含关系 | Task 调用 Module | 被 Task 调用 | 包含多个 Task、变量、模板 |
| 健康度检查示例 | “检查端口 443 是否监听” | wait_for port=443 state=drained |
health_check_web 包含端口、证书、响应时间检查 |
关键认知: 在配置发布健康度检查工程中,Task 是检查动作的载体,Module 是执行检查的工具,Role 是组织检查逻辑的单元。三者配合 Inventory 的目标定位和 Playbook 的流程编排,构成完整的自动化检查体系。