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

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

    Содержание

    ОбзорКлючевые преимуществаПредварительные требованияТребования к системе храненияРазрешенияОбзор конфигурацииСправочник параметров конфигурацииПараметры, специфичные для S3, в секретеДетали параметровБазовая конфигурация1. Подготовьте ваше хранилище S32. Создайте секрет с учетными данными S33. Настройте ресурс TektonConfig4. Примените конфигурациюРасширенная конфигурацияНастройка размера multipartКонфигурация, специфичная для CephПример полной конфигурации для продакшенаПример конфигурации для MinIOКонфигурация максимального размера логаКонфигурация feature gateПример конфигурации max-log-sizeОперацииОбновление конфигурации S3Команды для проверкиЛучшие практикиВопросы безопасностиОптимизация производительностиУправление хранениемПравила именованияРекомендации по эксплуатацииРекомендации для совместимых с S3 хранилищВопросы безопасностиУправление учетными даннымиСетевая безопасностьМониторинг и аудитУстранение неполадокРаспространённые проблемыПроблемы, связанные с безопасностьюДиагностические командыШаги проверкиАнализ логовПроблемы с производительностью

    Обзор

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

    Ключевые преимущества

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

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

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

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

    Разрешения

    • Возможность создавать бакеты
    • Права на чтение/запись/удаление для назначенного бакета логов
    • Правильно настроенные IAM-политики или механизмы контроля доступа

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

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

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

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

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

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

    ПолеОписаниеПример значенияОбязательноПримечания
    S3_BUCKET_NAMEИмя бакета S3 для хранения логовtekton-logsДаБакет должен существовать и быть доступным
    S3_ENDPOINTURL эндпоинта сервиса S3https://s3.example.comНет (для AWS)Обязательно для сервисов, совместимых с S3, кроме AWS
    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Флаг неизменности имени хоста S3falseНетУстановить в true, если имя хоста не должно изменяться AWS SDK
    S3_MULTI_PART_SIZEРазмер частей для multipart upload5242880НетПорог размера для multipart-загрузок (по умолчанию 5 МБ)

    Детали параметров

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

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

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

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

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

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

    2. Создайте секрет с учетными данными 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:

      • Имя бакета для хранения логов
      • URL эндпоинта S3 (например, https://ceph.example.com для Ceph)
      • Соответствующий идентификатор региона
      • Учетные данные с правами чтения/записи/удаления
    2. Создайте секрет с помощью 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. Проверьте создание секрета:

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

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

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

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

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

    apiVersion: operator.tekton.dev/v1alpha1
    kind: TektonConfig
    metadata:
      name: config
    spec:
      result:
        # Включить API логов и указать S3 как тип хранения
        logs_api: true
        logs_type: S3
        
        # Ссылка на секрет с учетными данными S3
        secret_name: my-s3-secret
        
        # Если используется внешняя база данных (рекомендуется для продакшена)
        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 с настройкой внешней базы данных для полноценного продакшен-окружения.

    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

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

    Настройка размера multipart

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

    # В вашем секрете S3
    stringData:
      S3_MULTI_PART_SIZE: "10485760"  # размер multipart 10 МБ

    Конфигурация, специфичная для Ceph

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

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

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

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

    ---
    # Секрет с учетными данными S3
    apiVersion: v1
    kind: Secret
    type: Opaque
    metadata:
      name: tekton-results-s3-credentials
      namespace: tekton-pipelines
    stringData:
      # Конфигурация S3
      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"  # порог multipart 5 МБ
    ---
    # Конфигурация TektonConfig
    apiVersion: operator.tekton.dev/v1alpha1
    kind: TektonConfig
    metadata:
      name: config
    spec:
      result:
        # Включить хранение логов на базе S3
        logs_api: true
        logs_type: S3
        
        # Конфигурация внешней базы данных
        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  # отдельные учетные данные БД
        secret_name: tekton-results-s3-credentials  # учетные данные S3

    Пример конфигурации для 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. Эта функция является улучшением (патчем) и пока недоступна в сообществе Tekton Results.

    Конфигурация feature gate

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

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

    FEATURE_GATES='PartialResponse=true,MaxLogSize=true'

    Другой способ — настроить переменную окружения FEATURE_GATES непосредственно в деплойменте 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  # должно совпадать с именем контейнера в исходном деплойменте
                      env:
                      - name: FEATURE_GATES
                        value: "PartialResponse=true,MaxLogSize=true"

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

    Пример конфигурации max-log-size

    После включения 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 МБ)

    Детали конфигурации:

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

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

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

    Операции

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

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

    Перезапуск API сервера:

    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"
    # Просмотр логов подов для проверки подключения к 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"}
    # Проверка существования секрета
    kubectl get secret my-s3-secret -n tekton-pipelines
    # Проверка запущенных подов с конфигурацией 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 с минимально необходимыми правами (чтение, запись, удаление в конкретном бакете)
    2. Безопасное хранение учетных данных: храните учетные данные в Kubernetes Secrets, а не в открытых конфигурационных файлах
    3. Регулярная ротация ключей: внедрите процесс периодической смены ключей доступа S3 (например, ежеквартально)
    4. Сетевая безопасность: обеспечьте защищенное сетевое соединение между кластером и S3-эндпоинтом, предпочтительно через приватные сети или VPN
    5. Принцип наименьших привилегий: предоставляйте только минимально необходимые права для учетных данных S3
    6. Шифрование: убедитесь, что ваше совместимое с S3 хранилище поддерживает серверное шифрование для сохраненных логов

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

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

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

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

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

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

    Рекомендации по эксплуатации

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

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

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

    Вопросы безопасности

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

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

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

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

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

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

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

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

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

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

      • Проверьте правильность ключа доступа и секретного ключа
      • Убедитесь, что IAM-политики предоставляют необходимые права
      • Проверьте, что регион совпадает с регионом сервиса S3
      • Убедитесь, что учетные данные не истекли и не были изменены
    3. Отказ в доступе:

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

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

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

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

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

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

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

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

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

    # Проверка статуса ресурса 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
    status:
      conditions:
      - type: Ready
        status: "True"
        reason: ReconcileSuccess
        message: "All components are reconciled successfully"
    # Просмотр подробного статуса
    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
    # .....
    # Проверка всех связанных подов
    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
    # Просмотр логов API сервера с сообщениями, связанными с S3
    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"}
    # Просмотр логов watcher для операций загрузки
    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"}
    # Осторожно проверьте содержимое секрета
    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
    # Тест подключения к S3 изнутри кластера
    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
      # Ищите tekton-results-api, tekton-results-watcher и опционально 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 для загрузки логов:

      # Создайте простой тестовый 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:

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

    Анализ логов

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

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

    Обращайте внимание на следующие ошибки:

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

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

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

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

      # Для команды kubectl top требуется установленный metrics-server в кластере
      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-эндпоинтом
      • Следите за потерями пакетов и высокой задержкой
    3. Настройка multipart:

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