statefulset 的 RollingUpdate 不会重新启动 pods 并且更新 ConfigMaps 的更改不会反映出来

RollingUpdate for stateful set doesn't restart pods and changes from updated ConfigMaps doesnot reflect

我正在使用 Prometheus 和 Prometheus Alertmanager 发送警报。

我已经在 GKE 上设置了 Kubernetes 有状态集 运行。我更新了 Prometheus 和 Prometheus AlertManager 的 ConfigMaps 并为有状态集做了 RollingUpdate,但是 pods 没有重新启动,它似乎仍在使用旧的 ConfigMaps。

我使用了更新 ConfigMaps 的命令

kubectl create configmap prometheus-alertmanager-config --from-file alertmanager.yml -n mynamespace -o yaml --dry-run | kubectl replace -f - 类似地,我也更新了普罗米修斯。

对于 RollingUpdate,我使用了以下命令:

kubectl patch statefulset prometheus-alertmanager -p '{"spec":{"updateStrategy":{"type":"RollingUpdate"}}}' -n mynamespace

另外,当我执行 rollingUpdate 时,它​​显示

statefulset.apps/prometheus-alertmanager patched (no change)

我不知道发生了什么,是不是可以通过RollingUpdate 使stateful set 中的pods 适应更新后的ConfigMaps?或者我在这里遗漏了什么?

必须重新启动 Prometheus pods 才能获取更新的 ConfigMap 或 Secret。

滚动更新不会总是重新启动 pods(仅当更改 pod 的直接配置 属性 时。例如 - 图像标签。)

kubectl v1.15 现在提供了一个 rollout restart 子命令,允许您在 Deployment 中重新启动 Pods - 考虑到您的 surge/unavailability 配置 - 从而让它们获取对引用的 ConfigMap、Secret 或类似的。值得注意的是,您可以将它用于早于 v1.15 的集群,因为它已在客户端中实现。

用法示例:kubectl rollout restart deployment/prometheus 重新启动特定部署。就这么简单!

更多信息 - here