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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何定期将shell脚本的结果设置为Kubernetes Cronjob的参数相关的知识,希望对你有一定的参考价值。

我无法定期将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?

谢谢。

答案

你可以为那个https://kubernetes.io/docs/concepts/workloads/pods/init-containers/使用init容器

想法如下:运行在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: 

以上是关于如何定期将shell脚本的结果设置为Kubernetes Cronjob的参数的主要内容,如果未能解决你的问题,请参考以下文章

Linux系统shell脚本之定期清理备份文件

怎样写shell脚本,定期执行删除centos5.6中Apache的log系统日志文件. 只保留最近2个?

如何将shell脚本设置为开机启动?

怎样写shell脚本,定期执行删除centos5.6中Apache的log系统日志文件. 只保留最近2个?

如何将 shell 脚本中的结果传递给 Job 中的变量

如何在shell脚本中调用另一个shell的结果