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 执行时,五个核心概念之间的数据流与调用关系:

Ansible 核心概念协作关系图 Ansible 核心概念执行链路 Inventory 主机清单 / 分组 / 变量 Playbook 编排剧本 (YAML) Task 最小执行单元 Module 功能模块 (幂等) Role 可复用封装单元 说明:Playbook 可直接引用 Task,也可通过 Role 引入一组预定义的 Task 和变量

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 的流程编排,构成完整的自动化检查体系。