搜索

7.4. 操作系统问题故障排除

download PDF

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

  1. 要在第一次内核引导的过程中为崩溃内核保留内存,请输入以下命令提供内核参数:

    # rpm-ostree kargs --append='crashkernel=256M'
  2. 可选: 要通过网络写入崩溃转储,或将其写入其他位置而不是默认的本地 /var/crash 位置,请编辑 /etc/kdump.conf 配置文件。

    注意

    使用 LUKS 时需要网络转储。kdump 不支持 LUKS 加密设备的本地崩溃转储。

    有关配置 kdump 服务的详情,请查看 /etc/sysconfig/kdump/etc/kdump.conf 和 kdump.conf 手册页中的注释。有关配置转储目标的详情,请参阅 RHEL kdump 文档

  3. 启用 kdump systemd 服务:

    # systemctl enable kdump.service
  4. 重启您的系统:

    # systemctl reboot
  5. 确认 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 Installation configuration 部分中的"自定义节点"。

流程

为集群范围配置创建 MachineConfig 对象:

  1. 可选:如果您从默认更改 /etc/kdump.conf 配置,您可以将其编码为 base64 格式,使其内容包含在 MachineConfig 对象中:

    $ cat << EOF | base64
    path /var/crash
    core_collector makedumpfile -l --message-level 7 -d 31
    EOF
  2. 可选:创建 /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
  3. 创建 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
    1
    master 替换为 worker,以创建 worker 角色的 MachineConfig 对象。
    2
    提供内核参数来为崩溃内核保留内存。如果需要,您可以添加其他内核参数。
    3
    将 base64 内容替换为您为 /etc/kdump.conf 创建的内容。
    4
    将 base64 内容替换为您为 /etc/sysconfig/kdump 创建的内容。
  4. 在集群设置过程中将 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 分析。

其他资源
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.