海外新加坡有一套aws的 eks集群,很小的规模 托管的 三节点(172-31-16-189节点为最近才加的,忽略):
[root@ip-172-31-10-1 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
ip-172-31-16-189.ap-southeast-1.compute.internal Ready <none> 44h v1.23.9-eks-ba74326
ip-172-31-17-92.ap-southeast-1.compute.internal Ready <none> 110d v1.23.9-eks-ba74326
ip-172-31-3-165.ap-southeast-1.compute.internal Ready <none> 111d v1.23.9-eks-ba74326
ip-172-31-32-5.ap-southeast-1.compute.internal Ready <none> 111d v1.23.9-eks-ba74326
事情经过是这样的12月28日更新镜像,172-31-17-92节点出现了一次镜像ImagePullBackOff,由于我镜像仓库位于国内我当时怀疑是网络问题,将镜像修改tag 上传到了dockerhub仓库,but 在宿主机操作docker pull 上传到dockerhub的镜像依然是pull不动,索性 restart了一下docker and kubelet 重新下载成功了......祸根就从这里埋下了。春节放假又出现了两次异常。后面找aws的小伙伴帮忙一起看了一下复盘了一下。这里记录一下!
kubectl get pods -n kube-system
kubectl describe pods aws-node-zx4sb -n kube-system
重点关注词:
Last State: Terminated
Reason: Error
Exit Code: 137
也顺便看了一些kube-proxy,日志有一下报错:
service log of the node: Failed to ensure chain exists" err="error creating chain \"KUBE-EXTERNAL-SERVICES\": fork/exec /usr/sbin /iptables: resource temporarily unavailable: " table=filter chain=KUBE-EXTERNAL-SERVICES
traefik ebs-csi-node组件不断重启,不能正常运行,拿这两个组件尝试了一下 delete 异常节点上的traefik ebs-csi-node组件,等待pod重新running后再无异常
这里的重点关注词:
resource temporarily unavailable
注: aws-node 并未手动杀死
journalctl |grep kubelet
肉眼扫了一眼一些异常1月21日的报错日志:
failed to create new OS thread (have 6 already; errno=11)\nruntime: may need to increase max user processes (ulimit -u)
找到这个关键词max user processes
执行了一下ulimit -a
max user processes (-u) unlimited
unlimited是指不限制用户可以使用的资源, 但这个设置对系统可打开的最大文件数(max open files)和各个用户可同时运行的最大进程数(max user processes)无效
参照谷歌搜索
The maximum user processes (nproc) limit on Linux counts the number of threads within all processes that can exist for a given user. The default value of nproc is 1024 on some versions of Linux, which is generally an insufficient number of threads for all processes
那默认值是1024.......,后之后觉查一下进程数:
ps ux|wc -l
当前是400多个,扫一遍程序,参照https://aws.amazon.com/cn/premiumsupport/knowledge-center/eks-failed-create-pod-sandbox/:
ps ux | awk '{if($8=="Z") print}'
ps ux | awk '{if($8=="Z") print}'|wc -l
what 才更新了几天的程序有两个多个僵尸进程?扫了一眼:一个截图的game-screenshot 的nodejs程序造成的.....之前为什么没有......11月份他们改了程序方式....总算找到了罪魁祸首,僵尸进程没有处理....长时间运行是会出现更多的僵尸进程....那国内为什么没有出现过这个问题呢?带着疑惑看了一眼我的阿里亚ack集群:
ps ux | awk '{if($8=="Z") print}'|wc -l
有500多个僵尸进程....但是确实没有出现过这样的问题,看一眼ulimit -a
顺便扫一眼站长素材网TKE
注:机型配置不一样,参数会有所区别,但是max user processed这个参数国内云商确实优化了.....先忽略1024的那么小的配置....找到写程序的小伙伴,连夜让他把代码改了......
自己搭建集群好歹也记得把这些limit设置了.....