是否有一种kubernetes cronjob类型允许单个容器映像的多个调度?

jgovgodb  于 2023-11-17  发布在  Kubernetes
关注(0)|答案(2)|浏览(125)

如果一个镜像包含许多不同的可执行文件,那么在同一个kubernetes部署中,是否可以有多个cron条目,这些条目包含不同的命令,在不同的时间运行。
例如,对于一些名为“jolly-roger”的单个容器镜像,我希望调度以下crontab,而不必管理不同存储库中的4个单独的kubernetes应用程序。

*/30 * * * * /pirate-bin/rehoist-the-flag
0 7,19 * * * /pirate-bin/feed-the-sharks
45 20 * * * /pirate-bin/count-the-gold
0 12 * * 1,5 /pirate-bin/make-landlubbers-walk-the-plank

字符串

epggiuax

epggiuax1#

您可以:

  • 创建一个cronjob资源,只使用一个crontab时间(如*/30 * * * *)和几个要运行的容器
  • 使用相同的容器映像创建多个cronjob资源,但每个作业的commandargs不同

您不能:

  • 创建一个具有多个crontab时间的cron作业资源
  • 因此不使用具有多个crontab时间的多个容器

因此,简而言之,您可以将所有二进制文件放在一个容器中,但不能通过定义一个资源来解决问题。

j7dteeu8

j7dteeu82#

使用helm,我可以通过在values.yaml中定义cronjob值来实现:

cronJobs:
  - name: daily
    schedule: "0 13 * * 1-5"
  - name: weekly
    schedule: "@weekly"
  - name: monthly
    schedule: "@monthly*"

字符串
然后在我的模板中,我可以使用range来覆盖它,并创建任意多的CronJob:

{{- range .Values.cronJobs }}
apiVersion: batch/v1
kind: CronJob
metadata:
  name: my-{{ .name }}-job
  labels:
    app: {{ template "test.name" $ }}
    chart: {{ template "test.chart" $ }}
    release: {{ $.Release.Name }}
    component: test
spec:
  schedule: {{ .schedule | quote }}

[...]

---
{{- end }}


请注意,您需要使用$而不是.来访问根作用域(例如Release.Name)。这是因为作用域被range块更改(参见documentation

相关问题