本文最后更新于134 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com
docker-sock连接过多,超过docker本身负载能力
1、起因
现场实施人员反馈拉不到镜像,无法更新,登录到节点后发现镜像可以拉取,describe发现已经调度到node2上,但是一直处于containercread的状态,也无日志。
2、解决思路
先排查节点资源问题,top,uptime,free -mh,df -h 发现节点资源使用情况并不高,节点资源限制,pod数量限制也未达到限制,查询docker本身日志无明显异常,查看kubelet日志发现有pod一直移除不掉,--force 删除一直处于移除状态的pod,节点依旧无法调度。
查看服务器发现有僵尸进程,与开发和现场实施人员交流确定可以重启僵尸进程的pod,kill之后依旧未恢复正常。
杀僵尸:
ps -e -o stat,ppid,pid,cmd | egrep '^[Zz]'
docker ps|grep xxx
ps awx | grep containerd-shim | grep xx
# kill the containerd-shim pid
kill xx
查询相关文档,可能是docker,sock连接过多。
lsof /var/run/docker.sock |wc -l
/var/run/docker.sock,挂载到容器内的/var/run/docker.sock。简单地说,它是Docker守护进程(Docker daemon)默认监听的Unix域套接字(Unix domain socket),容器中的进程可以通过它与Docker守护进程进行通信。
node2有7000+,其余节点只有十个以内。docker承载不住,夯住,于是决定重启docker,与医院确认处理时间,开始处理
3、处理方式:
1.临时放开max_replies_per_connection限制
vim /usr/share/dbus-1/session.conf
max_replies_per_connection = 100000
systmectl restart dbus
2.启动docker kubelet
systemctl restart docker
systemctl restart kubelet
3.恢复max_replies_per_connection限制
vim /usr/share/dbus-1/session.conf
max_replies_per_connection = 50000
systmectl restart dbus