无法在 Tekton 中使用多个 PVC 工作区
问题描述
在 Tekton 中运行带有 多个基于 PersistentVolumeClaim (PVC) 的 workspaces 的 PipelineRun 或 TaskRun 时,执行会失败,并出现类似 “more than one PersistentVolumeClaim is bound” 的错误。
即使所有 PVC 都有效且声明正确,也会发生此问题。
错误表现
-
TaskRun执行失败,状态为False,原因是TaskRunValidationFailed: -
TaskRun事件显示错误消息:
根本原因分析
默认情况下,Tekton 会启用 Affinity Assistant 功能,以帮助将 TaskRun Pod 与其 PVC 调度到同一节点上。这对于具有 ReadWriteOnce 访问模式的卷尤其有用。
但是,当启用 Affinity Assistant 时:
- 每个
TaskRun仅限于使用 一个基于 PVC 的 workspace。 - 绑定多个 PVC 会触发 验证错误,从而阻止
TaskRun运行。
设置此限制是为了避免复杂的调度问题和节点亲和性冲突。
故障排查
要允许 TaskRun 或 PipelineRun 使用 多个基于 PVC 的 workspaces,必须通过更新 Tekton feature flags 来禁用 Affinity Assistant。
建议按以下步骤排查:
-
按如下方式编辑 TektonConfig 资源,设置
spec.pipeline.coschedule: -
feature-flagsConfigMap 将自动更新。 -
无需手动重启组件,更改会自动生效。