• Русский
  • Превышен лимит результата при записи результатов задачи Tekton

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

    Когда шаг Task записывает относительно большой объем данных в результат Task, вывод может завершиться с ошибкой из-за ограничения размера.

    Проявление ошибки

    • В логах Pod отображается сообщение об переполнении termination message (результат слишком большой для стандартного ограничения в 4 КБ):

      2025/10/15 03:22:24 ERROR Error while substituting step artifacts: error="Termination message is above max allowed size 4096, caused by large task result."
      2025/10/15 03:22:24 Termination message is above max allowed size 4096, caused by large task result.

    Анализ причины

    По умолчанию Tekton Pipelines получает результаты Task через termination message контейнера, который Kubernetes ограничивает размером в 4 КБ. Это фактически ограничивает максимальный размер результата одного Task до 4096 байт.

    Для снятия этого ограничения Tekton поддерживает чтение результатов из логов сайдкара, где применяется настраиваемый параметр max-result-size для каждого результата.

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

    TIP

    Следующие инструкции предполагают, что вы установили Tekton Pipeline в namespace tekton-pipelines по умолчанию.

    Если вы установили его в другой namespace, замените tekton-pipelines на ваш namespace.

    Ниже приведены шаги для настройки лимита размера результата:

    1. Отредактируйте ресурс TektonConfig, установив spec.pipeline.results-from и spec.pipeline.max-result-size следующим образом:

      apiVersion: operator.tekton.dev/v1alpha1
      kind: TektonConfig
      metadata:
        name: config
      spec:
        pipeline:
          # Использовать логи сайдкара вместо termination messages
          results-from: sidecar-logs
          # Размер результата в байтах (пример: 64 KiB). Максимум 1,572,863 байт.
          max-result-size: 65536
    2. ConfigMap feature-flags обновится автоматически.

      apiVersion: v1
      kind: ConfigMap
      metadata:
        name: feature-flags
        namespace: tekton-pipelines
      data:
        results-from: sidecar-logs
        max-result-size: "65536"
    3. Поскольку функция results-from: sidecar-logs включена, необходимо настроить разрешения на доступ к логам для контроллера:

      Техническая заметка: Эта настройка позволяет контроллеру получать информацию о результатах из логов pod. Для подробной информации обратитесь к официальной документации Tekton.

      kubectl apply -f - <<EOF
      kind: ClusterRole
      apiVersion: rbac.authorization.k8s.io/v1
      metadata:
        name: tekton-pipelines-controller-pod-log-access
        labels:
          app.kubernetes.io/component: controller
          app.kubernetes.io/instance: default
          app.kubernetes.io/part-of: tekton-pipelines
      rules:
        - apiGroups: [""]
          resources: ["pods/log"]
          verbs: ["get"]
      ---
      kind: ClusterRoleBinding
      apiVersion: rbac.authorization.k8s.io/v1
      metadata:
        name: tekton-pipelines-controller-pod-log-access
        labels:
          app.kubernetes.io/component: controller
          app.kubernetes.io/instance: default
          app.kubernetes.io/part-of: tekton-pipelines
      subjects:
        - kind: ServiceAccount
          name: tekton-pipelines-controller
          namespace: tekton-pipelines
      roleRef:
        kind: ClusterRole
        name: tekton-pipelines-controller-pod-log-access
        apiGroup: rbac.authorization.k8s.io
      EOF
    4. Перезапуск компонентов вручную не требуется, изменения вступят в силу автоматически.

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