在 K8s 中,如果我部署了一个包含三个副本的 Statefulset,那么如何在不丢失相关持久卷上的数据的情况下更新配置映射?这方面有一些奇怪的限制,包括:
- 所有节点都需要具有相同的配置(它与 TLS 相关,并且需要推送到所有三个节点,然后它们才能相互通信)。
- 应用程序需要有三个副本才能达到法定人数并通过标准探测报告其自身在线。
- 当这种情况发生时,我不介意几分钟的停机时间。
简单rollout restart
操作失败,因为更新后的配置图使一个节点与其他节点不兼容。这会阻止继续部署,因为所有节点都需要同步重新启动。
通过删除 pod 强制重启在同步刷新配置方面是可行的,但似乎会删除持久卷(这似乎也很奇怪,这是标准行为,还是我的应用程序在我背后做的事情?)
非常感谢您的建议 - 专业人士是如何做到的?我觉得我一定是误解了这个问题。
答案1
解决方案可以是切换delete-claim
标志(使用时persistent-claim
)。此更改会影响集群控制器在删除 ConfigMap 时的行为方式以及是否必须删除 PVC。更新 ConfigMap 时,只需 delete-claim
在 PVC 定义中设置 = false。
看一看:配置映射更新。