我有一个 Kubernetes 集群(Docker 和 containerd),我在其中部署了Weave CNI 插件。
在检查主节点进程(ps -aef --forest
)时,我可以看到containerd-shim
运行 weave 插件的进程在它的树中有 3 个进程:
31175 16241 \_ containerd-shim -namespace moby -workdir /var/lib/containerd/io.containerd.runtime.v1.linux/moby/836489.. -address /run/containerd/contai
31199 31175 | \_ /bin/sh /home/weave/launch.sh
31424 31199 | | \_ /home/weave/weaver --port=6783 --datapath=datapath --name=36:e4:33:8
31656 31175 | \_ /home/weave/kube-utils -run-reclaim-daemon -node-name=ubuntu -peer-name=36:e4
我不明白的是从脚本进程(kube-utils
pid 31199)发出的进程(pid 31656)如何是它的兄弟进程而不是子进程?launch.sh
我试图创建一个类似的环境来模拟这种情况,方法是从以下创建一个 docker 映像:
FROM ubuntu:18.04
ADD ./launch.sh /home/temp/
ENTRYPOINT ["/home/temp/launch.sh"]
在我的情况下,与 weavelaunch.sh
的想法相似:
#!/bin/sh
start() {
sleep 2000&
}
start &
sleep 4000
将其部署到集群后,我得到以下进程树:
114944 16241 \_ containerd-shim -namespace moby -workdir /var/lib/containerd/io.containerd.runtime.v1.linux/moby/d9a6904 -address /run/containerd/contai
114972 114944 \_ /bin/sh /home/temp/launch.sh
115002 114972 \_ sleep 4000
115003 114972 \_ sleep 2000
您可以看到这两个进程都是主容器进程的子进程,而不是兄弟进程。
根据上面的编织场景,我希望该sleep 2000
进程将是该进程的兄弟launch.sh
而不是子进程。
知道如何解释上面的编织情况吗?我怎样才能在本地重现这个?或者在什么情况下为容器进程创建了兄弟进程?
谢谢你们。