1

我有一个 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中,并且如果它们被持久化,那么它们会再次可用吗?

注意:configmap 的大小也有限制,所以我必须牢记这一点。虽然我猜测 1MB 的大小足以保存配置文件,因为它通常只有几个字节。

4

1 回答 1

3

1)我认为你不应该以这种方式使用它。

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

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

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

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

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

所以我认为这个系统会太复杂。

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

于 2019-04-03T12:14:24.633 回答