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'
注意对于
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 文档。启用
kdump
systemd 服务。# systemctl enable kdump.service
重启您的系统。
# systemctl reboot
-
确保 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:variant: openshift version: 4.11.0 metadata: name: 99-worker-kdump 1 labels: machineconfiguration.openshift.io/role: worker 2 openshift: kernel_arguments: 3 - crashkernel=256M storage: files: - path: /etc/kdump.conf 4 mode: 0644 overwrite: true contents: inline: | path /var/crash core_collector makedumpfile -l --message-level 7 -d 31 - path: /etc/sysconfig/kdump 5 mode: 0644 overwrite: true contents: inline: | KDUMP_COMMANDLINE_REMOVE="hugepages hugepagesz slub_debug quiet log_buf_len swiotlb" KDUMP_COMMANDLINE_APPEND="irqpoll nr_cpus=1 reset_devices cgroup_disable=memory mce=off numa=off udev.children-max=2 panic=10 rootflags=nofail acpi_no_memhotplug transparent_hugepage=never nokaslr novmcoredd hest_disable" 6 KEXEC_ARGS="-s" KDUMP_IMG="vmlinuz" systemd: units: - name: kdump.service enabled: true
- 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
,这在此平台上不被支持。
使用 Butane 生成机器配置 YAML 文件
99-worker-kdump.yaml
,包含要提供给节点的配置:$ butane 99-worker-kdump.bu -o 99-worker-kdump.yaml
在集群设置过程中将 YAML 文件放在
<installation_directory>/manifests/
目录中。您还可以使用 YAML 文件在集群设置后创建此MachineConfig
对象:$ oc create -f 99-worker-kdump.yaml
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
可选:在单个服务单元上运行以下命令查找更多信息:
$ journalctl -u <unit>.service