在 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 的工作区。此限制是为了避免复杂的调度问题和节点亲和性冲突。
若要允许 TaskRun
或 PipelineRun
使用多个基于 PVC 的工作区,必须通过更新 Tekton 功能标志禁用 Affinity Assistant。
建议按以下步骤排查:
编辑 TektonConfig 资源,设置 spec.pipeline.disable-affinity-assistant
,示例如下:
提示:disable-affinity-assistant
功能标志即将被移除,Affinity Assistant 模式将仅由 coschedule
功能标志控制。
feature-flags
ConfigMap 会自动更新。
无需手动重启组件,变更会自动生效。