摘要:
我希望能够在 中获取 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-container
和 configMap
随心所欲地用于其他 pods 。
关于docker - InitContainer 从 Kubernetes 中的容器镜像中使用 config.template,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44183393/