7.4. 操作系统问题故障排除
OpenShift Container Platform 在 RHCOS 上运行。您可以按照以下步骤排除与操作系统相关的问题。
7.4.1. 检查内核崩溃
kdump
服务包括在 kexec-tools
中,它提供了一个崩溃转储机制。您可以使用这个服务保存系统内存内容,以便稍后进行分析。
kdump
服务只是一个技术预览功能。技术预览功能不被红帽产品服务等级协议 (SLA) 支持,且可能在功能方面有缺陷。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的详情,请参阅 https://access.redhat.com/support/offerings/techpreview/。
/ module included in the following assemblies:
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 和
手册页中的注释。有关配置转储目标的详情,请参阅 RHELkdump.conf
kdump
文档。启用
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
对象:
可选:如果您从默认更改
/etc/kdump.conf
配置,您可以将其编码为 base64 格式,使其内容包含在MachineConfig
对象中:$ cat << EOF | base64 path /var/crash core_collector makedumpfile -l --message-level 7 -d 31 EOF
可选:创建
/etc/sysconfig/kdump
文件的内容,如果从默认更改配置,则将其编码为 base64:$ cat << EOF | base64 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" EOF
创建
MachineConfig
对象文件:$ cat << EOF > ./99-master-kdump-configuration.yaml apiVersion: machineconfiguration.openshift.io/v1 kind: MachineConfig metadata: labels: machineconfiguration.openshift.io/role: master 1 name: 99-master-kdump-configuration spec: kernelArguments: - 'crashkernel=256M' 2 config: ignition: version: 3.2.0 storage: files: - contents: source: data:text/plain;charset=utf-8;base64,ICAgIHBhdGggL3Zhci9jcmFzaAogICAgY2... 3 mode: 420 overwrite: true path: /etc/kdump.conf - contents: source: data:text/plain;charset=utf-8;base64,S0RVTVBfQ09NTUFORExJTkVfUkVNT1ZFPS... 4 mode: 420 overwrite: true path: /etc/sysconfig/kdump systemd: units: - enabled: true name: kdump.service EOF
在集群设置过程中将 YAML 文件放入清单中。您还可以使用 YAML 文件在集群设置后创建此
MachineConfig
对象:$ oc create -f ./99-master-kdump-configuration.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
的说明书页 -
有关
kexec
和kdump
的红帽知识库文章。