使用OnDelete更新策略的StatefulSet关闭Pod后仍创建旧版本Pod的问题
问题分析与解答
这是预期行为,并非Bug,核心是混淆了Pod的「重启」和「重建」逻辑,以及OnDelete更新策略的触发条件:
- StatefulSet的
OnDelete更新策略生效条件是:手动删除Pod(通过kubectl delete pod <pod-name>命令),此时Kubernetes才会使用更新后的StatefulSet模板重新创建Pod。 - 执行
db.adminCommand( { shutdown: 1 } )仅会让MongoDB进程退出,Kubernetes检测到容器进程终止后,会按照原Pod的定义重启容器,并不会触发StatefulSet的模板更新逻辑——因为这个Pod的资源对象本身没有被删除,只是容器实例重启了。
正确操作步骤
要让新Pod使用更新后的模板,需在执行MongoDB shutdown之后手动删除对应Pod:
- 对目标MongoDB节点执行
db.adminCommand( { shutdown: 1 } )完成安全关闭 - 执行
kubectl delete pod <pod-name>删除该Pod - Kubernetes会使用更新后的StatefulSet模板重新创建这个Pod
内容的提问来源于stack exchange,提问作者ledex
相关产品推荐
相关产品推荐

