也许我有个奇怪的情况。我有一系列需要运行的Kubernetes任务。然而,要管理的作业集是更大框架的一部分,该框架正在快速扩展,手动管理所有作业是不切实际的。作业采用日期参数并使用该日期进行一些数据处理,日期每天都在变化,可能需要根据回填情况等进行调整。我将其设置为可管理的方式如下:
有一个名为"runner“的主cronjob,它运行一个脚本。脚本循环遍历所有需要运行的作业配置,并使用正确的日期参数运行它们。由此脚本创建的子作业将使用kubectl create job --image=... -- <job run command>运行。没有子作业的k8s清单,因为它使用一个码头映像和入口点命令手动运行。
我的问题是,基于这种配置,是否有办法为子作业设置作业TTL?我知道我可以在有k8s清单时设置作业TTL,但是在本例中我没有k8s清单,那么还有其他方法吗?
发布于 2022-02-23 22:17:10
您可以使用干式运行与补丁相结合。
kubectl create job myjob -o yaml --dry-run=client --save-config --image busybox -- sleep 120 |
kubectl patch --dry-run=client -o yaml --type json --patch '[
{"op": "add", "path": "/spec/ttlSecondsAfterFinished", "value": 100}
]' -f - | kubectl apply -f -也可以使用jq将TTL添加到规范中。
kubectl create job myjob --image busybox --dry-run=client --save-config -o json -- sleep 120 |
jq ' .spec += { "ttlSecondsAfterFinished": 100 }' | kubectl apply -f -如果您使用此策略,您甚至可以使用TTL使自己成为基本清单。因为您说您只想更改一些日期参数。
kubectl apply -f job.yaml -o yaml --dry-run=client |
kubectl patch --dry-run=client -o yaml --type json --patch '[
{"op": "add", "path": "/spec/template/spec/containers/0/args", "value": ["'"$(date)"'"] }
]' -f - | kubectl apply -f -如果要这样做,并从env变量中读取日期,还可以使用set。
kubectl apply -f job.yaml -o yaml --dry-run=client |
kubectl set env TARGET_DATE="$(date +%Y-%m-%d)" -o yaml --local --dry-run=client -f - |
kubectl apply -f - https://stackoverflow.com/questions/71243836
复制相似问题