• Русский
  • Невозможно использовать несколько рабочих областей на основе PVC в 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, которая помогает размещать поды TaskRun вместе с их PVC на одном узле. Это особенно полезно для томов с режимом доступа ReadWriteOnce.

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

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

    Это ограничение введено для избежания сложностей с планированием и конфликтов аффинности узлов.

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

    Чтобы разрешить TaskRun или PipelineRun использовать несколько рабочих областей на основе PVC, необходимо отключить Affinity Assistant, обновив флаги функций 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. Перезапуск компонентов вручную не требуется, изменения вступят в силу автоматически.

    Связанный контент