在Kubernetes中,当ConfigMap更新时如何重新启动Pods?

242

如何在配置映射更改/更新时自动重新启动与部署关联的 Kubernetes Pod 及其相关 Pod?


我知道已经谈论了在配置映射更改时自动重新启动Pod的能力,但据我所知,这在Kubernetes 1.2中尚不可用。

因此,我想要做的(我认为)是对消耗该配置映射的Pod相关的部署资源进行“滚动重启”。是否有可能强制在Kubernetes中滚动重启部署而不更改实际模板中的任何内容?目前这是最好的方法还是存在更好的选择?


5
请为我执行以下命令:$ kubectl set env deployment my deployment --env="LAST_RESTART=$(date)" --namespace ... - maciek
13个回答

0

将不可变属性添加到配置映射中可以完全避免问题。使用配置哈希有助于无缝滚动更新,但无法帮助回滚。您可以查看这个开源项目 - “Configurator” - https://github.com/gopaddle-io/configurator.git。'Configurator'通过以下方式使用自定义资源:

  1. Configurator将部署生命周期与configMap绑定。当configMap更新时,为该configMap创建一个新版本。所有附加到configMap的部署都会进行滚动更新,并使用最新的configMap版本。

  2. 当您将部署回滚到旧版本时,它会反弹到执行滚动更新之前的configMap版本。

这样,您就可以维护配置映射的版本,并促进部署和配置映射的滚动和回滚。


0
可能不是kubernetes风格,但对我来说很有效-在容器内部的单独线程中使用inotifywait来监视confimap目录:
inotifywait --recursive --event attrib /opt/config

-2

另一种方法是将其粘贴到部署的命令部分中:

...
command: [ "echo", "
  option = value\n
  other_option = value\n
" ]
...

或者,为了使其更像ConfigMap,可以使用附加的部署,仅在command部分中托管该配置,并对其执行kubectl create,同时向其名称添加唯一的“版本”(例如计算内容的哈希值),并修改所有使用该配置的部署:
...
command: [ "/usr/sbin/kubectl-apply-config.sh", "
  option = value\n
  other_option = value\n
" ]
...

如果最终成功了,我可能会发布kubectl-apply-config.sh

(不要这样做,看起来太糟糕了)


OP 想知道在 configmap 更新后如何更新 pods。这只是一种将数据传递到 pod 的替代方法。更重要的是,这种技术并不被推荐。最好的方法是在 configmap 中跟踪配置,而不是通过命令传递值。 - phbits
@phbits 好的,如果在半个十年之后确实变得可能了,那太好了。否则,请选择你的解决方法。 - Velkan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接