pod exec 报错
# kubectl exec -it xxx-pod -n ns bash
bash:fork:Resource temporarily unavailable
排查
网上查了下出现以上错误可能是发生了这两种情况:
1.打开进程数的限制。
2.打开文件数的限制。
# 查看系统ulimit
# ulimit -a
core file size (blocks, -c) unlimited
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 256205
max locked memory (kbytes, -l) 65536
max memory size (kbytes, -m) unlimited
open files (-n) 1000000
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 256205
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
# 统计当前线程数
pstree -p | wc -l
但是k8s宿主机的宿主机的limits都已经调大过了,并且线程数也没有超过宿主机的limits,网上继续查找。。
# 打印出pod的uid
kubectl get pods -n xxxx -o custom-columns=NodeName:.spec.nodeName,PodName:.metadata.name,PodUID:.metadata.uid
# 过滤pod uid
cd /sys/fs/cgroup/pids/kubepods/
ls besteffort | grep c55151da
ls besteffort/ | grep c55151da
podc55151da-1708-4c96-b0a2-0469269e43f4
cat besteffort/podc55151da-1708-4c96-b0a2-0469269e43f4/pids.current
10000
cat besteffort/podc55151da-1708-4c96-b0a2-0469269e43f4/pids.max
10000
容器的线程数都已经达到1w,而弹性云默认限制容器的线程数上限就是1w,设定该上限的原因,也是为了避免单容器线程泄漏而耗尽宿主机的线程资源。
问题的原因已定位,找研发继续排查线程增多的问题。。