Configmap在kubernetes中的持久化

Persistence of Configmap in kubernetes

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

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

中使用 k8s API 的部署

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

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

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

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

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

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

4) 假设 POD-A 出现故障会对 configmaps 有任何影响吗?它们与 pod 的生命周期有任何关联吗?

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

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

1) I think you should not use it in this way.

2) ConfigMaps are kubernetes resources. You can update them.

3) If etcd backups to disk are enabled.

4) No. A pod's lifecycle should not affect configmaps, unless pod mutates(deletes) the configmap.

5) If the cluster itself goes down. Assuming etcd is also running on the same cluster, etcd will not be available till the cluster comes back up again. ETCD has an option to persist backups to disk. If this is enabled, when the etcd comes back up, it will have restored the values that were on the backup. So it should be available once the cluster & etcd is up.

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

所以我觉得这个系统会太复杂。

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