x86_64
OpenShift Container Platform 运行在 RHCOS 上。您可以按照以下步骤来解决与操作系统相关的故障。
kexec-tools
包中包含的 kdump
服务提供了一种崩溃转储机制。您可以使用此服务保存系统内存的内容以供以后分析。
x86_64
架构支持处于通用可用性 (GA) 状态的 kdump,而其他架构支持处于技术预览 (TP) 状态的 kdump。
下表详细介绍了不同架构的 kdump 支持级别。
架构 | 支持级别 |
---|---|
|
GA |
|
TP |
|
TP |
|
TP |
上表中前三种架构的 Kdump 支持仅为技术预览功能。技术预览功能不受 Red Hat 生产服务级别协议 (SLA) 的支持,并且功能可能不完整。Red Hat 不建议在生产环境中使用它们。这些功能可让您提前访问即将推出的产品功能,从而使客户能够在开发过程中测试功能并提供反馈。 有关 Red Hat 技术预览功能的支持范围的更多信息,请参阅 技术预览功能支持范围。 |
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
手册页。另请参考RHEL kdump文档,以获取有关配置转储目标的更多信息。
如果您的主磁盘启用了多路径功能,则转储目标必须是NFS或SSH服务器,并且您必须从 |
启用kdump
systemd服务。
# systemctl enable kdump.service
重新启动系统。
# systemctl reboot
通过检查kdump.service
systemd服务是否已成功启动并退出,以及命令cat /sys/kernel/kexec_crash_loaded
是否打印值为1
来确保kdump已加载崩溃内核。
kdump
服务旨在按节点启用以调试内核问题。由于启用kdump会产生成本,并且这些成本会随着每个额外启用kdump的节点而累积,因此建议仅在需要时才在每个节点上启用kdump
服务。在每个节点上启用kdump
服务的潜在成本包括:
由于为崩溃内核保留内存而导致可用RAM减少。
内核转储核心时节点不可用。
使用更多存储空间来存储崩溃转储。
如果您了解启用kdump
服务的缺点和权衡,则可以以集群范围的方式启用kdump。虽然尚不支持特定于机器的机器配置,但您可以在MachineConfig
对象中使用systemd
单元作为第一天定制,并在集群中的所有节点上启用kdump。您可以创建一个MachineConfig
对象并将该对象注入到Ignition在集群设置期间使用的清单文件集中。
有关如何使用Ignition配置的更多信息和示例,请参阅《安装→安装配置》部分中的“自定义节点”。 |
创建用于集群范围配置的MachineConfig
对象
创建一个Butane配置文件99-worker-kdump.bu
,用于配置和启用kdump
variant: openshift
version: 4.17.0
metadata:
name: 99-worker-kdump (1)
labels:
machineconfiguration.openshift.io/role: worker (1)
openshift:
kernel_arguments: (2)
- crashkernel=256M
storage:
files:
- path: /etc/kdump.conf (3)
mode: 0644
overwrite: true
contents:
inline: |
path /var/crash
core_collector makedumpfile -l --message-level 7 -d 31
- path: /etc/sysconfig/kdump (4)
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" (5)
KEXEC_ARGS="-s"
KDUMP_IMG="vmlinuz"
systemd:
units:
- name: kdump.service
enabled: true
1 | 为控制平面节点创建MachineConfig 对象时,请将两个位置中的worker 替换为master 。 |
2 | 提供内核参数以保留用于崩溃内核的内存。如有必要,您可以添加其他内核参数。对于ppc64le 平台,crashkernel 的推荐值为crashkernel=2G-4G:384M,4G-16G:512M,16G-64G:1G,64G-128G:2G,128G-:4G 。 |
3 | 如果要更改/etc/kdump.conf 的内容(使其与默认值不同),请包含此部分并相应地修改inline 子部分。 |
4 | 如果要更改/etc/sysconfig/kdump 的内容(使其与默认值不同),请包含此部分并相应地修改inline 子部分。 |
5 | 对于ppc64le 平台,请将nr_cpus=1 替换为maxcpus=1 ,因为该平台不支持nr_cpus=1 。 |
要将转储导出到NFS目标,必须将 /etc/kdump.conf 文件示例
|
使用Butane生成一个机器配置YAML文件99-worker-kdump.yaml
,其中包含要传递给节点的配置。
$ butane 99-worker-kdump.bu -o 99-worker-kdump.yaml
在集群设置期间,将YAML文件放入<安装目录>/manifests/
目录中。您也可以在集群设置之后使用YAML文件创建此MachineConfig
对象。
$ oc create -f 99-worker-kdump.yaml
请参阅RHEL kdump文档中的测试kdump配置部分。
请参阅RHEL kdump文档中的分析核心转储部分。
建议在单独的RHEL系统上执行vmcore分析。 |
kdump.conf(5) — /etc/kdump.conf
配置文件的手册页,其中包含可用选项的完整文档
kexec(8) — kexec
包的手册页
Red Hat知识库文章,关于kexec和kdump