首页 > 解决方案 > 如何将字符串从一个 Kubernetes pod 中的供应商应用程序复制到另一个 pod 中的供应商应用程序?

问题描述

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

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

一些想法:

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

这种方法有什么改进,或者我没有考虑过什么完全不同的地方吗?

标签: kubernetesvendor

解决方案


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

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

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


推荐阅读