3.10. 使用 bootupd 更新 RHCOS 节点上的引导装载程序
要使用 bootupd
更新 RHCOS 节点上的引导装载程序,您必须在 RHCOS 机器上手动运行 bootupctl update
命令,或使用 systemd
单元提供机器配置。
与 grubby
或其他引导装载程序工具不同,boot upd
不管理内核空间配置,如传递内核参数。要配置内核参数,请参阅为节点添加内核参数。
您可以使用 bootupd
更新引导装载程序以防止 BootHole 漏洞。
3.10.1. 手动更新引导装载程序
您可以使用 bootupctl
命令行工具手动检查系统状态并更新引导装载程序。
检查系统状态:
# bootupctl status
x86_64
的输出示例Component EFI Installed: grub2-efi-x64-1:2.04-31.el8_4.1.x86_64,shim-x64-15-8.el8_1.x86_64 Update: At latest version
aarch64
的输出示例Component EFI Installed: grub2-efi-aa64-1:2.02-99.el8_4.1.aarch64,shim-aa64-15.4-2.el8_1.aarch64 Update: At latest version
OpenShift Container Platform 集群最初安装在版本 4.4 及更早的版本中,需要明确的采用阶段。
如果系统状态为
Adoptable
,请执行采用:# bootupctl adopt-and-update
输出示例
Updated: grub2-efi-x64-1:2.04-31.el8_4.1.x86_64,shim-x64-15-8.el8_1.x86_64
如果有可用更新,请应用更新以便在下次重启时使更改生效:
# bootupctl update
输出示例
Updated: grub2-efi-x64-1:2.04-31.el8_4.1.x86_64,shim-x64-15-8.el8_1.x86_64
3.10.2. 通过机器配置自动更新引导装载程序
使用 bootupd
自动更新引导装载程序的另一种方法是创建一个 systemd 服务单元,该单元将在每次引导时更新引导装载程序。单元将在引导过程中运行 bootupctl update
命令,并通过机器配置在节点上安装。
这个配置不会被默认启用,因为更新操作的意外中断可能会导致无法引导的节点。如果启用此配置,请确保在引导装载程序更新进行过程中避免中断节点。引导装载程序更新操作通常很快完成,因此风险较低。
创建一个 Butane 配置文件
99-worker-bootupctl-update.bu
,包括bootupctl-update.service
systemd 单元的内容。注意有关 Butane 的信息,请参阅"使用 Butane 创建机器配置"。
输出示例
variant: openshift version: 4.16.0 metadata: name: 99-worker-chrony 1 labels: machineconfiguration.openshift.io/role: worker 2 systemd: units: - name: bootupctl-update.service enabled: true contents: | [Unit] Description=Bootupd automatic update [Service] ExecStart=/usr/bin/bootupctl update RemainAfterExit=yes [Install] WantedBy=multi-user.target
使用 Butane 生成
MachineConfig
对象文件99-worker-bootupctl-update.yaml
,其中包含要传送到节点的配置:$ butane 99-worker-bootupctl-update.bu -o 99-worker-bootupctl-update.yaml
使用以下两种方式之一应用配置:
-
如果集群还没有运行,在生成清单文件后,将
MachineConfig
对象文件添加到<installation_directory>/openshift
目录中,然后继续创建集群。 如果集群已在运行,请应用该文件:
$ oc apply -f ./99-worker-bootupctl-update.yaml
-
如果集群还没有运行,在生成清单文件后,将