背景
开发机上装了minikube,起了一个docker镜像当minikube的宿主机,在启动了一定量的deployment A之后,deployment A就全挂了(启动1~2个deployment A,没有问题,启动到第三个,就全挂)。然后宿主机卡爆。
查询pod挂的原因
kubectl describe pod
...
Exit Code: 137
Started: Wed, 29 Sep 2021 16:02:30 +0800
Finished: Wed, 29 Sep 2021 16:04:19 +0800
Ready: False
Restart Count: 12
...
看到了其中镜像挂了的返回值是137,此状态码一般是因为 pod 中容器内存达到了它的资源限制(resources.limits),一般是内存溢出(OOM),CPU达到限制只需要不分时间片给程序就可以。因为限制资源是通过 linux 的 cgroup 实现的,所以 cgroup 会将此容器强制杀掉,类似于 kill -9。
但是通过top查看发现cpu和内存都没满,但是内存交换满了(KiB Swap),感觉是因为宿主机没资源了,所以干掉pod中的资源,接着往下查,寻找更多node的信息。
因为minikube是起在docker中的,所以查看一下docker状态
docker stats
94ec0f757f48 banfushen6_elasticsearch_1 1.24% 1.653GiB / 4.657GiB 35.49% 9.15GB / 6.79GB 85.3MB / 38.6