【问题标题】:Pass current date to kubernetes cronjob将当前日期传递给 Kubernetes cronjob
【发布时间】:2021-05-24 17:13:36
【问题描述】:

我有一个 docker 映像,它接收到一个环境变量名称 SINCE_DATE
我创建了一个 cronjob 来运行该容器,我想将当前日期传递给它。

我该怎么做?

试试这个,我得到了文字字符串date -d "yesterday 23:59"

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: my-cron
spec:
  schedule: "* * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          restartPolicy: Never
          containers:
          - name: my-cron
            image: {{ .Values.image.repository }}:{{ .Values.image.tag }}
            imagePullPolicy: {{ .Values.image.pullPolicy }}
            env:
            - name: SINCE_DATE
              value: $(date -d "yesterday 23:59")

【问题讨论】:

  • 如果你使用 helm,this might be a way.
  • 但是 helm 只是第一次构建 cronjob 对象,它只是用我创建作业的日期填充它...我希望为每次新运行定义它
  • 您能否详细说明您想要实现的目标以及如何实现?当你有容器装箱时,它赢得了时间(取决于你的环境,它的本地环境、云、虚拟)时间可能有点不同。更多详情here。您的 cronjob 将每分钟创建 pod。您想在所有时间或每分钟传递一个日期值吗?
  • 每分钟的日期值。我想通过SINCE_DATE 作为当前时间。容器每分钟都会执行一个新的(更新的)SINCE_DATE

标签: kubernetes cron


【解决方案1】:

您可以通过overwriting container Entrypoint 命令并设置environment variable 来实现它。 在您的情况下,它看起来像:

          containers:
          - name: my-cron
            image: nginx
            #imagePullPolicy: {{ .Values.image.pullPolicy }}
            command:
            - bash
            - -c
            - |
                  export SINCE_DATE=`date -d "yesterday 23:59"`
                  exec /docker-entrypoint.sh           

注意:

Nginx docker-entrypoint.sh 位于/ 如果你的图片有不同的路径,你应该使用它,例如exec /usr/local/bin/docker-entrypoint.sh

非常相似的用例可以在this Stack question中找到

这个解决方案是什么?

它将在容器ENTRYPOINT中设置overwrite默认脚本,使用相同的脚本但预先设置动态环境变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多