K8s 1.13 ,deployment 更新,新 Pod 就绪已经 10 分钟了,老的 Pod 还没有被杀死,状态是卡在 Terminating,container 已经停止了,这是 Pod 也没有报错,时候过几分钟 Pod 就被杀死了,有时候还是卡住,这时只能加上 graceful-period=0 和 force 两个参数强制杀死 Pod,我们设置的 gracefulPeriodSecond 是 20s,也就是说发起杀 container 的信号后 20s 即便没有停,Pod 也应该自动被杀死了才对。由于这种问题是偶发的,我们也不太好查,也不知道去哪查。大家有啥思路吗?
1
AnyISalIn 2021-03-05 22:05:44 +08:00
可以尝试看看 Terminating 状态中的 Pod 的 meta.finalizers 字段的内容和所在宿主机的 kubelet 日志排查下
|
2
zhoudaiyu OP @AnyISalIn 老哥,我们还真看了 kubelet 的日志了,没发现啥线索,现在想的是能不能把 termination-log 给它挂载出来做持久化,这样我们就可以看到日志了,兴许能发现什么
|
3
zhoudaiyu OP @AnyISalIn 你说的 finalizer 就是 Pod 的析构器吧,我记得有三种,但是我们的 deployment 都是用模板统一生成的,不应该有不同的析构器,而且卡主的 Deployment 也是随机的,没有什么规律可循
|
4
AnyISalIn 2021-03-05 22:46:32 +08:00
可以尝试一下在 Pod 运行的时候尝试去宿主机直接 docker restart <container>,看下容器是否能够正常重启,Docker 的版本是多少啊 @zhoudaiyu 可以加个微信探讨一下 YW55aXNhbGlu
|
6
Judoon 2021-03-06 10:54:13 +08:00
我遇到这个问题的时候,最后发现基本是主机导致的,load 过高,io 过高之类的。
你说 deployment 是随机的,那有没有关注过卡在 terminating 状态的 pod 是不是都出现在同一台主机上。 或者看一下卡住时,主机的监控 |
8
julyclyde 2021-03-07 14:06:02 +08:00
我猜你在容器里运行了 systemd
|