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

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

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

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

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

      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 KB. Это фактически ограничивает полезный размер результата одной Task значением 4096 bytes.

    Чтобы снять это ограничение, Tekton поддерживает чтение результатов из логов sidecar, где применяется настраиваемый параметр 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:
          # Использовать логи sidecar вместо termination message
          results-from: sidecar-logs
          # Размер результата в байтах (пример: 64 KiB). Максимум — 1,572,863 bytes.
          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 включена, необходимо настроить разрешения на доступ к логам для controller:

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

      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. Ручной перезапуск компонентов не требуется, изменения вступят в силу автоматически.

    Связанное содержимое