首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >清理由CLI生成的Kubernetes作业

清理由CLI生成的Kubernetes作业
EN

Stack Overflow用户
提问于 2022-02-23 20:47:04
回答 1查看 29关注 0票数 -1

也许我有个奇怪的情况。我有一系列需要运行的Kubernetes任务。然而,要管理的作业集是更大框架的一部分,该框架正在快速扩展,手动管理所有作业是不切实际的。作业采用日期参数并使用该日期进行一些数据处理,日期每天都在变化,可能需要根据回填情况等进行调整。我将其设置为可管理的方式如下:

有一个名为"runner“的主cronjob,它运行一个脚本。脚本循环遍历所有需要运行的作业配置,并使用正确的日期参数运行它们。由此脚本创建的子作业将使用kubectl create job --image=... -- <job run command>运行。没有子作业的k8s清单,因为它使用一个码头映像和入口点命令手动运行。

我的问题是,基于这种配置,是否有办法为子作业设置作业TTL?我知道我可以在有k8s清单时设置作业TTL,但是在本例中我没有k8s清单,那么还有其他方法吗?

EN

回答 1

Stack Overflow用户

发布于 2022-02-23 22:17:10

您可以使用干式运行与补丁相结合。

代码语言:javascript
复制
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添加到规范中。

代码语言:javascript
复制
kubectl create job myjob --image busybox --dry-run=client --save-config -o json -- sleep 120 |
  jq ' .spec += { "ttlSecondsAfterFinished": 100 }' | kubectl apply -f -

如果您使用此策略,您甚至可以使用TTL使自己成为基本清单。因为您说您只想更改一些日期参数。

代码语言:javascript
复制
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。

代码语言:javascript
复制
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 - 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71243836

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档