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

标签 kubernetes

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

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

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

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

使用kubernetes工具实现此目标的最佳方法是什么?
现在,我正在使用init-container进行构建-但这也导致了网络服务器pod的重启,这不是必需的。

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

最佳答案

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

选项1:静态文件表示内置的源代码

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

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

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

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

  • 您可以通过增加Pod副本数来简单地水平扩展Web服务器。在选项2中,您实际上是在处理状态,所以当您想向基础k8s群集中添加更多节点时,这是一个问题(您必须将文件/文件夹从一个卷/文件夹复制到另一个)。
  • 静态文件实际上是您的应用程序的源代码。这些不是上载的媒体文件或类似文件。在这种情况下,将它们作为docker镜像的一部分绝对是有意义的。否则,这将挫败容器化和部署的优势。
  • 关于kubernetes - 如何使用Kubernetes处理周期性的短期任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40752016/

    相关文章:

    kubernetes - Kubernetes清理板岩

    go - 如何转储正在运行的 kubelet 的 goroutines 堆栈竞争

    kubernetes - 部署后如何在 kubernetes 中删除 Traefik 2.0 中间件和 IngressRoute

    kubernetes - cluster-admin 和 admin Kubernetes ClusterRoles 之间的区别

    kubernetes - Kubernetes 中的暂停图像有什么用?

    kubernetes - GCE 健康检查不适用于入口 nginx Controller

    kubernetes - 有人可以向我解释一些 Helm 的用例吗?

    nginx - 一个 Kubernetes pod 中的双 nginx

    kubernetes - Ansible + Kubernetes : how to wait for a Job completion

    amazon-web-services - aws s3api create-bucket-桶使异常