【发布时间】:2019-02-02 10:33:59
【问题描述】:
可以直接修改configMap挂载的文件吗?我们有一个应用程序读取 configMap 类型的配置文件,并且应用程序应该能够编辑该文件,并且如果 configMap 与其他 pod 共享并且当 pod 重新启动时,更改应该保持不变。
如果configMap 不是为了这个,那么我们应该在consul 上传递什么来保存配置?
【问题讨论】:
标签: kubernetes kubernetes-helm
可以直接修改configMap挂载的文件吗?我们有一个应用程序读取 configMap 类型的配置文件,并且应用程序应该能够编辑该文件,并且如果 configMap 与其他 pod 共享并且当 pod 重新启动时,更改应该保持不变。
如果configMap 不是为了这个,那么我们应该在consul 上传递什么来保存配置?
【问题讨论】:
标签: kubernetes kubernetes-helm
是的,配置映射是not intended to be writeable。如果您正在与 configmap 中的文件进行交互,那么您可以将文件放在可写卷和 mount the volume 中。或者,您可以按照您的建议使用 consul 之类的集中配置。鉴于应用程序正在动态写入此数据,您可以将其视为状态而不是配置。然后它可以存储在数据库中。另一种选择可能是分布式缓存 such as redis 或 hazelcast。
【讨论】:
AFAIK 对 ConfigMap 的更改将仅存在于本地内存中。
也就是说,更改对其他 pod 不可见,并且在 pod 重新启动时,更改将丢失。
一种解决方案是使用配置应用程序中的kubectl 二进制文件或kubernetes API 在配置更改后重新创建ConfigMap。
例如kubectl apply -f /path/to/updated/config.yaml
【讨论】:
从 Kubernetes 文档,可以更新看到link
当卷中已经使用的 ConfigMap 被更新时,预计的键最终也会被更新。 Kubelet 在每次定期同步时检查挂载的 ConfigMap 是否是新的。但是,它使用本地基于 ttl 的缓存来获取 ConfigMap 的当前值。这样一来,从 ConfigMap 更新到新的 key 投射到 pod 的总延迟可以达到 kubelet 同步周期 + kubelet 中 ConfigMaps 缓存的 ttl 时间。
【讨论】: