首页 > 解决方案 > Kubernetes 集群中计划作业的推荐架构是什么?

问题描述

Kubernetes 集群中计划作业的推荐架构是什么?

考虑以下情况:您有某种工作,希望每 24 小时运行一次,大约需要 2 小时才能完成。例如,让它成为从某些网站抓取信息的解析器。

您希望它在您的 Kubernetes 集群中运行,因此您将其封装在 Docker 映像中。

docker 约定建议将容器视为可执行文件,因此您可以使用解析器脚本作为 Dockerfile 中的默认命令:

CMD nodejs /src/parser.js

但是现在在 Kuberntes 中,当解析器完成时,容器会随之死亡,并会立即重新启动。

解决这个问题,您可以将其他一些 bash 脚本指定为CMD. 该脚本将无限期运行,并且每 24 小时运行一次解析器脚本。然而,这意味着你已经失去了你的形象的这个好属性,不能只是这样做

docker run my-parser-image

那么 Kuberntes 有没有办法每 xx 小时运行一次容器,如果它再次运行失败?更广泛地说,在 Kuberntes 集群中运行计划的容器化作业的建议方法是什么?

标签: dockerkubernetesgoogle-cloud-platform

解决方案


解决此问题的一种方法是在 Kubernetes 中创建一个CronJob对象:

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "0 */24 * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: my-parser-cronjob
            image: my-parser-image
          restartPolicy: OnFailure

与此类似的是使用名为Job的对象,但请记住 Job 只运行一次直到完成。


推荐阅读