#はじめに
今回はOpenShift(OCP)のノードのデバッグ方法を確認しました。
OpenShift4以降は、各ノードのOSがCoreOSを利用することが推奨になっています。CoreOSはコンテナを動かすために機能を絞ったOSです。そのため、OpenShift4では各ノードに直接ログインして操作することは推奨されていません。(できない?未確認)
#OCPの構成確認
以下のバージョン、クラスタです。
$ oc version
Client Version: 4.5.4
Server Version: 4.5.4
Kubernetes Version: v1.18.3+012b3ec
$ oc get node
NAME STATUS ROLES AGE VERSION
master01 Ready master,worker 168d v1.18.3+012b3ec
master02 Ready master,worker 168d v1.18.3+012b3ec
master03 Ready master,worker 168d v1.18.3+012b3ec
#デバッグ用のコンテナの起動
各ノードに直接ログインせずに、oc debug
コマンドでコンテナを起動します。
$ oc debug node/master01
Starting pod/master01-debug ...
To use host binaries, run `chroot /host`
Pod IP: 192.168.50.10
If you don't see a command prompt, try pressing enter.
sh-4.2#
##コンテナの構成確認
別ターミナルを開いて、このコンテナの構成を確認します。
$ oc get pod
NAME READY STATUS RESTARTS AGE
master01-debug 1/1 Running 0 3m41s
$ oc describe pod master01-debug
Name: master01-debug
Namespace: default
Priority: 0
Node: master01/192.168.50.10
Start Time: Thu, 21 Jan 2021 09:07:36 -0500
Labels: <none>
Annotations: debug.openshift.io/source-container: container-00
debug.openshift.io/source-resource: /v1, Resource=nodes/master01
Status: Running
IP: 192.168.50.10
IPs:
IP: 192.168.50.10
Containers:
container-00:
Container ID: cri-o://1654e12ab1bcc40c9b8b7b6b94ce0c5f73152aff31c384786c1b15d3074e1756
Image: quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:a60f5a4429d512c7bc8e438ba949b54583d16147e23d30aef9aaa836efa76783
Image ID: quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:a60f5a4429d512c7bc8e438ba949b54583d16147e23d30aef9aaa836efa76783
Port: <none>
Host Port: <none>
Command:
/bin/sh
State: Running
Started: Thu, 21 Jan 2021 09:07:37 -0500
Ready: True
Restart Count: 0
Environment: <none>
Mounts:
/host from host (rw)
/var/run/secrets/kubernetes.io/serviceaccount from default-token-p8rss (ro)
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
host:
Type: HostPath (bare host directory volume)
Path: /
HostPathType: Directory
default-token-p8rss:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-p8rss
Optional: false
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s
node.kubernetes.io/unreachable:NoExecute for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Pulled 12s kubelet, master01 Container image "quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:a60f5a4429d512c7bc8e438ba949b54583d16147e23d30aef9aaa836efa76783" already present on machine
Normal Created 12s kubelet, master01 Created container container-00
Normal Started 12s kubelet, master01 Started container container-00
ポイントはVolumesとMountsですね。
HostPathで"/"がコンテナの/hostにマウントされています。
##コンテナ上での操作
コンテナ起動時のメッセージにもありますが、chroot /host
でchrootシェルを起動します。
sh-4.2# chroot /host
sh-4.4# ls -l
total 18
lrwxrwxrwx. 3 root root 7 Jul 14 2020 bin -> usr/bin
drwxr-xr-x. 8 root root 1024 Aug 5 18:22 boot
drwxr-xr-x. 19 root root 3040 Jan 21 12:56 dev
drwxr-xr-x. 89 root root 8192 Jan 21 12:56 etc
lrwxrwxrwx. 3 root root 8 Jul 14 2020 home -> var/home
lrwxrwxrwx. 3 root root 7 Jul 14 2020 lib -> usr/lib
lrwxrwxrwx. 3 root root 9 Jul 14 2020 lib64 -> usr/lib64
lrwxrwxrwx. 3 root root 9 Jul 14 2020 media -> run/media
lrwxrwxrwx. 3 root root 7 Jul 14 2020 mnt -> var/mnt
lrwxrwxrwx. 3 root root 7 Jul 14 2020 opt -> var/opt
lrwxrwxrwx. 3 root root 14 Jul 14 2020 ostree -> sysroot/ostree
dr-xr-xr-x. 414 root root 0 Jan 21 12:56 proc
lrwxrwxrwx. 3 root root 12 Jul 14 2020 root -> var/roothome
drwxr-xr-x. 44 root root 1120 Jan 21 12:56 run
lrwxrwxrwx. 3 root root 8 Jul 14 2020 sbin -> usr/sbin
lrwxrwxrwx. 3 root root 7 Jul 14 2020 srv -> var/srv
dr-xr-xr-x. 13 root root 0 Jan 21 12:56 sys
drwxr-xr-x. 4 root root 66 Jul 14 2020 sysroot
drwxrwxrwt. 8 root root 160 Jan 21 13:59 tmp
drwxr-xr-x. 12 root root 155 Jan 1 1970 usr
drwxr-xr-x. 24 root root 4096 Aug 5 18:22 var
OSのバージョンも確認できます。
sh-4.4# cat /etc/redhat-release
Red Hat Enterprise Linux CoreOS release 4.5
kubeletやcri-oも確認できます。
sh-4.4# systemctl status kubelet
● kubelet.service - MCO environment configuration
Loaded: loaded (/etc/systemd/system/kubelet.service; enabled; vendor preset: enabled)
Drop-In: /etc/systemd/system/kubelet.service.d
└─10-mco-default-env.conf
Active: active (running) since Thu 2021-01-21 12:56:22 UTC; 1h 5min ago
Process: 1491 ExecStartPre=/bin/rm -f /var/lib/kubelet/cpu_manager_state (code=exited, status=0/SUCCESS)
Process: 1489 ExecStartPre=/bin/mkdir --parents /etc/kubernetes/manifests (code=exited, status=0/SUCCESS)
Main PID: 1493 (kubelet)
Tasks: 40 (limit: 102120)
Memory: 616.3M
CPU: 7min 12.504s
CGroup: /system.slice/kubelet.service
└─1493 kubelet --config=/etc/kubernetes/kubelet.conf --bootstrap-kubeconfig=/etc/kubernetes/kubeconf>
sh-4.4# systemctl status cri-o
● crio.service - MCO environment configuration
Loaded: loaded (/usr/lib/systemd/system/crio.service; disabled; vendor preset: disabled)
Drop-In: /etc/systemd/system/crio.service.d
└─10-mco-default-env.conf
Active: active (running) since Thu 2021-01-21 12:56:15 UTC; 1h 6min ago
Docs: https://github.com/cri-o/cri-o
Main PID: 1444 (crio)
Tasks: 26
Memory: 744.5M
CPU: 7min 55.758s
CGroup: /system.slice/crio.service
├─ 1444 /usr/bin/crio --enable-metrics=true --metrics-port=9537
└─258722 [runc]
このデバッグコンテナはログアウトすると削除されます。また、一定時間何も操作しないと知らぬ間にログアウトされています。測ってはいませんが、5分くらいでログアウトされてました。