nginxのコンテナに入ってみる

続いて、出てきたnamespaceのIDとlsnsの結果をひもづけていきましょう。userのnamespaceは分離されておらず、networkとuts、ipcなどの通信関連もpauseというプロセスのnamespaceのものを使っていることが分かります。


# lsns | grep 4026531835
4026531835 cgroup    209     1 root  /sbin/init
# lsns | grep 4026532474
4026532474 ipc         3 14509 65535 /pause
# lsns | grep 4026532476
4026532476 mnt         2 14611 root  nginx: master process nginx -g daemon off;
# lsns | grep 4026532402
4026532402 net         3 14509 65535 /pause
# lsns | grep 4026532477
4026532477 pid         2 14611 root  nginx: master process nginx -g daemon off;
# lsns | grep 4026531837
4026531837 user      209     1 root  /sbin/init
# lsns | grep 4026532473
4026532473 uts         3 14509 65535 /pause

ps auxfでプロセスを確認してみます。containerdからcontainerd-shimが立ち上がり、そこからpauseとnginxのプロセスが起動していることが分かります。pauseは複数のコンテナを同じPodにまとめて同じOS上で動いているように見せるために存在しているコンテナです。


root      2413  2.1  2.3 2215532 94044 ?       Ssl  Nov25 152:52 /usr/bin/containerd
root     14484  0.0  0.2 709076 10304 ?        Sl   01:32   0:00  _ containerd-shim -namespace k8s.io 
-workdir /var/lib/containerd/io.containerd.runtime.v1.linux/k8s.io/652192845922a51436085d74c89c7d21f64feb62568432681f845633a174eb31 
-address /run/containerd/containerd.sock -containerd-binary /usr/bin/containerd
65535    14509  0.0  0.0    964     4 ?        Ss   01:32   0:00  |   _ /pause
root     14590  0.0  0.1 708820  7356 ?        Sl   01:32   0:00 _ containerd-shim -namespace k8s.io 
-workdir /var/lib/containerd/io.containerd.runtime.v1.linux/k8s.io/f66dd3c1e442f0da10aaf0d6954fcafa4d3533da5f3bb597ca7003c66bbb437d 
-address /run/containerd/containerd.sock -containerd-binary /usr/bin/containerd
root     14611  0.0  0.1  32628  5188 ?        Ss   01:32   0:00       _ nginx: master process nginx -g daemon off;
101      14656  0.0  0.0  33076  2344 ?        S    01:32   0:00         _ nginx: worker process

nginxのコンテナに入ってみましょう。nginxのコンテナには最低限のものしか含まれていないので、psコマンドを使うこともできません。


# nsenter --target 14611 --all bash
# ps
-sh: 2: ps: not found
# cat /etc/debian_version
9.8

今度はnsenterでホスト側のnamespaceに入り、そこからnginxコンテナのrootfsの中をのぞいてみます。mountの結果を事前に確認したnginxコンテナのIDでgrepすると、overlay on ~が表示されます。

ここがnginxコンテナのrootfsです。cdで移動して、cat ./etc/debian_versionを叩いてみると、さきほどと同じ9.8が表示されました。


# nsenter --target 1 --all bash
# mount | grep f66dd3c1e442f0da10aaf0d6954fcafa4d3533da5f3bb597ca7003c66bbb437d
overlay on /run/containerd/io.containerd.runtime.v1.linux/k8s.io/f66dd3c1e442f0da10aaf0d6954fcafa4d3533da5f3bb597ca7003c66bbb437d/rootfs type overlay (rw,relatime,lowerdir=/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/522/fs:/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/521/fs:/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/518/fs,upperdir=/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/552/fs,workdir=/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/552/work,xino=off)
# cd /run/containerd/io.containerd.runtime.v1.linux/k8s.io/f66dd3c1e442f0da10aaf0d6954fcafa4d3533da5f3bb597ca7003c66bbb437d/rootfs
# cat ./etc/debian_version
9.8