• Русский
  • Невозможно использовать несколько PVC Workspaces в Tekton

    Описание проблемы

    При запуске PipelineRun или TaskRun в Tekton с workspaces на основе нескольких PersistentVolumeClaim (PVC) выполнение завершается с ошибкой, похожей на "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, чтобы помогать размещать pods TaskRun рядом с их PVC на одном node. Это особенно полезно для volumes с режимом доступа ReadWriteOnce.

    Однако при включенном Affinity Assistant:

    • Каждый TaskRun ограничен одним workspace на основе PVC.
    • Привязка более чем одного PVC вызывает ошибку валидации, из-за которой TaskRun не может быть запущен.

    Это ограничение введено, чтобы избежать сложных проблем планирования и конфликтов node affinity.

    Устранение неполадок

    Чтобы позволить TaskRun или PipelineRun использовать несколько workspaces на основе PVC, необходимо отключить Affinity Assistant путем обновления feature flags Tekton.

    Рекомендуется выполнить следующие действия:

    1. Отредактируйте ресурс TektonConfig, установив spec.pipeline.coschedule как показано ниже:

      apiVersion: operator.tekton.dev/v1alpha1
      kind: TektonConfig
      spec:
        pipeline:
          coschedule: disabled
    2. ConfigMap feature-flags будет обновлен автоматически.

      apiVersion: v1
      kind: ConfigMap
      metadata:
        name: feature-flags
        namespace: tekton-pipelines
      data:
        coschedule: disabled
    3. Ручной перезапуск компонентов не требуется, изменения вступят в силу автоматически.

    Связанная информация