7.4. 操作系统问题故障排除
OpenShift Container Platform 在 RHCOS 上运行。您可以按照以下步骤排除与操作系统相关的问题。
7.4.1. 检查内核崩溃 复制链接链接已复制到粘贴板!
kdump
服务包括在 kexec-tools
软件包中,它提供了一个崩溃转储机制。您可以使用这个服务保存系统内存内容,以便稍后进行分析。
x86_64
架构支持 kdump 处于正式发布 (GA) 状态,其他架构支持 kdump 处于技术预览 (TP) 状态。
下表提供了针对不同架构的 kdump 支持级别的详细信息。
架构 | 支持级别 |
---|---|
|
GA |
|
TP |
|
TP |
|
TP |
kdump 支持在表中前三个架构,只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
7.4.1.1. 启用 kdump 复制链接链接已复制到粘贴板!
RHCOS 附带 kexec-tools
软件包,但需要手动配置才能启用 kdump
服务。
流程
执行以下步骤在 RHCOS 上启用 kdump。
要在第一次内核引导的过程中为崩溃内核保留内存,请输入以下命令提供内核参数:
rpm-ostree kargs --append='crashkernel=256M'
# rpm-ostree kargs --append='crashkernel=256M'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意对于
ppc64le
平台,crashkernel
的建议值为crashkernel=2G-4G:384M,4G-16G:512M,16G-64G:1G,64G-128G:2G,128G-:4G
。可选: 要通过网络写入崩溃转储,或将其写入其他位置而不是默认的本地
/var/crash
位置,请编辑/etc/kdump.conf
配置文件。注意如果您的节点使用 LUKS 加密设备,则必须使用网络转储作为 kdump 不支持将崩溃转储保存到 LUKS 加密设备。
有关配置
kdump
服务的详情,请查看/etc/sysconfig/kdump
、/etc/kdump.conf
和kdump.conf
手册页中的注释。有关配置转储目标的详情,请参考 RHEL kdump 文档。重要如果您在主磁盘上启用了多路径,转储目标必须是 NFS 或 SSH 服务器,您还需要从
/etc/kdump.conf
配置文件中排除 multipath 模块。启用
kdump
systemd 服务。systemctl enable kdump.service
# systemctl enable kdump.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重启您的系统。
systemctl reboot
# systemctl reboot
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
确保 kdump 已加载了崩溃内核,检查
kdump.service
systemd 服务已成功启动并退出,cat /sys/kernel/kexec_crash_loaded
命令输出值1
。
7.4.1.2. 在第 1 天启用 kdump 复制链接链接已复制到粘贴板!
kdump
服务旨在为每个节点启用调试内核问题。因为启用 kdump 会产生一些成本,且这些成本会随每个启用了 kdump 的额外节点的增加而增加,因此建议只在需要的每个节点中启用 kdump
服务。在每个节点上启用 kdump
服务的潜在成本包括:
- 因为为崩溃内核保留了内存,所以可用 RAM 较少。
- 内核转储内核时节点不可用。
- 用于存储崩溃转储的额外存储空间。
如果您了解启用 kdump
服务所带来的影响,则可以根据具体情况在集群范围内启用 kdump。虽然还不支持特定于机器的机器配置,但您可以在 MachineConfig
对象中使用 systemd
单元作为第 1 天自定义,并在集群中的所有节点上启用 kdump。您可以创建 MachineConfig
对象,并将该对象注入 Ignition 在集群设置过程中使用的清单文件集合中。
如需有关如何使用 Ignition 配置的更多信息和示例,请参阅 Installing
流程
为集群范围配置创建 MachineConfig
对象:
创建一个 Butane 配置文件
99-worker-kdump.bu
,用于配置并启用 kdump:注意您在配置文件中指定的 Butane 版本应与 OpenShift Container Platform 版本匹配,并且始终以
0
结尾。例如:4.16.0
。有关 Butane 的信息,请参阅"使用 Butane 创建机器配置"。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1 2
- 在为 control plane 节点创建
MachineConfig
对象时,将worker
替换为两个位置的master
。 - 3
- 提供内核参数来为崩溃内核保留内存。如果需要,您可以添加其他内核参数。对于
ppc64le
平台,crashkernel
的建议值为crashkernel=2G-4G:384M,4G-16G:512M,16G-64G:1G,64G-128G:2G,128G-:4G
。 - 4
- 如果要从默认更改
/etc/kdump.conf
的内容,请包含此部分并相应地修改inline
子部分。 - 5
- 如果要从默认更改
/etc/sysconfig/kdump
的内容,请包含此部分并相应地修改inline
子部分。 - 6
- 对于
ppc64le
平台,将nr_cpus=1
替换为maxcpus=1
,这在此平台上不被支持。
要将转储导出到 NFS 目标,必须明确在配置文件中添加一些内核模块:
/etc/kdump.conf
文件示例
nfs server.example.com:/export/cores core_collector makedumpfile -l --message-level 7 -d 31 extra_bins /sbin/mount.nfs extra_modules nfs nfsv3 nfs_layout_nfsv41_files blocklayoutdriver nfs_layout_flexfiles nfs_layout_nfsv41_files
nfs server.example.com:/export/cores
core_collector makedumpfile -l --message-level 7 -d 31
extra_bins /sbin/mount.nfs
extra_modules nfs nfsv3 nfs_layout_nfsv41_files blocklayoutdriver nfs_layout_flexfiles nfs_layout_nfsv41_files
使用 Butane 生成机器配置 YAML 文件
99-worker-kdump.yaml
,包含要提供给节点的配置:butane 99-worker-kdump.bu -o 99-worker-kdump.yaml
$ butane 99-worker-kdump.bu -o 99-worker-kdump.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在集群设置过程中将 YAML 文件放在
<installation_directory>/manifests/
目录中。您还可以使用 YAML 文件在集群设置后创建此MachineConfig
对象:oc create -f 99-worker-kdump.yaml
$ oc create -f 99-worker-kdump.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.4.1.3. 测试 kdump 配置 复制链接链接已复制到粘贴板!
有关 kdump 的信息,请参阅 RHEL 文档中的测试 kdump 配置部分。
7.4.1.4. 分析内核转储 复制链接链接已复制到粘贴板!
有关 kdump 的信息,请参阅 RHEL 文档中的 分析内核转储 部分。
建议您在单独的 RHEL 系统中执行 vmcore 分析。
其他资源
- 在 RHEL 中设置 kdump
- Linux 内核文档 kdump
-
kdump.conf(5)-
/etc/kdump.conf
配置文件的说明书页,包含可用选项的完整文档 -
kexec(8)-
kexec
软件包的 man page - 有关 kexec 和 kdump 的红帽知识库文章
7.4.2. 调试 Ignition 失败 复制链接链接已复制到粘贴板!
如果无法置备机器,Ignition 会失败,RHCOS 将引导至紧急 shell。使用以下步骤获取调试信息。
流程
运行以下命令显示哪个服务单元失败:
systemctl --failed
$ systemctl --failed
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:在单个服务单元上运行以下命令查找更多信息:
journalctl -u <unit>.service
$ journalctl -u <unit>.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow