Deployment 滚动更新的时候,老的 Pod 停止有事需要非常长时间甚至停不下来有什么可能?

2021-03-05 21:32:40 +08:00
 zhoudaiyu

K8s 1.13 ,deployment 更新,新 Pod 就绪已经 10 分钟了,老的 Pod 还没有被杀死,状态是卡在 Terminating,container 已经停止了,这是 Pod 也没有报错,时候过几分钟 Pod 就被杀死了,有时候还是卡住,这时只能加上 graceful-period=0 和 force 两个参数强制杀死 Pod,我们设置的 gracefulPeriodSecond 是 20s,也就是说发起杀 container 的信号后 20s 即便没有停,Pod 也应该自动被杀死了才对。由于这种问题是偶发的,我们也不太好查,也不知道去哪查。大家有啥思路吗?

1963 次点击
所在节点    Kubernetes
9 条回复
AnyISalIn
2021-03-05 22:05:44 +08:00
可以尝试看看 Terminating 状态中的 Pod 的 meta.finalizers 字段的内容和所在宿主机的 kubelet 日志排查下
zhoudaiyu
2021-03-05 22:19:16 +08:00
@AnyISalIn 老哥,我们还真看了 kubelet 的日志了,没发现啥线索,现在想的是能不能把 termination-log 给它挂载出来做持久化,这样我们就可以看到日志了,兴许能发现什么
zhoudaiyu
2021-03-05 22:28:00 +08:00
@AnyISalIn 你说的 finalizer 就是 Pod 的析构器吧,我记得有三种,但是我们的 deployment 都是用模板统一生成的,不应该有不同的析构器,而且卡主的 Deployment 也是随机的,没有什么规律可循
AnyISalIn
2021-03-05 22:46:32 +08:00
可以尝试一下在 Pod 运行的时候尝试去宿主机直接 docker restart <container>,看下容器是否能够正常重启,Docker 的版本是多少啊 @zhoudaiyu 可以加个微信探讨一下 YW55aXNhbGlu
zhoudaiyu
2021-03-06 06:59:07 +08:00
@AnyISalIn 加了兄弟,同意一下吧
Judoon
2021-03-06 10:54:13 +08:00
我遇到这个问题的时候,最后发现基本是主机导致的,load 过高,io 过高之类的。
你说 deployment 是随机的,那有没有关注过卡在 terminating 状态的 pod 是不是都出现在同一台主机上。
或者看一下卡住时,主机的监控
zhoudaiyu
2021-03-06 11:00:03 +08:00
@Judoon 有道理,我想办法加一些监控,因为这是测试集群我们基本没啥监控
julyclyde
2021-03-07 14:06:02 +08:00
我猜你在容器里运行了 systemd
zhoudaiyu
2021-03-07 16:05:13 +08:00
@julyclyde #8 容器特别干净 就一个 tomcat

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/758932

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX