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)

posted @ 2022-11-29 17:52  远方V3  阅读(299)  评论(0编辑  收藏  举报