【问题标题】:Consistency guarantees of Kubernetes ConfigMaps?Kubernetes ConfigMaps 的一致性保证?
【发布时间】:2020-05-14 04:29:12
【问题描述】:

试图决定在哪里存储一些关键的分片配置,但我还没有找到足够的关于 Kube ConfigMaps 可靠性的文档来让我放心。

假设我有一个单集群 kube pod 规范,它在 pod 启动时注入一个带有 configmap 条目值的环境变量(使用 configMapKeyRef)。我有许多基于此规范运行的 pod。

  1. kubectl edit configmap 条目并等待操作成功。
  2. 我重新启动 pod。

是否保证这些 pod 可以看到新的 configmap 值? (或者,如果做不到这一点,在重新启动 pod 以确保它们获得新值之前,我需要等待一段时间吗?)

同样,假设在所有 pod 重新启动期间没有任何 configmap 编辑,是否保证所有 pod 都能看到一致的值?

【问题讨论】:

    标签: kubernetes configmap


    【解决方案1】:

    Kubernetes 是一个最终一致性系统。当您想更改值时,创建一个新的 ConfigMaprecommended

    更改集群中实时 configMap 保存的数据被认为是不好的做法。部署无法知道它们引用的 configMap 已更改,因此此类更新无效。

    使用Declarative config management with Kustomize,使用configMapGenerator更容易做到这一点

    更改部署配置的推荐方法是

    1. 使用新名称创建新的 configMap,
    2. 修补部署,修改相应 configMapKeyRef 字段的名称值。

    部署

    当使用 configMapGeneratorDeploymentConfigMap 使用 Kustomize 时,将根据内容生成 ConfigMap 的名称,并且在 Deployment 中对 ConfigMap 的引用将使用生成的名称进行更新,以便触发新的滚动部署

    【讨论】:

    • 谢谢 - 但我没有使用 Kustomize。我承认我需要重新滚动 pod 以让它们获取新配置。我想知道 kubelet 和 configmap 获取之间的基本行为。
    • 最终的一致性,没有办法查出来。
    • 我建议使用 kubectl apply -k <files> 并将您的 文件 保存在 Git 存储库中。
    猜你喜欢
    • 2019-02-02
    • 2018-11-21
    • 2018-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多