7.4. 操作系统问题故障排除
OpenShift Container Platform 在 RHCOS 上运行。您可以按照以下步骤排除与操作系统相关的问题。
7.4.1. 检查内核崩溃 复制链接链接已复制到粘贴板!
kdump 服务包括在 kexec-tools 软件包中,它提供了一个崩溃转储机制。您可以使用这个服务保存系统内存内容,以便稍后进行分析。
7.4.1.1. 启用 kdump 复制链接链接已复制到粘贴板!
RHCOS 附带 kexec-tools 软件包,但需要手动配置才能启用 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 文档。重要如果您在主磁盘上启用了多路径,转储目标必须是 NFS 或 SSH 服务器,您还需要从
/etc/kdump.conf配置文件中排除 multipath 模块。启用
kdumpsystemd 服务。# systemctl enable kdump.service重启您的系统。
# systemctl reboot-
确保 kdump 已加载了崩溃内核,检查
kdump.servicesystemd 服务已成功启动并退出,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 在集群设置过程中使用的清单文件集合中。
启用 kdump 时,必须考虑特定于架构的内核参数。
对于 ppc64le 平台:
为
crashkernel参数使用以下推荐值:crashkernel=2G-4G:384M,4G-16G:512M,16G-64G:1G,64G-128G:2G,128G-:4G-
在
KDUMP_COMMANDLINE_APPEND设置中,将nr_cpus=1替换为maxcpus=1,因为此平台上不支持nr_cpus参数。确保在 ppc64le 系统上配置 kdump 时应用这些调整。
如需有关如何使用 Ignition 配置的更多信息和示例,请参阅 Installing
流程
创建一个 Butane 配置文件
99-worker-kdump.bu,用于配置并启用 kdump。这会为集群范围的配置创建MachineConfig对象:注意您在配置文件中指定的 Butane 版本应与 OpenShift Container Platform 版本匹配,并且始终以
0结尾。例如,4.21.0。有关 Butane 的信息,请参阅"使用 Butane 创建机器配置"。variant: openshift version: 4.21.0 metadata: name: 99-worker-kdump labels: machineconfiguration.openshift.io/role: worker openshift: kernel_arguments: - crashkernel=256M storage: files: - path: /etc/kdump.conf mode: 0644 overwrite: true contents: inline: | path /var/crash core_collector makedumpfile -l --message-level 7 -d 31 - path: /etc/sysconfig/kdump 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- 其中
-
在为 control plane 节点创建
MachineConfig对象时,将worker替换为两个位置的master。 -
提供内核参数来为崩溃内核保留内存。如果需要,您可以添加其他内核参数。对于
ppc64le平台,crashkernel的建议值为crashkernel=2G-4G:384M,4G-16G:512M,16G-64G:1G,64G-128G:2G,128G-:4G。 -
如果要从默认更改
/etc/kdump.conf的内容,请包含此部分并相应地修改inline子部分。 -
如果要从默认更改
/etc/sysconfig/kdump的内容,请包含此部分并相应地修改inline子部分。 对于
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
-
在为 control plane 节点创建
使用 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 的信息,请参阅 RHEL 文档中的测试 kdump 配置部分。
有关 kdump 的信息,请参阅 RHEL 文档中的 分析内核转储 部分。
建议您在单独的 RHEL 系统中执行 vmcore 分析。