如何定期将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的参数的主要内容,如果未能解决你的问题,请参考以下文章
怎样写shell脚本,定期执行删除centos5.6中Apache的log系统日志文件. 只保留最近2个?