如何在具有运行中的spring-boot应用程序的kubernetes容器/容器中运行cron?

时间:2019-02-26 15:13:14

标签: spring-boot docker kubernetes cron

我有一个在容器上运行的spring-boot应用程序。 API之一是文件上传API,每次上传文件时都必须对其进行病毒扫描。我们有uvscan来扫描上传的文件。我正在考虑将uvscan添加到基本映像,但是病毒定义需要每天更新。我创建了一个脚本来更新病毒定义。当前最简单的方法是在调用脚本的容器内运行cron。还有其他选择吗?可以将uvscan实用程序与应用程序pod隔离开来,并从应用程序中调用它吗?

3 个答案:

答案 0 :(得分:0)

在我的工作地点,我们还在EC2实例中运行dockerized服务。如果您只需要每天更新一次定义,我建议您使用AWS Lamda函数。它价格相对合理,您不必担心调度程序的开销等。如果您需要有关设置Lambda的帮助,我总是可以提供更多上下文。不过,我仅在AWS物联网领域为您提供另一种解决方案。

答案 1 :(得分:0)

有很多方法可以解决问题。希望我能帮助您找到最适合您的东西。

从我的角度来看,拥有一个CronJob每天使用uvscan和更新的病毒定义数据库来构建和推送新的docker镜像会非常方便。

在文件处理序列中,您可以使用Kubernetes API创建扫描Job,并为其提供对需要扫描的文件的共享volume的访问权限。

扫描作业将使用:latest image,如果新图像出现在注册表中,它将下载新图像并从中创建容器。

缺点是每天创建映像时,它会消耗“一定”数量的磁盘空间,因此您可能需要发明从注册表和Kubernetes群集的每个节点上的docker缓存中删除旧映像的过程。 / p>

或者,您可以将AV数据库放置在共享卷上,也可以使用Mount Propagation并独立于Pod进行更新。如果uvscan在read-only mode中打开AV数据库,则应该可以。

另一方面,通常需要花费一些时间将病毒定义加载到内存中,因此,将病毒扫描作为Deployment运行比将作业每天重新启动后再每天重新启动的作业要好。注册表。

答案 2 :(得分:0)

因此,基本上,我只是向在容器内运行的应用程序添加了一个cron来更新病毒定义。