要点:
我希望能够从容器中获取 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文件?
- 是否有更好的解决方案可以获得相同或相似的结果?
答案 0 :(得分:2)
我认为没有办法从pod中的容器访问文件到init-containers
。您volume
和广告容器之间共享的init-container
为空,因为广告容器的容器为not started until all init-containers successfully exit(退出代码为0
)。
因此,我建议你做的事情是使用你想要的templates
创建一个configMap
。 init-container
内的Mount this configMap
。在init-container
内部替换来自template
的{{1}}中的占位符值,并将其转储到您在容器容器和{{1}之间共享的configMap
中pod的内容。
现在,这可以帮助您根据需要更改配置,您只需更新volume
资源即可。此外,替换占位符值的代码可以更改,您需要做的就是为init-container
构建图像。这也有助于您根据需要保持init-container映像的通用性。
通过此解耦,您的源代码容器将保持独立于配置中的更改。
此configMap
和init-container
也可以根据您的喜好使用其他广告连播。