如何定期将Shell脚本的结果设置为Kubernetes Cronjob的参数

时间:2019-03-25 14:30:45

标签: kubernetes

我无法定期将Shell脚本的结果值设置为Kubernetes Cronjob的参数。

有什么好方法可以设置每天刷新的值?

我使用Kubernetes cronjob来执行一些日常任务。

使用cronjob,将启动Rust应用程序并执行批处理。

作为Rust应用程序的参数之一,我将目标日期(yyyy-MM-dd格式的字符串)作为命令行参数传递。

因此,我尝试按如下方式将日期值传递到cronjob的定义yaml文件中。

然后尝试使用以下脚本设置$ {TARGET_DATE}的值。 在sample.sh中,将导出TARGET_DATE的值。

cat sample.yml | envsubst | kubectl apply -f sample.sh
apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: some-batch
  namespace: some-namespace
spec:
  schedule: "00 1 * * 1-5"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: some-container
            image: sample/some-image
            command: ["./run"]
            args: ["${TARGET_DATE}"]
          restartPolicy: Never

我希望这会每天创建TARGET_DATE值,但是它与我第一次设置的日期相比不会改变。

是否有什么好方法可以将shell脚本的结果定期设置为cronjob yaml的args?

谢谢。

1 个答案:

答案 0 :(得分:1)

您可以将初始化容器用于该exit code

想法如下:运行脚本,以在init容器中设置此值,然后将此值写入共享的emptyDir卷中。然后从主容器中读取该值。这是示例:

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: some-batch
  namespace: some-namespace
spec:
  schedule: "00 1 * * 1-5"
  jobTemplate:
    spec:
      template:
        spec:
          initContainers:
          - name: init-script
            image: my-init-image
            volumeMounts:
            - name: date
              mountPath: /date
            command:
            - sh
            - -c
            - "/my-script > /date/target-date.txt"
          containers:
          - name: some-container
            image: sample/some-image
            command: ["./run"]
            args: ["${TARGET_DATE}"] # adjust this part to read from file
            volumeMounts:
            - name: date
              mountPath: /date
          restartPolicy: Never
          volumes:
          - name: date
            emptyDir: {}