7.4. 操作系统问题故障排除
OpenShift Container Platform 在 RHCOS 上运行。您可以按照以下步骤排除与操作系统相关的问题。
7.4.1. 检查内核崩溃
kdump
服务包括在 kexec-tools
中,它提供了一个崩溃转储机制。您可以使用这个服务保存系统内存内容,以便稍后进行分析。
kdump
服务只是一个技术预览功能。技术预览功能不被红帽产品服务等级协议 (SLA) 支持,且可能在功能方面有缺陷。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的详情,请参考 https://access.redhat.com/support/offerings/techpreview/。
7.4.1.1. 启用 kdump
RHCOS 附带 kexec-tools
,但需要手动配置才能启用 kdump
。
流程
执行以下步骤在 RHCOS 上启用 kdump
:
要在第一次内核引导的过程中为崩溃内核保留内存,请输入以下命令提供内核参数:
# rpm-ostree kargs --append='crashkernel=256M'
可选: 要通过网络写入崩溃转储,或将其写入其他位置而不是默认的本地
/var/crash
位置,请编辑/etc/kdump.conf
配置文件。注意使用 LUKS 时需要网络转储。
kdump
不支持 LUKS 加密设备的本地崩溃转储。有关配置
kdump
服务的详情,请查看/etc/sysconfig/kdump
、/etc/kdump.conf
和kdump.conf
手册页中的注释。有关配置转储目标的详情,请参阅 RHELkdump
文档。启用
kdump
systemd 服务:# systemctl enable kdump.service
重启系统:
# systemctl reboot
-
确认
kdump
已加载了崩溃内核,检查kdump.service
已成功启动并退出,cat /sys/kernel/kexec_crash_loaded
输出1
。
7.4.1.2. 在第 1 天启用 kdump
kdump
服务旨在为每个节点启用调试内核问题。由于启用了 kdump
会增加成本,且这些成本会与启用了 kdump
的额外节点一起积累,因此建议只在需要的节点中启用 kdump
。在每个节点中启用 kdump
的潜在成本包括:
- 因为为崩溃内核保留了内存,所以可用 RAM 较少。
- 内核转储内核时节点不可用。
- 用于存储崩溃转储的额外存储空间。
-
因为
kdump
服务只是一个 技术预览,所以它并不是生产环境就绪的。
如果您了解启用 kdump
服务所带来的影响,则可以根据具体情况在集群范围内启用 kdump
。虽然当前还不支持特定于具体机器的机器配置,但您可以在第 1 天通过 MachineConfig
对象中的 systemd
单元来执行前面的步骤,并在集群的所有节点上启用 kdump。您可以创建 MachineConfig
对象,并将该对象注入 Ignition 在集群设置过程中使用的清单文件集合中。如需有关如何使用 Ignition 配置的更多信息和示例,请参阅 Installing
流程
为集群范围配置创建 MachineConfig
对象:
创建一个 Butane 配置文件
99-worker-kdump.bu
,用于配置并启用 kdump:variant: openshift version: 4.8.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" KEXEC_ARGS="-s" KDUMP_IMG="vmlinuz" systemd: units: - name: kdump.service enabled: true
使用 Butane 生成机器配置 YAML 文件
99-worker-kdump.yaml
,包含要提供给节点的配置:$ butane 99-worker-kdump.bu -o 99-worker-kdump.yaml
在集群设置过程中将 YAML 文件放入清单中。您还可以使用 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