InitContainer在kubernetes

时间:2017-05-25 14:43:37

标签: docker containers kubernetes

要点:
我希望能够从容器中获取 InitContainer 中的config.template文件。

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

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

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

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

1 个答案:

答案 0 :(得分:2)

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

因此,我建议你做的事情是使用你想要的templates创建一个configMapinit-container内的Mount this configMap。在init-container内部替换来自template的{​​{1}}中的占位符值,并将其转储到您在容器容器和{{1}之间共享的configMap中pod的内容。

现在,这可以帮助您根据需要更改配置,您只需更新volume资源即可。此外,替换占位符值的代码可以更改,您需要做的就是为init-container构建图像。这也有助于您根据需要保持init-container映像的通用性。

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

configMapinit-container也可以根据您的喜好使用其他广告连播。