1. 课程导入与平台工程全景

在开始搭建任何自动化平台之前,我们需要先回答一个根本问题:RHEL 自动化运维平台到底是什么?它不是某一个开源工具的别名,也不是把 Ansible、GitLab、Prometheus 简单堆在一台服务器上。更准确地说,它是一套以 RHEL 为运行底座、以“声明式描述 + 版本化交付 + 可观测反馈”为主线的运维能力工程化体系。它的目标是把过去依赖个人经验和手工操作的运维动作,转化为可重复、可审计、可回滚、可度量的平台能力。

理解这个定义,可以从三个层次切入。第一层是执行层:所有变更最终都要落到受管节点上,无论是安装软件包、下发配置文件、重启服务,还是滚动升级。第二层是控制层:谁有权发起变更、变更内容从哪里来、经过哪些校验、如何分批推进。第三层是反馈层:变更之后系统处于什么状态,指标、日志、告警是否印证了预期结果。缺少任何一层,平台都会退化成“批量执行脚本的工具”,而不是工程化的运维平台。

核心价值:从“救火”到“可预期”

自动化运维平台的核心价值并不只是“快”。真正重要的是把不确定性压缩到可控范围内。手工操作时,同一批 50 台服务器可能因为执行顺序、环境差异、操作者状态不同而产生 50 种结果;平台化之后,期望状态被写成代码,执行过程被记录,偏差被检测并纠正。具体来说,它带来四类可衡量的收益:

  • 一致性:同一份 Playbook 或 Role 在开发、测试、生产环境产生结构相同的配置结果,减少“这台机器和那台不一样”的排查成本。
  • 可追溯:每次变更对应一次提交、一个流水线编号、一份执行日志,出问题能定位到“谁在什么时候改了什么”。
  • 可回滚:配置和代码一起版本化,回滚不再依赖记忆,而是切换到上一个已知良好版本。
  • 可度量:变更成功率、平均恢复时间、配置漂移数量等指标可以被持续采集,用于改进而不是凭感觉判断。

典型场景:平台到底解决什么问题

在 RHEL 环境中,自动化运维平台最常见的落地场景包括:批量基线配置(如统一时区、NTP、YUM 源、内核参数、审计规则)、应用发布与回滚(如 Web 集群的滚动更新)、补丁与合规管理(如按安全公告批量更新并验证)、配置漂移检测与修复(定期比对期望状态与实际状态)、日常巡检与告警联动(采集关键指标并在异常时触发处置流程)。这些场景的共同点是:对象多、步骤重复、对一致性要求高、出错代价大——这正是平台化收益最明显的地方。

技术栈选型:为什么是这些组件

本课程采用的技术栈以 RHEL 9 为底座,围绕“配置管理 + 版本控制 + 流水线 + 可观测”四条主线组织。配置管理选择 Ansible,原因是它基于 SSH、无代理、YAML 描述直观,适合 RHEL 环境快速落地;版本控制选择 Git,所有 Playbook、Role、变量和清单都进入仓库;流水线选择 GitLab CI 或 Jenkins,用于把“提交代码”变成“受控执行”;可观测层使用 Prometheus + Grafana + node_exporter,采集节点指标并可视化;日志与审计可结合 rsyslog / journald 与集中式日志系统。需要强调的是,选型不是绝对的,关键是每条主线都有明确职责,避免工具之间功能重叠导致维护混乱。

整体架构分层

把上述组件放到一张分层图中,可以更清楚地看到数据和控制是如何流动的。下图展示了本课程后续章节会逐步搭建的平台全景:最上层是用户与触发入口,中间是控制与执行核心,底层是受管节点与反馈采集,右侧是贯穿始终的版本与审计支撑。

RHEL 自动化运维平台整体架构分层 控制流自上而下 · 反馈流自下而上 · 版本与审计贯穿全层 ① 用户与触发层 运维工程师 · 开发提交 · 定时任务 · 告警回调 · API 调用 Git 仓库 Playbook / Role / 变量 触发变更 ② 控制与编排层 GitLab CI / Jenkins 流水线 · 审批门禁 · 分批策略 · 变量与清单管理 校验 → 计划 → 审批 → 执行 → 记录 下发任务 ③ 执行引擎层 Ansible Engine · Inventory 分组 · Roles · Handlers · 幂等模块 SSH 无代理连接 · 并行执行 · 失败重试与限速 配置下发 ④ 受管节点层(RHEL 9) Web 节点 · 数据库节点 · 中间件节点 · 基础服务节点 systemd 服务 · 配置文件 · 软件包 · 内核参数 · 安全策略 采集反馈 ⑤ 可观测与反馈层 node_exporter · Prometheus · Grafana · 告警规则 · 日志审计 版本与审计支撑 Git 提交记录 流水线执行日志 Ansible 执行回执 变更审批记录 配置漂移报告 回滚版本标记 合规检查结果 贯穿 ①—⑤ 全层 保证可追溯与可回滚 反馈驱动改进 控制流 反馈流 审计支撑

这张图中有两条方向相反的流需要特别留意。控制流从用户触发开始,经过流水线编排,由 Ansible 下发到受管节点,是“期望状态”的传递方向;反馈流则从节点指标、日志和审计记录出发,回到控制层,用于判断变更是否达到预期、是否需要触发修复或回滚。很多团队只搭了控制流,结果平台变成“能批量改但不知道改完对不对”的半成品。因此从第一天起,就应该把可观测层当作平台的一等公民,而不是事后补丁。

一个最小可用的教学示例

为了把抽象架构落到具体操作,我们给出一个最小示例:用 Ansible 对一组 RHEL 9 节点统一配置 NTP 客户端并确保 chronyd 处于运行状态。假设清单文件 inventory.ini 内容如下:

[web]
web01.example.com
web02.example.com

[db]
db01.example.com

[all:vars]
ansible_user=ops
ansible_ssh_private_key_file=~/.ssh/id_rsa

对应的 Playbook 片段可以写成:

- name: 统一 NTP 基线
  hosts: all
  become: true
  tasks:
    - name: 安装 chrony
      ansible.builtin.dnf:
        name: chrony
        state: present

    - name: 下发 chrony 配置
      ansible.builtin.template:
        src: chrony.conf.j2
        dest: /etc/chrony.conf
        owner: root
        group: root
        mode: '0644'
      notify: 重启 chronyd

    - name: 确保 chronyd 已启用并运行
      ansible.builtin.service:
        name: chronyd
        state: started
        enabled: true

  handlers:
    - name: 重启 chronyd
      ansible.builtin.service:
        name: chronyd
        state: restarted

执行时使用 ansible-playbook -i inventory.ini ntp.yml。观察输出时重点关注三类信息:changed 表示实际发生了变更,ok 表示已符合期望状态,failed 表示执行失败。如果第二次执行时大部分任务显示 ok,说明幂等性生效,平台没有做多余动作。随后可以在节点上执行 chronyc sources -v 查看时间源状态,确认 NTP 同步正常。这个例子虽小,却完整覆盖了“清单定义对象、Playbook 描述期望、执行产生变更、命令验证结果”的闭环,后续章节的复杂场景都是在这个骨架上扩展出来的。

平台建设初期不要追求大而全。先把一条最小闭环跑通——一个仓库、一条流水线、一组节点、一个可验证的 Playbook——再逐步增加审批、分批、回滚和监控。架构图的价值在于让你知道当前处在哪一层、下一步该补哪一层。

本课程的学习路径