第 3 章 greenboot 健康检查框架
Greenboot 是 rpm-ostree
系统上 systemd
服务的通用健康检查框架,如 Red Hat Enterprise Linux for Edge (RHEL for Edge)。此框架包含在带有 microshift-greenboot
和 greenboot-default-health-checks
RPM 软件包的 MicroShift 安装中。
Greenboot 健康检查会在不同时间运行来评估系统健康状况,并在软件出现问题的情况下自动回滚到最后一个健康状态,例如:
- 默认健康检查脚本会在每次系统启动时运行。
- 除了默认的健康检查外,您还可以编写、安装和配置应用程序健康检查脚本,以便在每次系统启动时也运行。
- Greenboot 可以降低更新期间被锁定在边缘设备的风险,并防止在更新失败时出现大量服务中断。
-
当检测到失败时,系统使用
rpm-ostree
回滚功能引导到最后一个已知的工作配置。此功能对于直接可服务性是有限或不存在的边缘设备特别有用。
MicroShift 应用程序健康检查脚本包含在 microshift-greenboot
RPM 中。greenboot-default-health-checks
RPM 包括验证 DNS 和 ostree
服务是否可以访问健康检查脚本。您可以为正在运行的工作负载创建自己的健康检查脚本。您可以编写一个来验证应用程序是否已启动,例如:
3.1. Greenboot 如何使用目录运行脚本
健康检查脚本从四个 /etc/greenboot
目录运行。这些脚本按字母顺序运行。当您为工作负载配置脚本时请注意这一点。
当系统启动时,greenboot 在 required.d
和 want .d
目录中运行脚本。根据这些脚本的结果,greenboot 会继续启动或尝试回滚,如下所示:
-
系统如预期:当
required.d
目录中的所有脚本都成功运行时,greenboot 会运行/etc/greenboot/green.d
目录中存在的任何脚本。 -
系统问题:如果
required.d
目录中任何脚本失败,greenboot 会运行red.d
目录中存在的任何预滚动脚本,然后重新启动系统。
Greenboot 将脚本和健康检查输出重定向到系统日志。登录后,每日消息将提供整体系统健康输出。
3.1.1. Greenboot 目录详情
从任何脚本返回非零退出代码意味着该脚本已失败。Greenboot 会在尝试回滚到以前的版本前重启系统来重试脚本。
/etc/greenboot/check/required.d
包含不能失败的健康检查。-
如果脚本失败,greenboot 默认会重试三次。您可以通过将
GREENBOOT_MAX_BOOTS
参数设置为所需的重试次数,在/etc/greenboot/greenboot.conf
文件中配置重试次数。 - 在所有重试失败后,如果可用,greenboot 会自动启动回滚。如果没有可用的回滚,系统日志输出显示需要手动干预。
-
MicroShift 的
40_microshift_running_check.sh
健康检查脚本安装在这个目录中。
-
如果脚本失败,greenboot 默认会重试三次。您可以通过将
/etc/greenboot/check/wanted.d
包含允许失败的健康脚本,而不会导致回滚系统。- 如果这些脚本失败,greenboot 会记录失败,但不会启动一个回滚。
-
/etc/greenboot/green.d
包含在 greenboot 声明开始成功后运行的脚本。 -
/etc/greenboot/red.d
包含在 greenboot 声明启动失败时运行的脚本,包括40_microshift_pre_rollback.sh
prerollback 脚本。这个脚本会在系统回滚前执行。该脚本执行 MicroShift pod 和 OVN-Kubernetes 清理,以避免在将系统回滚到以前的版本后出现潜在的冲突。
如果您自定义 /etc/greenboot/greenboot.conf
文件中任何环境变量的值,则当 greenboot RPM 软件包被更新或降级时,这些更改可能会丢失。
-
要在使用 MicroShift 构建系统镜像时保留自定义,请将
greenboot.conf
文件添加到蓝图中。 -
要在使用 RPM 安装时保留自定义,请在安装 MicroShift 和 greenboot RPM 后对
greenboot.conf
文件应用更改。