• Русский
  • Конфигурация хранилища S3

    В этом документе описывается, как настроить S3-совместимое хранилище (например, Ceph) для архивации журналов Tekton Results.

    Содержание

    ОбзорОсновные преимуществаПредварительные требованияТребования к системе храненияРазрешенияОбзор конфигурацииСправка по параметрам конфигурацииПараметры, специфичные для S3, в SecretПодробности по параметрамБазовая конфигурация1. Подготовьте S3-хранилище2. Создайте Secret с учетными данными S33. Настройте ресурс TektonConfig4. Примените конфигурациюРасширенная конфигурацияНастройка custom multipart sizeКонфигурация для CephПолный пример production-конфигурацииПример конфигурации для MinIOКонфигурация максимального размера журналаНастройка Feature GateПример настройки максимального размера журналаЭксплуатацияОбновление конфигурации S3Команды для проверкиРекомендации по лучшим практикамСоображения безопасностиОптимизация производительностиУправление хранилищемПравила именованияОперационные рекомендацииРекомендации для S3-совместимых хранилищСоображения безопасностиУправление учетными даннымиСетевая безопасностьМониторинг и аудитУстранение неполадокРаспространенные проблемыПроблемы, связанные с безопасностьюДиагностические командыШаги проверкиАнализ журналовПроблемы производительности

    Обзор

    Tekton Results поддерживает хранение архивированных журналов в S3-совместимых системах объектного хранения, таких как Ceph, AWS S3, MinIO и т. д. Это обеспечивает масштабируемое и надежное решение для долгосрочного хранения журналов, заменяя менее эффективные механизмы хранения, такие как хранилище на основе PVC.

    Основные преимущества

    • Масштабируемость: объектное хранилище горизонтально масштабируется без ограничений блочного хранилища
    • Надежность: встроенное резервирование и репликация в системах объектного хранения
    • Экономичность: более низкая стоимость хранения по сравнению с постоянными томами
    • Долгосрочное хранение: подходит для соблюдения требований и исторической диагностики

    Предварительные требования

    Требования к системе хранения

    • S3-совместимая служба объектного хранения (Ceph, AWS S3, MinIO и т. д.)
    • Доступ для создания buckets и управления учетными данными
    • Сетевое подключение от вашего кластера Kubernetes к S3 endpoint

    Разрешения

    • Возможность создавать buckets
    • Разрешения на чтение, запись и удаление для выделенного bucket журналов
    • Настроенные корректные политики IAM или механизмы контроля доступа

    Обзор конфигурации

    Конфигурация S3-хранилища для Tekton Results включает два основных компонента:

    1. Учетные данные S3 и параметры подключения хранятся в Kubernetes Secrets
    2. Конфигурация S3 включается в кастомном ресурсе TektonConfig в spec.result

    Справка по параметрам конфигурации

    ПолеОписаниеЗначение по умолчаниюОбязательно
    logs_apiВключить службу хранения журналовfalseДа (установите true для S3 storage)
    logs_typeТип backend для хранения журналовFileДа (установите S3 для S3 storage)
    secret_nameИмя Secret, содержащего учетные данные S3ПустоДа

    Параметры, специфичные для S3, в Secret

    ПолеОписаниеПример значенияОбязательноПримечания
    S3_BUCKET_NAMEИмя bucket S3 для хранения журналовtekton-logsДаBucket должен существовать и быть доступным
    S3_ENDPOINTURL endpoint службы S3https://s3.example.comНет (для AWS S3)Обязательно для S3-совместимых служб, отличных от AWS S3
    S3_REGIONРегион S3us-east-1ДаДля AWS S3 или S3-совместимых служб с учетом региона
    S3_ACCESS_KEY_IDИдентификатор ключа доступа S3AKIAIOSFODNN7EXAMPLEДаКлюч доступа для аутентификации S3
    S3_SECRET_ACCESS_KEYСекретный ключ доступа S3wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEYДаСекретный ключ для аутентификации S3
    S3_HOSTNAME_IMMUTABLEФлаг неизменяемости hostname S3falseНетУстановите true, если hostname не должен изменяться AWS SDK
    S3_MULTI_PART_SIZEРазмер multipart upload S3 в байтах5242880НетПорог размера для multipart uploads (по умолчанию 5MB)

    Подробности по параметрам

    • S3_BUCKET_NAME: Имя bucket S3, в котором будут храниться журналы Tekton. Убедитесь, что этот bucket существует и имеет соответствующие разрешения.
    • S3_ENDPOINT: URL endpoint службы S3. Для AWS S3 этот параметр можно не указывать. Для S3-совместимых служб, таких как Ceph, MinIO и т. д., он обязателен.
    • S3_REGION: Регион, в котором размещена служба S3. Для AWS S3 используйте соответствующий идентификатор региона AWS. Для S3-совместимых служб используйте идентификатор региона, настроенный в вашей службе.
    • S3_ACCESS_KEY_ID и S3_SECRET_ACCESS_KEY: Учетные данные для аутентификации в службе S3.
    • S3_HOSTNAME_IMMUTABLE: Используется для некоторых S3-совместимых служб, которым требуется неизменяемость hostname.
    • S3_MULTI_PART_SIZE: Определяет порог размера, при котором используются multipart uploads. Большие значения могут улучшить производительность для больших файлов.

    Базовая конфигурация

    Для базовой настройки S3-хранилища выполните следующие шаги:

    1. Подготовьте S3-хранилище

    Перед настройкой Tekton Results убедитесь, что у вас есть:

    • Готовая S3-совместимая система хранения (Ceph, AWS S3, MinIO и т. д.)
    • Выделенный bucket для журналов Tekton
    • Действительные учетные данные с соответствующими разрешениями (чтение, запись, удаление)
    • Сетевое подключение от вашего кластера Kubernetes к S3 endpoint

    2. Создайте Secret с учетными данными S3

    Создайте Kubernetes Secret, содержащий учетные данные и конфигурацию S3:

    apiVersion: v1
    kind: Secret
    type: Opaque
    metadata:
      name: my-s3-secret
      namespace: tekton-pipelines
    stringData:
      S3_BUCKET_NAME: tekton-logs
      S3_ENDPOINT: https://your-ceph-endpoint.example.com
      S3_HOSTNAME_IMMUTABLE: "false"
      S3_REGION: region-1
      S3_ACCESS_KEY_ID: your-access-key-id
      S3_SECRET_ACCESS_KEY: your-secret-access-key
      S3_MULTI_PART_SIZE: "5242880"

    Пошаговый процесс создания:

    1. Определите параметры S3:

      • Имя bucket, в котором будут храниться журналы
      • URL endpoint S3 (например, https://ceph.example.com для Ceph)
      • Соответствующий идентификатор региона
      • Учетные данные доступа с разрешениями на чтение/запись/удаление
    2. Создайте Secret с помощью kubectl:

      kubectl create secret generic my-s3-secret \
        --namespace="tekton-pipelines" \
        --from-literal=S3_BUCKET_NAME=tekton-logs \
        --from-literal=S3_ENDPOINT=https://your-ceph-endpoint.example.com \
        --from-literal=S3_HOSTNAME_IMMUTABLE=false \
        --from-literal=S3_REGION=region-1 \
        --from-literal=S3_ACCESS_KEY_ID=your-access-key-id \
        --from-literal=S3_SECRET_ACCESS_KEY=your-secret-access-key \
        --from-literal=S3_MULTI_PART_SIZE=5242880

      Пример вывода:

      secret/my-s3-secret created
    3. Проверьте, что Secret создан:

      kubectl get secret my-s3-secret -n tekton-pipelines

      Пример вывода:

      NAME           TYPE     DATA   AGE
      my-s3-secret   Opaque   7      5m

    3. Настройте ресурс TektonConfig

    Включите S3 storage в конфигурации TektonConfig:

    apiVersion: operator.tekton.dev/v1alpha1
    kind: TektonConfig
    metadata:
      name: config
    spec:
      result:
        # Включите logs API и укажите S3 как тип хранилища
        logs_api: true
        logs_type: S3
        
        # Укажите Secret с учетными данными S3
        secret_name: my-s3-secret
        
        # Если используется внешняя база данных (рекомендуется для production)
        is_external_db: true
        db_host: your-postgres-host.example.com
        db_port: 5432
        db_name: tekton_results
        db_sslmode: require
        db_secret_name: tekton-results-postgres
    TIP

    Вы можете объединить конфигурацию S3 storage с конфигурацией внешней базы данных для полноценной production-настройки.

    4. Примените конфигурацию

    1. Примените конфигурацию TektonConfig:

      kubectl apply -f tekton-config-s3-config.yaml

      Пример вывода:

      tektonconfig.operator.tekton.dev/config configured
    2. Дождитесь перезапуска компонентов:

      kubectl rollout status -n tekton-pipelines deployment/tekton-results-api

      Пример вывода:

      deployment "tekton-results-api" successfully rolled out
      kubectl rollout status -n tekton-pipelines deployment/tekton-results-watcher

      Пример вывода:

      deployment "tekton-results-watcher" successfully rolled out
    3. Проверьте, что конфигурация активна:

      kubectl get pods -n tekton-pipelines

      Пример вывода:

      NAME                                          READY   STATUS    RESTARTS   AGE
      tekton-results-api-7d5b8c9c4-xl2v9            1/1     Running   0          10m
      tekton-results-watcher-6b4f7c8d5-z3n4p        1/1     Running   0          10m
      tekton-results-retention-policy-agent-5c9g2   1/1     Running   0          10m

    Расширенная конфигурация

    Настройка custom multipart size

    Для оптимизации производительности загрузки можно изменить размер multipart:

    # В вашем S3 Secret
    stringData:
      S3_MULTI_PART_SIZE: "10485760"  # 10MB multipart size

    Конфигурация для Ceph

    При использовании Ceph в качестве S3-совместимого хранилища:

    • Установите S3_HOSTNAME_IMMUTABLE в "true", если это требуется конфигурацией Ceph
    • Используйте корректный URL endpoint, предоставленный вашим кластером Ceph
    • Убедитесь, что Ceph RGW (RADOS Gateway) правильно настроен для совместимости с S3

    Полный пример production-конфигурации

    Полная конфигурация, объединяющая S3 storage и внешнюю базу данных, с подробными пояснениями:

    ---
    # S3 credentials secret
    apiVersion: v1
    kind: Secret
    type: Opaque
    metadata:
      name: tekton-results-s3-credentials
      namespace: tekton-pipelines
    stringData:
      # S3 Configuration
      S3_BUCKET_NAME: tekton-logs-prod
      S3_ENDPOINT: https://ceph-storage.company.com
      S3_HOSTNAME_IMMUTABLE: "false"
      S3_REGION: ceph-region
      S3_ACCESS_KEY_ID: your-ceph-access-key
      S3_SECRET_ACCESS_KEY: your-ceph-secret-key
      S3_MULTI_PART_SIZE: "5242880"  # 5MB multipart threshold
    ---
    # TektonConfig configuration
    apiVersion: operator.tekton.dev/v1alpha1
    kind: TektonConfig
    metadata:
      name: config
    spec:
      result:
        # Enable S3-based log storage
        logs_api: true
        logs_type: S3
        
        # External database configuration
        is_external_db: true
        db_host: postgres.company.com
        db_port: 5432
        db_name: tekton_results
        db_sslmode: require
        db_secret_name: tekton-results-postgres  # Separate DB credentials
        secret_name: tekton-results-s3-credentials  # S3 credentials

    Пример конфигурации для MinIO

    Пример конфигурации для объектного хранилища MinIO:

    ---
    apiVersion: v1
    kind: Secret
    type: Opaque
    metadata:
      name: minio-s3-credentials
      namespace: tekton-pipelines
    stringData:
      S3_BUCKET_NAME: tekton-logs
      S3_ENDPOINT: https://minio.company.com
      S3_HOSTNAME_IMMUTABLE: "false"
      S3_REGION: us-east-1
      S3_ACCESS_KEY_ID: MINIO_ACCESS_KEY
      S3_SECRET_ACCESS_KEY: MINIO_SECRET_KEY
      S3_MULTI_PART_SIZE: "5242880"
    ---
    apiVersion: operator.tekton.dev/v1alpha1
    kind: TektonConfig
    metadata:
      name: config
    spec:
      result:
        logs_api: true
        logs_type: S3
        secret_name: minio-s3-credentials

    Конфигурация максимального размера журнала

    Чтобы ограничить размер журналов, сохраняемых для каждого TaskRun, можно настроить параметр max-log-size с помощью поля spec.result.options в TektonConfig. ВАЖНО: Перед этим необходимо сначала включить feature gate MaxLogSize. Это enhancement-функция (на основе патча) и в настоящее время недоступна в community Tekton Results.

    Настройка Feature Gate

    Перед настройкой max-log-size необходимо включить feature gate MaxLogSize, задав соответствующие feature flags.

    Чтобы включить feature gate, можно установить переменную окружения FEATURE_GATES со значением MaxLogSize=true:

    FEATURE_GATES='PartialResponse=true,MaxLogSize=true'

    Другой способ — настроить переменную окружения FEATURE_GATES непосредственно в deployment tekton-results-api через параметры TektonConfig:

    apiVersion: operator.tekton.dev/v1alpha1
    kind: TektonConfig
    metadata:
      name: config
    spec:
      result:
        options:
          deployments:
            tekton-results-api:
              spec:
                template:
                  spec:
                    containers:
                    - name: api  # Это должно совпадать с именем контейнера в исходном deployment
                      env:
                      - name: FEATURE_GATES
                        value: "PartialResponse=true,MaxLogSize=true"

    Примечание: Флаг функции MaxLogSize обычно реализуется через конфигурацию MaxResultSize в feature flags Tekton (как видно в структуре FeatureFlags), которая управляет максимальным размером результатов, доступных для хранения.

    Пример настройки максимального размера журнала

    После включения feature gate можно настроить параметр max-log-size:

    apiVersion: operator.tekton.dev/v1alpha1
    kind: TektonConfig
    metadata:
      name: config
    spec:
      result:
        logs_api: true
        logs_type: S3
        secret_name: my-s3-secret
        
        # Необязательно: настройка ограничения максимального размера журнала через options
        options:
          configMaps:
            tekton-results-api-config:  # Этот ConfigMap должен существовать
              data:
                max-log-size: "5242880"  # Размер в байтах (5 MiB)

    Сведения о конфигурации:

    • Назначение: Ограничивает размер каждого журнала TaskRun, чтобы предотвратить неограниченный рост хранилища и обеспечить стабильную производительность запросов
    • Значение по умолчанию: по умолчанию используется 5 MiB (5242880 байт)
    • Поведение: Когда журнал TaskRun превышает настроенный лимит, система сохраняет Head журнала и отбрасывает хвост. Установите max-log-size в "0", чтобы отключить это ограничение и загружать журнал полностью.
    • Примечание: Это enhancement-функция (на основе патча) и в настоящее время недоступна в upstream Tekton Results
    • Предварительное условие: Для работы этой функциональности должен быть включен feature gate MaxLogSize.
    WARNING

    Важное предупреждение

    Это функция альфа-стадии, и ее поведение может быть изменено в более поздних версиях.

    Эксплуатация

    Обновление конфигурации S3

    После изменения конфигурации S3 необходимо перезапустить компоненты Tekton Results, чтобы изменения вступили в силу.

    Перезапустите API server:

    kubectl delete pod -n tekton-pipelines -l app.kubernetes.io/name=tekton-results-api

    Пример вывода:

    pod "tekton-results-api-7d5b8c9c4-xl2v9" deleted

    Перезапустите watcher:

    kubectl delete pod -n tekton-pipelines -l app.kubernetes.io/name=tekton-results-watcher

    Пример вывода:

    pod "tekton-results-watcher-6b4f7c8d5-z3n4p" deleted

    Команды для проверки

    # Проверить статус TektonConfig
    kubectl get tektonconfig config -o yaml

    Пример вывода:

    apiVersion: operator.tekton.dev/v1alpha1
    kind: TektonConfig
    metadata:
      name: config
    spec:
      result:
        logs_api: true
        logs_type: S3
        secret_name: my-s3-secret
        is_external_db: true
        db_host: postgres.company.com
    status:
      conditions:
      - type: Ready
        status: "True"
        reason: InstallSucceeded
        message: "Install successful"
    # Проверить логи pod на наличие подключений к S3
    kubectl logs -n tekton-pipelines -l app.kubernetes.io/name=tekton-results-api

    Пример вывода:

    {"level":"info","ts":"2023-05-15T10:30:45.123Z","caller":"api/main.go:89","msg":"Starting Tekton Results API server"}
    {"level":"info","ts":"2023-05-15T10:30:45.124Z","caller":"s3/client.go:45","msg":"Successfully connected to S3 storage"}
    {"level":"info","ts":"2023-05-15T10:30:45.125Z","caller":"api/server.go:123","msg":"API server listening on :8080"}
    # Проверить, что Secret существует
    kubectl get secret my-s3-secret -n tekton-pipelines
    # Проверить, что pod запущены с конфигурацией S3
    kubectl get pods -n tekton-pipelines -l app.kubernetes.io/name=tekton-results-api

    Пример вывода:

    NAME                                    READY   STATUS    RESTARTS   AGE
    tekton-results-api-7d5b8c9c4-xl2v9       1/1     Running   0          10m
    kubectl get pods -n tekton-pipelines -l app.kubernetes.io/name=tekton-results-watcher

    Пример вывода:

    NAME                                    READY   STATUS    RESTARTS   AGE
    tekton-results-watcher-6b4f7c8d5-z3n4p    1/1     Running   0          10m

    Рекомендации по лучшим практикам

    Соображения безопасности

    1. Используйте выделенные учетные данные: создайте отдельные учетные данные S3 для Tekton Results с минимально необходимыми разрешениями (чтение, запись, удаление в конкретном bucket)
    2. Безопасное хранение учетных данных: храните учетные данные в Kubernetes Secrets, а не в конфигурационных файлах в открытом виде
    3. Регулярная ротация учетных данных: внедрите процесс периодической ротации S3 access keys (например, ежеквартально)
    4. Безопасность сети: обеспечьте защищенное сетевое соединение между кластером и S3 endpoint, предпочтительно через private networks или VPN
    5. Принцип минимальных привилегий: предоставляйте только минимально необходимые разрешения учетным данным S3
    6. Шифрование: убедитесь, что ваше S3-совместимое хранилище поддерживает server-side encryption для сохраненных журналов

    Оптимизация производительности

    1. Правильный размер multipart: настройте S3_MULTI_PART_SIZE с учетом сетевых условий (по умолчанию 5MB, но для сетей с высокой задержкой может быть лучше 10–15MB)
    2. Размещение bucket: по возможности размещайте bucket S3 в том же регионе, что и ваш кластер, чтобы минимизировать задержку
    3. Мониторинг: настройте мониторинг использования S3 storage, производительности загрузки/скачивания и частоты ошибок
    4. Пул соединений: Tekton Results автоматически управляет пулом соединений к службам S3
    5. Пропускная способность: убедитесь в наличии достаточной сетевой пропускной способности между кластером и S3 storage

    Управление хранилищем

    1. Политики хранения: внедрите lifecycle policies bucket S3 для автоматической очистки старых журналов
    2. Классы хранения: рассмотрите использование разных storage class S3 для разных периодов хранения журналов
    3. Сжатие: включите сжатие в вашем S3-совместимом хранилище, если это поддерживается
    4. Тегирование объектов: используйте тегирование объектов S3 для организации журналов по namespace, pipeline и другим критериям

    Правила именования

    • Используйте понятные имена bucket, включающие информацию об окружении (например, tekton-logs-prod, tekton-logs-staging)
    • Применяйте единообразные имена для Secret (например, tekton-results-s3-credentials)
    • Добавляйте префиксы, специфичные для окружения, при запуске нескольких экземпляров
    • Используйте ясные и последовательные имена для ресурсов конфигурации

    Операционные рекомендации

    1. Мониторинг состояния: регулярно отслеживайте состояние как компонентов Tekton Results, так и подключения к S3 storage
    2. Стратегии резервного копирования: хотя S3 обеспечивает надежность, убедитесь, что у вас есть процедуры доступа к журналам в случае сбоев системы
    3. Планирование емкости: планируйте рост хранилища журналов на основе типичного объема PipelineRun/TaskRun
    4. Тестирование: регулярно проверяйте возможность получения журналов, чтобы убедиться, что подключение к S3 остается рабочим
    5. Документация: поддерживайте актуальную документацию по деталям S3 endpoint и процедурам доступа

    Рекомендации для S3-совместимых хранилищ

    • Ceph: убедитесь, что Ceph RGW корректно настроен и протестирован на совместимость с S3
    • MinIO: проверьте настройки сервера MinIO для оптимальной производительности с Tekton Results
    • AWS S3: проверьте политики AWS IAM и при необходимости убедитесь в корректном cross-account доступе
    • Тонкая настройка производительности: разные S3-совместимые системы хранения могут требовать разных размеров multipart или параметров подключения

    Соображения безопасности

    Управление учетными данными

    1. Безопасное хранение: храните учетные данные S3 в Kubernetes Secrets, никогда не храните их в конфигурационных файлах в открытом виде
    2. Контроль доступа: ограничьте доступ к Secret, содержащим учетные данные S3, с помощью RBAC
    3. Процесс ротации: внедрите регулярный график ротации учетных данных доступа S3
    4. Принцип минимальных привилегий: предоставляйте только минимально необходимые разрешения (чтение, запись, удаление в конкретном bucket)

    Сетевая безопасность

    1. Шифрование соединений: всегда используйте HTTPS/SSL для подключения к S3-совместимому хранилищу
    2. Private networks: по возможности используйте private networks или VPN для подключения к S3 endpoint
    3. Правила firewall: настройте соответствующие правила firewall, чтобы ограничить доступ к S3 endpoint
    4. Проверка сертификатов: убедитесь, что для SSL-соединений настроена корректная проверка сертификатов

    Мониторинг и аудит

    1. Журналирование доступа: включите access logging в вашем S3-совместимом хранилище для отслеживания операций
    2. Обнаружение аномалий: отслеживайте необычные шаблоны доступа или неудачные попытки аутентификации
    3. Аудиторские следы: ведите audit trail для доступа к учетным данным и изменений конфигурации
    4. Оповещения безопасности: настройте оповещения о событиях, связанных с безопасностью

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

    Распространенные проблемы

    1. Ошибки подключения к S3:

      • Проверьте, что URL endpoint S3 указан правильно и доступен
      • Проверьте сетевое подключение от кластера к S3 endpoint
      • Валидируйте SSL-сертификаты при использовании HTTPS
      • Убедитесь, что endpoint доступен изнутри кластера
    2. Сбои аутентификации:

      • Убедитесь, что access key и secret key указаны верно
      • Проверьте, что политики IAM предоставляют необходимые разрешения
      • Убедитесь, что конфигурация региона соответствует региону службы S3
      • Проверьте, что срок действия учетных данных не истек и они не были ротированы
    3. Отказ в разрешении:

      • Убедитесь, что учетные данные имеют разрешения на чтение, запись и удаление в bucket
      • Проверьте, что политики bucket разрешают доступ из вашего кластера
      • Убедитесь, что bucket существует и доступен с предоставленными учетными данными
    4. Медленная загрузка журналов:

      • Отрегулируйте размер multipart для оптимальной производительности
      • Проверьте пропускную способность сети между кластером и S3 endpoint
      • Убедитесь в производительности службы S3
      • Отслеживайте сетевые перегрузки или throttling
    5. Отсутствующие журналы:

      • Убедитесь, что компонент watcher корректно захватывает журналы
      • Проверьте, сохраняются ли журналы в S3, но не доступны через API
      • Убедитесь, что политики хранения не удаляют журналы преждевременно
    6. Проблемы конфигурации:

      • Убедитесь, что все обязательные параметры S3 указаны корректно
      • Проверьте, что ресурс TektonConfig настроен правильно
      • Убедитесь, что Secret имеет корректный формат и доступен

    Проблемы, связанные с безопасностью

    1. Утечка учетных данных:

      • Проверьте, что Secret не попадают в логи или сообщения об ошибках
      • Убедитесь, что учетные данные не хранятся в конфигурационных файлах
      • Проверьте, что политики RBAC корректно ограничивают доступ к конфиденциальным ресурсам
    2. Несанкционированный доступ:

      • Отслеживайте неожиданные шаблоны доступа
      • Убедитесь, что к S3 storage могут обращаться только авторизованные службы
      • Проверьте, что аутентификация применяется корректно

    Диагностические команды

    # Check TektonConfig resource status
    kubectl get tektonconfig config -o yaml

    Пример вывода:

    apiVersion: operator.tekton.dev/v1alpha1
    kind: TektonConfig
    metadata:
      name: config
    spec:
      result:
        logs_api: true
        logs_type: S3
        secret_name: my-s3-secret
    status:
      conditions:
      - type: Ready
        status: "True"
        reason: ReconcileSuccess
        message: "All components are reconciled successfully"
    # View detailed status
    kubectl describe tektonconfig config

    Пример вывода:

    Name:         config
    Namespace:    
    Labels:       operator.tekton.dev/release-version=v0.76.0-1070dfb
    Annotations:  <none>
    API Version:  operator.tekton.dev/v1alpha1
    Kind:         TektonConfig
    Metadata:
      Creation Timestamp:  2026-01-26T04:40:31Z
      Finalizers:
        tektonconfigs.operator.tekton.dev
      Generation:        16
      Resource Version:  2363257
      UID:               4ae317c9-7bb9-40b5-94fe-2c3cf708a21d
    Spec:
        Result:
        auth_disable:              false
        db_enable_auto_migration:  true
        db_host:                   postgresql.example.svc.cluster.local
        db_name:                   tekton_results
        db_port:                   5432
        db_secret_name:            tekton-results-postgres
        db_sslmode:                verify-full
        db_sslrootcert:            /etc/tls/db/ca.crt
        Disabled:                  false
    # .....
    # Check all related pods
    kubectl get pods -n tekton-pipelines | grep tekton-results

    Пример вывода:

    NAME                                          READY   STATUS    RESTARTS   AGE
    tekton-results-api-7d5b8c9c4-xl2v9            1/1     Running   0          10m
    tekton-results-watcher-6b4f7c8d5-z3n4p        1/1     Running   0          10m
    tekton-results-retention-policy-agent-5c9g2   1/1     Running   0          10m
    # View API server logs for S3-related messages
    kubectl logs -n tekton-pipelines deployment/tekton-results-api | grep -i s3

    Пример вывода:

    {"level":"info","ts":"2023-05-15T10:30:45.123Z","caller":"s3/client.go:45","msg":"Successfully connected to S3 storage"}
    {"level":"info","ts":"2023-05-15T10:30:45.124Z","caller":"api/server.go:123","msg":"S3 storage configured with bucket: tekton-logs"}
    # View watcher logs for upload operations
    kubectl logs -n tekton-pipelines deployment/tekton-results-watcher | grep -i upload

    Пример вывода:

    {"level":"info","ts":"2023-05-15T10:30:46.234Z","caller":"watcher/upload.go:67","msg":"Successfully uploaded log to S3: namespace/pipeline-run-name"}
    {"level":"info","ts":"2023-05-15T10:30:47.345Z","caller":"watcher/upload.go:67","msg":"Log upload completed for task-run: namespace/task-run-name"}
    # Verify secret contents (carefully!)
    kubectl get secret my-s3-secret -n tekton-pipelines -o yaml

    Пример вывода:

    apiVersion: v1
    kind: Secret
    metadata:
      name: my-s3-secret
      namespace: tekton-pipelines
    data:
      s3-secret-key: <s3 secret data>
      ......
    type: Opaque
    # Test S3 connectivity from within cluster
    kubectl run s3-test --image=minio/mc --restart=Never -n tekton-pipelines --rm -it -- \
      mc alias set my-s3 https://your-endpoint your-access-key your-secret-key || echo "Connection failed"

    Пример вывода:

    s3-test
    If you don't see a command prompt, try pressing enter.
    Connection established. Waiting for command completion.
    Pod s3-test terminated

    Шаги проверки

    1. Проверьте, что компоненты запущены:

      kubectl get pods -n tekton-pipelines
      # Look for tekton-results-api, tekton-results-watcher, and optionally tekton-results-retention-policy-agent

      Пример вывода:

      NAME                                          READY   STATUS    RESTARTS   AGE
      tekton-results-api-7d5b8c9c4-xl2v9            1/1     Running   0          10m
      tekton-results-watcher-6b4f7c8d5-z3n4p        1/1     Running   0          10m
      tekton-results-retention-policy-agent-5c9g2   1/1     Running   0          10m
    2. Создайте PipelineRun для загрузки журналов:

      # Create a simple test pipelinerun
      kubectl get pods -n tekton-pipelines -l app.kubernetes.io/name=tekton-results-watcher

      Пример вывода:

      NAME                                     READY   STATUS    RESTARTS   AGE
      tekton-results-watcher-6b4f7c8d5-z3n4p   1/1     Running   0          10m
    3. Проверьте подключение к S3:

      • Убедитесь, что журналы появляются в вашем bucket S3
      • Проверьте, что структура журналов соответствует ожиданиям
      • Убедитесь, что политики хранения работают ожидаемым образом

    Анализ журналов

    Отслеживайте следующие ключевые журналы для диагностики конфигурации S3:

    • Журналы Tekton Results API для операций загрузки и скачивания S3
    • Журналы Tekton Results Watcher для первоначального захвата и передачи журналов
    • Журналы службы S3 (если доступны) для подтверждения создания и удаления объектов
    • Журналы событий Kubernetes для любых проблем, связанных с ресурсами

    Ищите конкретные шаблоны ошибок:

    • Сбои аутентификации
    • Тайм-ауты подключения
    • Ошибки разрешений
    • Проблемы сетевого подключения
    • Сбои SSL/TLS handshake

    Проблемы производительности

    Если возникают проблемы с производительностью:

    1. Проверьте использование ресурсов:

      # kubectl top command requires metrics-server to be installed in the cluster
      kubectl top pods -n tekton-pipelines

      Пример вывода:

      NAME                                          CPU(cores)   MEMORY(bytes)
      tekton-results-api-7d5b8c9c4-xl2v9            15m          55Mi
      tekton-results-watcher-6b4f7c8d5-z3n4p        8m           32Mi
      tekton-results-retention-policy-agent-5c9g2   5m           28Mi
    2. Контролируйте сетевую производительность:

      • Проверьте пропускную способность между кластером и S3 endpoint
      • Отслеживайте потерю пакетов или высокую задержку
    3. Настройте параметры multipart:

      • Увеличьте S3_MULTI_PART_SIZE для лучшей производительности в сетях с высокой задержкой
      • Рассмотрите настройку размеров worker pool при обработке большого объема журналов