![kube-proxy 未运行,但在“kubectl get pod”的输出中显示为正常运行](https://linux22.com/image/771913/kube-proxy%20%E6%9C%AA%E8%BF%90%E8%A1%8C%EF%BC%8C%E4%BD%86%E5%9C%A8%E2%80%9Ckubectl%20get%20pod%E2%80%9D%E7%9A%84%E8%BE%93%E5%87%BA%E4%B8%AD%E6%98%BE%E7%A4%BA%E4%B8%BA%E6%AD%A3%E5%B8%B8%E8%BF%90%E8%A1%8C.png)
kube-proxy 作为守护进程运行,因此我看到我的 2 个节点集群中有两个 pod:
kube-proxy-4f246 1/1 Running 0 14d
kube-proxy-7hzkf 1/1 Running 2 5m43s
执行 kubectl describe pod kube-proxy-7hzkf -n kube-system 后,我得到了容器的 ID。
kube-proxy:
Container ID: docker://53f81d08adaa9b29b7ac8d985c40d08500e84e1be96732ae7a91744a735df885
然后我检查这个 kube-proxy 正在运行的节点,kube-proxy 是否作为一个进程运行,另外还有一个与该 kube-proxy 实例相关的 containerd 进程:
ubuntu@k8s-2:~$ ps aux|grep 53f81d08adaa9b29b7ac8d985c40d08500e84e1be
root 31328 0.0 0.2 113964 8276 ? Sl 12:21 0:00 /usr/bin/containerd-shim-runc-v2 -namespace moby -id 53f81d08adaa9b29b7ac8d985c40d08500e84e1be96732ae7a91744a735df885 -address /run/containerd/containerd.sock
还:
ubuntu@k8s-2:~$ ps aux|grep kube-proxy
root 31355 0.0 1.0 747380 40520 ? Ssl 12:21 0:00 /usr/local/bin/kube-proxy --config=/var/lib/kube-proxy/config.conf --hostname-override=k8s-2
如果 kube-proxy 进程死亡,则会发生以下情况,Kubernetes 将重新启动失败的 kube-proxy。
kube-system 0s Normal Pulled pod/kube-proxy-7hzkf Container image "k8s.gcr.io/kube-proxy:v1.21.1" already present on machine
kube-system 0s Normal Created pod/kube-proxy-7hzkf Created container kube-proxy
kube-system 0s Normal Started pod/kube-proxy-7hzkf Started container kube-proxy
default 0s Normal Starting node/k8s-2 Starting kube-proxy.
但是,如果 containerd-shim-runc-v2 进程终止,kube-proxy 也会关闭,但什么都不会重新启动,并且节点仍然没有 kube-proxy,尽管 Kubernetes 中一切似乎都正常,但没有出现任何事件,并且 kubectl get pod etc. 和 kubectl describe 的输出显示 kube-proxy 正在运行!
这里发生了什么??
ubuntu@k8s-1:~$ kubectl get pod -n kube-system
NAME READY STATUS RESTARTS AGE
..
..
kube-proxy-4f246 1/1 Running 0 14d
kube-proxy-7hzkf 1/1 Running 3 15m
kube-scheduler-k8s-1 1/1 Running 0 47h
..
ubuntu@k8s-2:~$ ps aux|grep kube-proxy
ubuntu 10879 0.0 0.0 14864 1048 pts/0 S+ 12:36 0:00 grep --color=auto kube-proxy
ubuntu@k8s-2:~$
所以最后一个显示没有 kube-proxy 正在运行!