Red Hat Enterprise Linux CoreOS 4.x でノードへの SSH アクセスを使用して sos レポートを生成する方法
Environment
- Red Hat OpenShift Container Platform (RHOCP、OCP)
- 4.x
- Red Hat Enterprise Linux CoreOS (RHCOS)
Issue
* Red Hat Enterprise Linux CoreOS 4.x で sos report
を生成するにはどうすればよいですか?
* Red Hat OpenShift 4.x ノードの 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 クラスターはイミュータブルであり、Operators に依存してクラスターの変更を適用します。つまり、SSH で基礎になるノードに直接アクセスすることは、推奨される手順ではないことを意味します。さらに、ノードは アクセス済み としてテイントされます。
したがって、可能な場合は常に、oc
コマンドラインから直接デバッグ Pod を生成することにより、SSH を使用せずに sos report を生成します。詳細は、How to generate a sosreport within nodes without SSH in OCP 4 を参照してください。
SSH なしで sos report を生成 できない場合にのみ、SSH 経由で sos report が生成される OpenShift Container Platform4.x ノードに接続します。その後、root
で toolbox
コマンドを実行します。
$ ssh core@NODE # ssh with core user using ssh key specified in install-config.yaml
[core@node ~]$ sudo -i
[root@node ~]# toolbox
Spawning a container 'toolbox-root' with image 'registry.redhat.io/rhel8/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/rhel8/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/rhel8/support-tools:latest
注記: 切断された環境では、
registry.redhat.io/rhel8/support-tools
をミラーリングする必要があります。イメージがすでに使用可能な場合は、toolbox
を実行する前に、以下のようにノード内に/root/.toolboxrc
ファイルを作成します。
$ vi /root/.toolboxrc
REGISTRY=private-registry.example.com:5000
IMAGE=rhel8/support-tools
これで、CLI がコンテナー内の新しい bash セッションにアタッチされ、sos report
を実行できるようになります。
[root@node ~]# sos report -k crio.all=on -k crio.logs=on -k podman.all=on -k podman.logs=on
これにより、ホストの /var/tmp/
にマップされるコンテナーの /host/var/tmp
ディレクトリーに sos report が生成されます。
sos report が作成されたら、exit
を実行してコンテナーを終了します。
[root@node ~]# exit
[root@node ~]#
Root Cause
toolbox
コマンドは、podman container runlabel run registry.redhat.io/rhel8/support-tools
を実行します。これは、RHEL Atomic Host の atomic run registry.redhat.io/rhel7/support-tools
を置き換えるものです。
Diagnostic Steps
toolbox
がデバッグコンテナーを想定どおりに起動しない場合は、REGISTRY
、IMAGE
、または TOOLBOX_NAME
オプションのデフォルト値をオーバーライドしている可能性のあるユーザー作成の $HOME/.toolboxrc
を確認してください。
切断された環境では、ミラーリングされたイメージを参照するために、そのファイルを作成する必要があります。
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