繁体   English   中英

如何使用Kubernetes处理周期性的短期任务

[英]How to handle recurring short-lived tasks with Kubernetes

我有一个带有Web服务器(NGINX)和基于React的前端的安装程序,该前端使用Webpack构建最终的静态源。

Web服务器具有自己的kubernetes deployment + service

在Web服务器可以提供静态html / js / css文件之前,需要先构建前端-但是在那之后, pod / container可以停止。

我的想法是在Web服务器和前端pod之间共享一个volume 前端会将生成的文件写入volume ,然后网络服务器可以从那里为它们提供服务。 只要前端源代码有更新,就需要重新生成文件。

使用kubernetes工具实现此目标的最佳方法是什么? 现在,我正在使用init-container来构建-但这也导致了webserver pod的重新启动,这不是必需的。

这是解决此问题的最佳/唯一解决方案,还是我应该将kubernetes的jobs用于此类任务?

有多种方法可以做到这一点。 我是这样想的:

选项1:静态文件代表构建的源代码

在这种情况下,您实际上要打包的静态文件应该打包并内置到您的nginx Web服务器的docker映像中(在html目录中)。 当您想更新前端时,可以更新所用映像的版本并更新容器。

选项2:静态文件代表状态

在这种情况下,您的方法是正确的。 您的“状态”(如数据库)存储在文件夹中。 然后,您运行一个初始化容器/作业以初始化“状态”,然后您的Web服务器容器正常工作。

我相信选项1会更好的原因有两个:

  1. 您可以通过增加Pod副本数来水平扩展Web服务器。 在选项2中,您实际上是在处理状态,所以当您想向基础k8s群集中添加更多节点时,这是一个问题(您必须将文件/文件夹从一个卷/文件夹复制到另一个)。
  2. 静态文件实际上是应用程序的源代码。 这些不是上载的媒体文件或类似文件。 在这种情况下,使它们成为docker映像的一部分绝对是有意义的。 否则,它会破坏容器化和部署的优势。

可以使用JobsInit容器或gitRepo类型的Volume

http://kubernetes.io/docs/user-guide/volumes/#gitrepo

在您的问题中尚不清楚,您为什么要更新静态内容而不必简单地重新部署/更新Pod

由于必须以某种方式在某个地方构建Web服务器Docker映像,因此似乎最好将静态内容构建到该映像中:部署后就没有活动部件,不需要卷或存储。 总体而言,它更简单。

如果您对Docker构建使用任何类型的自动化工具,都非常容易。 我个人使用Jenkins基于git repo的钩子构建Docker映像,并且只要代码更改,就可以简单地重建和部署该映像。

运行JobInit容器不会给您带来什么好处:确保Web服务器保持运行状态,但是通过滚动更新进行部署很容易,这种部署可以在旧的Pod拆除之前部署新的Pod ,并且您的服务器将始终处于运行状态也起来

把事情简单化...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM