InitContainer使用kubernetes中的容器映像的config.template

概要:
我希望能够从Container获取InitContainer中的config.template文件。

现状:
有一些模板configuration文件很less改变,包含了容器的图像中存储的PlaceHolders
当我们在kubernetes中创build容器时,还有一个脚本存储在运行的图像中,并将所有PlaceHoldersreplace为真实值,然后启动服务。

所需的状态:
有一个从generics图像构build的初始化容器,generics代码只需要获取模板文件的目录(作为目录数组)的参数,当它运行时,从容器的图像中获取所有模板文件(抛出 )用实际值replacePlaceHolders,并在与容器共享的卷中创build最终的configuration文件。 这样,Init-Container就完成了准备工作,并且在完成之后,Container需要立即启动准备好的configuration文件 。 也可以在与其他容器一起使用与Init-Container相同的图像。

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

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

我认为没有办法从pod中的容器访问init-containers容器中的文件。 在init-container和pod init-container之间共享的volume是空的,因为直到所有的init-containers成功退出 (退出代码为0 ) 才启动 pod 的容器 。

所以我build议你做的东西的方式是创build一个你想要的templatesconfigMap 。 在init-container 挂载这个configMap 。 然后在init-container执行configMaptemplate中占位符值的replace,并将其转储到您在pod容器和pod的init-container之间共享的volume

现在,这可以帮助您根据需要更改configuration,只需更新configMap资源即可。 另外,replace占位符值的代码也可以改变,所有你需要做的就是构buildinit-container的映像。 这也可以帮助你保持init-container图像的通用性。

通过这种解耦,源代码容器保持独立于configuration的变化。

而且这个init-containerconfigMap可以用于其他的豆荚。