Tekton pipeline 的全局超时时间 不生效的问题
修改全局超时时间
tekton 的 pipeline、task 运行时有时需要设置超时时间,确保会退出,除了在pipeline run、task run上设置 spec.timeouts 外,还可以设置全局的超时时间,通过 default-timeout-minutes 参数,这样一来如果 pipeline run / task run 没有设置超时也会有一个保底的。
官方文档:https://tekton.dev/vault/pipelines-v0.28.2/install/#customizing-basic-execution-parameters
apiVersion: v1
kind: ConfigMap
metadata:
name: config-defaults
namespace: tekton-pipelines
labels:
app.kubernetes.io/instance: default
app.kubernetes.io/part-of: tekton-pipelines
data:
default-service-account: "default"
# 这里设置为 1 min是为了测试,正常可以设置为10 min
# 默认的 config-defaults 的配置放在 data/_example 节点里面,需要在 data 节点下直接设置
default-timeout-minutes: "1"
问题出现
修改完了configmap/config-defaultss 后,发现运行起来的 pipeline-run 或者 task-run 依然使用了默认的 60 min (1 h) 作为超时,并没有使用设置的 default-timeout-minutes 作为超时时间。
查看pipeline run 和 task run,发现yaml中timeout也是 60 min (1 h)
以下使用了tekton cli —— tkn, 工具安装方法 https://tekton.dev/docs/cli/
tkn pipelinerun list
tkn pr describe {pipeline-run-instance}
分析
复制了网上的各种脚本进行修改,并使用了必杀技(重启),都无法解决问题,最后去看了下dashboard的源码,并做了一下测试,发现只要使用界面上的“重新运行”功能就会导致默认超时时间不生效的问题。
查看了github上的源码,发现里面设置了默认为10 min 超时
https://github.com/tektoncd/dashboard/blob/051c9c9ec7e6e6e881ca0df437dd20b7e1ac2da3/src/containers/CreatePipelineRun/CreatePipelineRun.js#L66
https://github.com/tektoncd/dashboard/blob/9c354e9127f6c9b66d6e6664dadc2d3c05890b6d/src/containers/CreateTaskRun/CreateTaskRun.js#L65
通过网络请求的监听也可以看到,前端设置了超时时间为1h小时,所以默认的超时时间是不生效的
调用dashboard中api 只是转发,实际上还是k8s api,所以这里的 request body 是yaml的内容
结论
设置 default-timeout-minutes 参数是生效的,只是 dashboard 会自己设定一个超时时间为 60min(1h)
欢迎在评论区留下你宝贵的意见,不论好坏都是我前进的动力(cnblogs 排名提升)!
如果喜欢,记得点赞、推荐、关注、收藏、转发 ... ;)