如何将字符串从一个 Kubernetes pod 中的供应商应用程序复制到另一个 pod 中的供应商应用程序?

How can I copy a string from a vendor app in one Kubernetes pod to a vendor app in another pod?

我有一组供应商提供的容器,它们协同工作以提供服务,我们称它们为 A、B 和 C - Kubernetes 集群分别运行每个容器中的一个,pods。

理想情况下,我想一次性部署所有这些——这意味着我需要以某种方式在容器 B 中创建一个帐户(通过调用 A),然后将该值放入 C 的环境变量中。

一些想法:

对我来说,唯一可行的解​​决方案是在 C 上放置一个 initContainer,它将向 B(通过 A)查询安全令牌,然后将其写入共享卷。然后我将在容器 C 之上构建以从共享卷中读取,将环境变量设置为容器内部并启动供应商的进程。但是我必须管理用户帐户的秘密。

该方法是否有任何改进,或者我没有考虑过的完全不同的地方?

从容器内部执行 API 操作不是反模式。阻止在 C 上启动进程,直到 initContainer 运行并更新包含令牌的 Secret。不要使用 ConfigMap 作为机密; Secret 对象的存在就是为了这些目的,您可以将 Secret 拉入 PodSpec - 作为环境变量或卷安装 - 与拉动 ConfigMap 的方式相同(有一些小的语法变化)。

我认为您可能 运行 遇到的唯一麻烦是您将处理多个副本,因此您可能希望随机化某些 Secret 名称。在 initContainer 中创建它,在文件系统中传递随机名称,因为 Pods 共享一个文件系统,然后在主容器中使用它并在 env var 或 mount 获取后删除 Secret设置。 SecretsConfigMaps 可以在 Pod 启动后消失,而不影响它们在 Pod.

中的存在

您可能还需要一些清理用户帐户的方法,因为每次副本启动时您实际上都在创建一个新用户,并且没有机会删除它。 CronJob 可能是前进的方向 - 列出符合您的命名约定的用户帐户,然后重新启动部署并删除您在重新启动之前获取的列表中的帐户。这样你就不会在任何活跃的副本上拉扯地毯。