LabHub
学习 学习路径 课程

RHEL 系管理

考试真正在问什么

在 LabHub 中继续学习

一句话总结

RHCE 真正考查的不是 Ansible 语法,而是能否把 RHEL 配置成目标状态。因此,失分点主要集中在系统层面。

概念图: 能否让 RHEL 系统达到所需状态 · 当前生效的规则(runtime) · 写入文件的规则(permanent) · 恢复后出现的症状与最初完全相同

为什么重点不是语法而是系统

RHCE(EX294)看起来像 Ansible 考试,但它真正考查的是能否让 RHEL 系统达到所需状态。因此,容易失分的地方不在语法,而主要在系统层面。

started 与 enabled

state: started    # 지금 돌고 있는가
enabled: true     # 재부팅 후에도 뜨는가

二者描述的是不同状态。只写 started,评分当下能够通过;但重启后服务就不再运行,而重启往往发生在凌晨。

firewalld 的两个世界

firewalld 分别管理当前生效的规则(runtime)写入文件的规则(permanent)

设置内容 结果 症状
permanent 已写入文件,但当前没有开放 “明明配置了,为什么还是不通?”
immediate 当前已开放,但重启后消失 “昨天明明还能用。”
两者都设置 完整状态

SELinux 会悄无声息地阻止访问

SELinux 拦截操作时,在应用程序看来只是普通错误,比如 connection refused403。文件权限又完全正常,因此更容易令人困惑。

此外,如果 SELinux 布尔值漏掉 persistent: true,它只会在当前生效,重启后便恢复原状。恢复后出现的症状与最初完全相同,于是人们会以为问题已修复,却再次遇到同一故障。

文件上下文分为两步。sefcontext 只登记规则;要把规则应用到现有文件,还必须另行执行 restorecon

幂等性不是信念,而是数字

“我写得很幂等”只是一种信念,而“第二次运行时 changed 为 0”才是事实。只有后者有意义。

破坏幂等性的原因几乎总是以下两种。

  1. 无条件执行 command/shell——每次都会显示 changed。应使用 creates:changed_when: 添加条件。
  2. 每次都会变化的模板——如果加入时间或随机数,内容就会不断改变。处理程序因而每次都重启服务,导致明明什么都没变,每次发布却仍会中断服务。

考试中容易浪费时间的环节

RHCE 考试失败,往往不是因为不会,而是因为时间不够。因此,预先确定操作流程与掌握知识同样重要。

首先检查清单和连接。 无论 playbook 写得多好,无法连接目标就只能得 0 分。先用 ansible all -m ping 确认所有目标都有响应,同时检查能否提升权限。这 1 分钟可以避免之后因“为什么不行”而浪费 20 分钟。

提前确定去哪里查文档。 模块选项名称不靠死记,而应通过 ansible-doc 查找。但查找也会耗费时间,所以应熟悉常用模块(packageservicecopytemplatelineinfileuserfirewalldseboolean),只查询其余内容。

完成一道题后立即验证。 如果最后集中检查,就得重新查找每道题错在哪里。操作服务后应当场检查到 systemctl is-enabled,配置防火墙后应当场查看 firewall-cmd --list-all

遇到阻碍就先跳过。 纠缠一道题的时间里,可能已经错过两道本可以完成的题。跳过时记录尚未处理的内容,剩余时间再回来解决。

最后,务必预留时间,在重启后检查状态。 这是发现本模块反复强调的持久性问题的唯一方法。如果没有时间重启,至少也要浏览 systemctl is-enabled 和 firewalld 的 permanent 列表。实际工作同样如此:“现在可以工作”和“重启后仍可工作”是两种不同状态,而它们之间的差异总会在最糟糕的时刻暴露。

实际工作中真正重要的事项

使用改变状态的模块时,始终同时写明是否持久化。state: started 配上 enabled: true,为 firewalld 同时设置 permanentimmediate,为 SELinux 布尔值设置 persistent: true。遗漏后,当前能够通过,重启后却会消失,而重启通常发生在凌晨。

只能通过第二次运行时 changed 为 0 来证明幂等性。 破坏幂等性的原因几乎总是无条件执行的 command/shell 和每次变化的模板。后者尤其糟糕——处理程序每次都会重启服务,明明什么都没变,每次发布却仍会中断。

SELinux 拦截操作时,看起来像应用程序错误。 它可能表现为 connection refused 或 403,而文件权限完全正常,因此往往最耗费排障时间。还要记住,sefcontext 只登记规则;要把规则应用到现有文件,必须另行执行 restorecon

下一个实验将在 AlmaLinux 9 VM 中进行。SELinux 处于 Enforcing 状态,firewalld 也正在运行,所以如果遗漏上述设置,操作会真正被阻止