如何通过 SSH 连接到相关节点以在 Red Hat Enterprise Linux CoreOS 4.x 中生成 sos report?
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
文件,其中的设置可能会覆盖 REGISTRY
、IMAGE
或 TOOLBOX_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