【问题标题】:Persistence of Configmap in kubernetesKubernetes 中 Configmap 的持久化
【发布时间】:2019-08-24 17:24:48
【问题描述】:

我有一个 Kubernetes pod(我们称之为 POD-A),我希望它使用某个配置文件来使用 k8s API 执行一些操作。配置文件将是 YAML 或 JSON,将由 pod 内的应用程序解析。

配置文件由云上的应​​用服务器托管,可以根据触发器拉取最新版本。配置文件包含 k8s 集群中所有部署的配置详细信息,将用于在 POD-A 中使用 k8s API 更新部署。

现在我想的是将此配置文件保存在配置映射中,每次拉取新配置文件时,使用 k8s API 的 pod 都会创建一个新配置映射。

我想要做的是用某个标志(一个键和一个值)更新以前的配置映射,这基本上可以帮助应用程序知道哪个是当前的部署版本。因此,假设我有一个正在运行的 k8s 集群,其中包含多个 pod,那里有一个配置映射,其中包含针对这些 pod 的所有配置详细信息(映像版本、命名空间等)和一个标志,通知这是当前部署和POD-A 中的应用程序将通过加载配置映射来知道这一点。现在,当拉取一个新的配置文件时,会创建一个新的配置映射,并且当前部署的标志对于前一个配置映射设置为 false,对于最新创建的配置映射设置为 true。然后该配置映射用于更新集群中的所有 pod。

我知道有很多细节,但我不得不解释它们以提出以下问题:

1) configmaps 可以用于此目的吗?

2) 我可以更新configmaps 还是必须完全重写它们?我正在考虑在configmap 中写一个文件,因为这样会更简单。

3) 我知道configmaps 存储在 etcd 中,但它们是保存在磁盘上还是保存在内存中?

4) 假设 POD-A 宕机了,对configmaps 有影响吗?它们是否与 pod 的生命周期有任何关联?

5) 如果 k8s 集群本身出现故障,`configmaps 会发生什么?由于它们在 etcd 中,如果它们被持久化,那么它们会再次可用吗?

注意:还有一个limit on the size of configmaps,所以我必须记住这一点。虽然我猜 1MB 的大小足以保存配置文件,因为它通常只有几个字节。

【问题讨论】:

  • 我的理解清楚吗。您想根据配置映射中的值变化动态地使用配置映射来部署和更新在 pod 中运行的应用程序?
  • 是的,但更新将由用户从应用程序触发

标签: kubernetes configmap


【解决方案1】:

1) 我认为你不应该这样使用它。

2) ConfigMaps 是 Kubernetes 资源。您可以更新它们。

3) 如果启用了 etcd 到磁盘的备份。

4) 不会。Pod 的生命周期不应影响 configmap,除非 pod 改变(删除)configmap。

5) 如果集群本身出现故障。假设 etcd 也在同一个集群上运行,在集群再次恢复之前,etcd 将不可用。 ETCD 可以选择将备份保存到磁盘。如果启用此功能,当 etcd 恢复时,它将恢复备份中的值。因此,一旦集群和 etcd 启动,它就应该可用。

有多种方法可以将 configMap 挂载到 pod 中,例如环境变量、文件等。 如果您更改配置映射,则不会在 configMaps 上将值更新为文件。只有 configMaps 作为环境变量的值是动态更新的。现在在 pod 中运行的进程应该会检测到 env 变量已更新并采取一些措施。

所以我认为系统会过于复杂。

而是触发一个部署,该部署会杀死旧的 pod 并启动一个使用更新后的 configMaps 的新 pod。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-28
    • 2021-03-10
    • 1970-01-01
    • 1970-01-01
    • 2020-12-08
    • 2020-06-02
    • 2019-11-26
    相关资源
    最近更新 更多