我有一个使用webserver(NGINX)和基于反应的前端的设置,它使用webpack来构建最终的静态源。
网络服务器有自己的kubernetes deployment
+ service
。
在网络服务器可以提供静态html / js / css文件之前,需要构建前端 - 但在此之后,pod
/ container
可以停止。
我的想法是在网络服务器和前端volume
之间共享pod
。前端会将生成的文件写入volume
,网络服务器可以从那里为它们提供服务。只要对前端源代码进行更新,就需要重新生成文件。
使用kubernetes工具实现这一目标的最佳方法是什么?
现在,我正在使用init-container
进行构建 - 但这会导致重新启动网络服务器pod
,这不是必需的。
这是解决此问题的最佳/唯一解决方案,还是应该使用kubernetes' jobs
执行此类任务?
答案 0 :(得分:1)
有多种方法可以做到这一点。以下是我对此的看法:
选项1:静态文件代表内置源代码
在这种情况下,您要提供的静态文件实际上应该打包并构建到nginx webserver的docker镜像中(在html目录中说)。如果要更新前端,请更新所用映像的版本并更新窗格。
选项2:静态文件代表状态
在这种情况下,您的方法是正确的。你的状态' (像数据库一样)存储在一个文件夹中。然后运行初始化容器/作业以初始化状态'然后你的网络服务器pod工作正常。
我认为选项1更好有两个原因:
答案 1 :(得分:1)
作业,初始容器,或 gitRepo 类型的卷对您有用。
http://kubernetes.io/docs/user-guide/volumes/#gitrepo
在您的问题中,您不清楚为什么要更新静态内容而不是简单地重新部署/更新 Pod 。
从某个地方开始,你必须构建网络服务器Docker镜像,最好将静态内容构建到镜像中:部署后没有移动部件,不需要卷或存储。总的来说它更简单。
如果您使用任何类型的自动化工具进行Docker构建,那么这很简单。 我个人使用Jenkins基于git repo的钩子构建Docker镜像,只要代码发生变化,就可以重建和部署镜像。
运行作业或初始容器并不会给您带来太多好处:确保Web服务器一直在运行,但它很容易拥有部署,滚动更新将部署新的 Pod ,然后旧服务器将被拆除,服务器也将一直处于启动状态。
保持简单......