kubernetes Tekton:如何删除成功的pipelineruns?

sd2nnvve  于 2023-05-22  发布在  Kubernetes
关注(0)|答案(2)|浏览(229)

我渴望的Tekton用例很简单:

  • 成功的pipelineruns应该在x天后删除
  • 失败的pipelineruns不应该被自动删除。

我计划在初始清理任务中进行清理。在我看来,这似乎比注解或cronjob方法更好。只要没有建立新的东西,就没有什么需要删除的。
直接方法:

*失败tkn delete似乎没有太大帮助,因为它不区分成功与否。
*失败oc delete --field-selector ...不包含隐藏性好但表现力强的字段status.conditions[0].type==Succeeded

间接方法(首先过滤一个podname列表,然后删除它们-一点也不优雅):

*Failed-o=jsonpath...过滤输出的代价似乎很高,条件数组似乎破坏了语句,所以(为什么?!)一切都归还了……不可行

  • 我的最后一次尝试是tkn pipelineruns list --show-managed-fields,并使用sed/awk解析它。很恶心但至少它做了我想让它做的事而且效率很高但是,当输出的设计在未来的版本中发生变化时,它可能会变得脆弱。

你有更好更优雅的方法吗?多谢了!

rxztt3cl

rxztt3cl1#

在有更好的解决方案之前,我将发布我目前的解决方案(及其缺点):
我们的清理任务现在是围绕以下解决方案构建的,评估tkn pipelineruns list返回的表:

tkn pipelineruns list --show-managed-fields -n e-dodo-tmgr --label tekton.dev/pipeline=deploy-pipeline | awk '$6~/Succeeded/ && $3~/day|week|month/ {print $1}'

优点:

  • 它做它应该做的事情,而不需要大量的调用或额外的计算。

缺点:

  • 时间被限制为“超过一小时/一天/一周……”但是这是可以接受的,因为只有成功的构建才是值得关注的。
  • 我猜这个设计是相当脆弱的,因为随着tkn-Client的变化,表的格式可能会改变,这意味着awk将选择错误的列,或者类似的模式。

总而言之,我希望这个解决方案能坚持到有一些更有用的客户端功能可以直接过滤所需的信息。实际上,我希望像tkn pipelineruns delete --state successful --period P1D这样的东西。时间段的符号来自ISO8601。

ukxgm1gy

ukxgm1gy2#

为了完整起见,我在这里粘贴了kubectl/oc native命令,供我们这些没有tkn cli的人使用。根据需要更换target-namespace
删除失败的管道运行:

kubectl -n target-namespace delete pipelinerun $(kubectl -n target-namespace get pipelinerun -o jsonpath='{range .items[?(@.status.conditions[*].status=="False")]}{.metadata.name}{"\n"}{end}')

删除成功的管道运行:

kubectl -n target-namespace delete pipelinerun $(kubectl -n target-namespace get pipelinerun -o jsonpath='{range .items[?(@.status.conditions[*].status=="True")]}{.metadata.name}{"\n"}{end}')

相关问题