Translated message

A translation of this page exists in English.

如何通过 SSH 连接到相关节点以在 Red Hat Enterprise Linux CoreOS 4.x 中生成 sos report?

Solution Verified - Updated -

Environment

  • Red Hat OpenShift Container Platform (RHOCP)
    • 4
  • Red Hat Enterprise Linux CoreOS (RHCOS)
  • sosreport

Issue

  • 在 OCP 4 中,如果 oc debug node 无法正常工作,如何在 Red Hat Enterprise Linux CoreOS 中生成 sos report
  • 如何为 Red Hat OpenShift 4 节点生成 sos report
  • 使用 rhel7/support-tools 镜像生成 sos report 失败并显示回溯信息。

    [root@ip-1-1-1-1 ~]# podman run -it registry.access.redhat.com/rhel7/support-tools /usr/bin/bash
    
    bash-4.2# sosreport 
    Traceback (most recent call last):
      File "/usr/sbin/sosreport", line 19, in <module>
        main(sys.argv[1:])
      File "/usr/lib/python2.7/site-packages/sos/sosreport.py", line 1498, in main
        sos = SoSReport(args)
      File "/usr/lib/python2.7/site-packages/sos/sosreport.py", line 360, in __init__
        self.policy = sos.policies.load(sysroot=self.opts.sysroot)
      File "/usr/lib/python2.7/site-packages/sos/policies/__init__.py", line 44, in load
        cache['policy'] = policy(sysroot=sysroot)
      File "/usr/lib/python2.7/site-packages/sos/policies/redhat.py", line 258, in __init__
        super(RHELPolicy, self).__init__(sysroot=sysroot)
      File "/usr/lib/python2.7/site-packages/sos/policies/redhat.py", line 58, in __init__
        sysroot = self._container_init()
      File "/usr/lib/python2.7/site-packages/sos/policies/redhat.py", line 153, in _container_init
        host_tmp_dir = os.path.abspath(self._host_sysroot + self._tmp_dir)
    TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
    

Resolution

根据设计,OpenShift 4.x 节点本身是不可变的,它依赖于 Operator 来应用集群更改。这代表,不建议通过 SSH 直接访问底层节点。如果直接进行了访问,节点还会被标记为 accessed 污点。

备注:因此,在可能的情况下,在 oc 命令行中直接创建一个 debug pod 来生成 sos report。如需更多信息,请参阅在 OCP 4 中如何在不使用 SSH 的情况下在节点中生成 sosreport

使用 SSH 访问生成 sosreport

只有在无法实现在不使用 SSH 的情况下生成 sosreport 时, 才使用 SSH 直接连接到要生成 sosreport 的 OpenShift 4 节点,并成为 root

$ ssh core@[NODE] # ssh with core user to the NODE using ssh key specified in install-config.yaml
[core@node ~]$ sudo -i

备注:在断开连接的环境中,需要镜像 registry.redhat.io/rhel9/support-tools。如果镜像已在节点中可用,在运行 /root/.toolboxrc 之前在节点中创建一个 toolbox 文件(使用 registry 的 URL 作为 REGISTRY 变量的值,将 IMAGE 设置为自定义 registry 中的名称):

[root@node ~]# vi /root/.toolboxrc
REGISTRY=[custom-private-registry.example.com:5000]
IMAGE=rhel9/support-tools

运行 toolbox 命令:

[root@node ~]# toolbox 
Spawning a container 'toolbox-root' with image 'registry.redhat.io/rhel9/support-tools'
Detected RUN label in the container image. Using that as the default...
Command: /proc/self/exe run -it --name toolbox-root --privileged --ipc=host --net=host --pid=host -e HOST=/host -e NAME=toolbox-root -e IMAGE=registry.redhat.io/rhel9/support-tools:latest -v /run:/run -v /var/log:/var/log -v /etc/machine-id:/etc/machine-id -v /etc/localtime:/etc/localtime -v /:/host registry.redhat.io/rhel9/support-tools:latest

运行 sos report 命令(如果生成的 sosreport 太大,删除 --all-logs 参数):

[root@node ~]# sos report -e openshift -k crio.all=on -k crio.logs=on -k podman.all=on -k podman.logs=on --all-logs

备注: 如果任何插件出现超时,或者没有收集到所有信息,则可能需要添加参数 --plugin-timeout=600 以增加插件超时时间。

这将在容器的 /host/var/tmp 目录中生成 sosreport(它被映射到主机的 /var/tmp/)。请参阅 如何提供 RHEL CoreOS OpenShift 4 节点的 sosreport,以便将生成的 sosreport 附加到支持问题单。

创建 sosreport 后,运行 exit 从容器的 bash 会话推出到该节点,然后再从节点退出:

[root@node ~]# exit
[root@node ~]# exit
$ 

Root Cause

toolbox 命令运行 podman container runlabel run registry.redhat.io/rhel9/support-tools,这是 RHEL Atomic 主机中 atomic run registry.redhat.io/rhel7/support-tools 的替代。

Diagnostic Steps

如果 toolbox 没有按预期启动 debug 容器,请检查用户创建的 $HOME/.toolboxrc 文件,其中的设置可能会覆盖 REGISTRYIMAGETOOLBOX_NAME 选项的默认值。在断开连接的环境中,需要创建该文件以引用已保存在本地环境中的镜像。

This solution is part of Red Hat’s fast-track publication program, providing a huge library of solutions that Red Hat engineers have created while supporting our customers. To give you the knowledge you need the instant it becomes available, these articles may be presented in a raw and unedited form.

Comments