Unable to Use Multiple PVC Workspaces in Tekton

目录

问题描述

在 Tekton 中运行带有**多个基于 PersistentVolumeClaim(PVC)**的 workspacesPipelineRunTaskRun 时,执行会失败,并出现类似“more than one PersistentVolumeClaim is bound”的错误。

即使所有 PVC 都有效且声明正确,也会发生此问题。

错误表现

  1. TaskRun 执行失败,状态为 False,原因是 TaskRunValidationFailed

    $ kubectl get taskruns -n ${namespace} ${taskrun_name}
    NAME                     SUCCEEDED   REASON                       STARTTIME   COMPLETIONTIME
    demo-hbfhd-foo           False       TaskRunValidationFailed      59s         59s
  2. TaskRun 事件显示错误信息:

    [User error] more than one PersistentVolumeClaim is bound

根因分析

默认情况下,Tekton 启用了Affinity Assistant功能,帮助将 TaskRun pod 与其 PVC 共同调度到同一节点。这对于具有 ReadWriteOnce 访问模式的卷尤其有用。

但是,当启用 Affinity Assistant 时:

  • 每个 TaskRun 仅限于使用单个基于 PVC 的工作区
  • 绑定多个 PVC 会触发校验错误,阻止 TaskRun 运行。

此限制是为了避免复杂的调度问题和节点亲和性冲突。

故障排查

若要允许 TaskRunPipelineRun 使用多个基于 PVC 的工作区,必须通过更新 Tekton 特性标志禁用 Affinity Assistant

建议按如下步骤排查:

  1. 编辑 TektonConfig 资源,设置 spec.pipeline.disable-affinity-assistant,示例如下:

    apiVersion: operator.tekton.dev/v1alpha1
    kind: TektonConfig
    spec:
      pipeline:
        disable-affinity-assistant: true

    提示:disable-affinity-assistant 特性标志即将被移除,Affinity Assistant 模式将仅由 coschedule 特性标志控制。

  2. feature-flags ConfigMap 会自动更新。

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: feature-flags
      namespace: tekton-pipelines
    data:
      disable-affinity-assistant: "true"
  3. 无需手动重启组件,变更会自动生效。

相关内容