docker - InitContainer 从 Kubernetes 中的容器镜像中使用 config.template

标签 docker containers kubernetes

摘要:
我希望能够在 中获取 config.template 文件初始化容器 来自 容器 .

现有状态:
有模板配置文件,很少更改并包含 占位符 ,存储在 的图像中容器 .
当我们在 kubernetes 中创建容器时,镜像中也存储了一个脚本,该脚本运行并用真实值替换所有 PlaceHolders,然后启动服务。

所需状态:
拥有一个从 构建的 Init-Container通用 带有通用代码的图像只需要获取模板文件的目录(作为目录数组)作为参数,当它运行时,它会从容器的图像中获取所有模板文件(抛出 ),替换PlaceHolders 具有实际值(value),并在与容器共享的卷中创建最终配置文件。
这样,Init-Container 会做准备,当它完成后,Container 需要立即使用准备好的配置文件启动。
此外,Init-Container 的同一个镜像也可以在带有其他容器的 pod 中使用。

问题:
首先启动 Init-Container,映射到 Container 镜像并应该包含 config.template 文件的卷是 还是空的当 Init-Container 运行时。

我的问题:
- 在容器运行之前,是否有一种简单而好的方法可以从 Init-Container 的容器镜像中获取这些 config.template 文件?
- 这个问题是否有更好的解决方案来获得相同或相似的结果?

最佳答案

我认为没有办法将 pod 中容器中的文件访问到 init-containers . volume在您的 init-container 之间共享并且 pod 的容器是空的,因为 pod 的容器是 not started until all init-containers successfully exit (退出代码 0 )。

所以我建议你做的事情是创建一个 configMap templates你要。 Mount this configMap 里面init-container .在init-container里面替换 template 中的占位符值来自 configMap并将其转储到 volume您已在 pod 容器和 init-container 之间共享的 pod 。

现在这可以帮助您根据需要更改配置,您需要做的就是更新 configMap资源。替换占位符值的代码也可以更改,您需要做的就是为 init-container 构建图像。 .这也可以帮助您根据需要保持初始化容器图像的通用性。

通过这种解耦,您的源代码容器保持独立于配置中的更改。

还有这个init-containerconfigMap随心所欲地用于其他 pods 。

关于docker - InitContainer 从 Kubernetes 中的容器镜像中使用 config.template,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44183393/

相关文章:

kubernetes - 如何增加 GKE 临时存储?

kubernetes - 如何检查 pod 正在使用 kubectl 监听的端口而不是查看 dockerFile?

运行命令后 Docker 容器退出

linux - 将环境变量从 linux 传递到 docker 容器

docker - docker容器上的自定义名称解析失败

c++ - 这个分层模型数据有STL容器吗?

docker - 不小心耗尽了Kubernetes中的所有节点(甚至是主节点)。我该如何带回Kubernetes?

node.js - 在 Node 中找不到模块、docker - babel 配置

c++ - 是否有用于建模发布者 - 订阅者关系的容器,并且可以快速查找其中任何一个?

Kubernetes 日志——从头开始