• Русский
  • Конфигурация базы данных

    В этом документе описывается, как настроить базу данных, необходимую для Tekton Results.

    NOTE

    В настоящее время мы поддерживаем только подключение к внешним базам данных. Это связано с тем, что:

    • Встроенная база данных не обладает необходимыми для продакшена функциями, такими как резервное копирование, мониторинг, высокая доступность и расширенные возможности управления. Она предоставляет только базовое хранение и возможность запросов, что делает её непригодной для продакшен-сред.
    • Внешние базы данных предлагают полный набор корпоративных функций, включая автоматическое резервное копирование, мониторинг производительности, масштабирование и профессиональную поддержку, что критично для продакшен-развертываний.
    • Наш продукт Data Services уже предоставляет полноценные возможности управления PostgreSQL.

    Требования

    Требования к кластеру

    • В кластере должен быть установлен Tekton Operator.

    Требования к базе данных

    Версия:

    • PostgreSQL 12 или выше
    • Рекомендуется использовать более новые версии для более длительной поддержки

    Настройка базы данных:

    • База данных должна уже существовать
    • База данных должна быть пустой (Tekton Results автоматически создаст необходимые таблицы)
    • Убедитесь, что у пользователя базы данных есть права на создание таблиц

    Команда создания базы данных:

    CREATE DATABASE tekton_results;

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

    Tekton Results поддерживает использование внешних баз данных PostgreSQL. Конфигурация разделена на две части:

    1. Учетные данные базы данных (имя пользователя и пароль) хранятся в Kubernetes Secrets
    2. Параметры подключения к базе данных (хост, порт, имя базы, настройки SSL) настраиваются в пользовательском ресурсе TektonConfig в разделе spec.result

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

    ПолеОписаниеЗначение по умолчаниюОбязательное
    is_external_dbИспользовать внешнюю базу данныхfalseДа (установить true для внешней БД)
    db_hostАдрес хоста базы данныхlocalhostДа
    db_portПорт базы данных5432Да
    db_nameИмя базы данныхtekton_resultsДа
    db_sslmodeРежим SSL подключенияdisableНет
    db_sslrootcertПуть к корневому SSL-сертификатуПустоНет (требуется при использовании SSL)
    db_secret_nameИмя секрета с учетными даннымиПустоДа

    Допустимые значения для db_sslmode описаны здесь https://www.postgresql.org/docs/current/libpq-ssl.html#LIBPQ-SSL-PROTECTION.

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

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

    1. Создайте учетные данные базы данных

    Обязательные поля в секрете:

    ПолеОписаниеПример значения
    POSTGRES_USERИмя пользователяresult
    POSTGRES_PASSWORDПароль пользователяyour_secure_password

    Команда создания секрета:

    kubectl create secret generic tekton-results-postgres \
      --namespace="tekton-pipelines" \
      --from-literal=POSTGRES_USER=result \
      --from-literal=POSTGRES_PASSWORD=your_secure_password

    Пример YAML секрета:

    apiVersion: v1
    kind: Secret
    type: Opaque
    metadata:
      name: tekton-results-postgres
      namespace: tekton-pipelines # ваш namespace для tekton pipelines
    data:
      POSTGRES_USER: <base64 encoded username>
      POSTGRES_PASSWORD: <base64 encoded password>

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

    apiVersion: operator.tekton.dev/v1alpha1
    kind: TektonConfig
    metadata:
      name: config
    spec:
      result:
        is_external_db: true
        db_host: your-postgres-host.example.com
        db_port: 5432
        db_name: tekton_results
        db_sslmode: allow
        db_secret_name: tekton-results-postgres
    TIP

    В этом документе перечислены только поля конфигурации, связанные с базой данных. Для полного списка полей смотрите Quick Start.

    3. Проверьте конфигурацию

    kubectl get tektonconfig config
    kubectl get pods -n tekton-pipelines -l app.kubernetes.io/name=tekton-results-api
    TIP

    Этот Quick Start охватывает только базовую конфигурацию. Для продакшен-сред с SSL, расширенной безопасностью или пользовательскими CA-сертификатами смотрите раздел Advanced Configuration ниже.

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

    Настройка SSL

    Если требуется защищенное подключение к базе данных, можно настроить параметры, связанные с SSL:

    Руководство по выбору режима SSL:

    СредаРекомендуемый режимУровень безопасностиОписание
    DevelopmentdisableНетБез шифрования
    TestingrequireБазовыйШифрованное соединение
    Productionverify-fullМаксимальныйШифрование + проверка сертификата

    Описание режимов SSL

    sslmodeЗащита от прослушиванияЗащита от MITMОписание
    disableНетНетМне не важна безопасность, и я не хочу платить за накладные расходы шифрования.
    allowВозможноНетМне не важна безопасность, но я готов платить за шифрование, если сервер настаивает на этом.
    preferВозможноНетМне не важна безопасность, но я хочу платить за шифрование, если сервер это поддерживает.
    requireДаНетЯ хочу, чтобы мои данные были зашифрованы, и принимаю накладные расходы. Я доверяю сети, что всегда подключусь к нужному серверу.
    verify-caДаЗависит от политики CAЯ хочу, чтобы мои данные были зашифрованы, и принимаю накладные расходы. Я хочу быть уверен, что подключаюсь к доверенному серверу.
    verify-fullДаДаЯ хочу, чтобы мои данные были зашифрованы, и принимаю накладные расходы. Я хочу быть уверен, что подключаюсь к доверенному серверу, и что это именно он.

    Разница между verify-ca и verify-full зависит от политики корневого CA. Если используется публичный CA, verify-ca допускает подключение к серверу, зарегистрированному кем-то другим в CA. В этом случае всегда следует использовать verify-full. Если используется локальный CA или самоподписанный сертификат, verify-ca часто обеспечивает достаточную защиту.

    WARNING

    Важно: При использовании режимов SSL require, verify-ca или verify-full необходимо предоставить CA-сертификат, который подписал сертификат сервера базы данных. Без правильной настройки CA-сертификата компоненты Tekton Results не смогут запуститься. Подробные шаги настройки смотрите в разделе Configuring Custom CA Certificates ниже.

    Настройка пользовательских CA-сертификатов

    При использовании режимов SSL, требующих проверки сертификата (require, verify-ca, verify-full), необходимо предоставить CA-сертификат, подписавший сертификат сервера базы данных. Наиболее распространенный способ — сохранить CA-сертификат в ConfigMap и смонтировать его в поды Tekton Results.

    Шаг 1: Создайте ConfigMap с CA-сертификатом

    Если у вас есть файл CA-сертификата с именем root.crt, создайте ConfigMap:

    kubectl create configmap db-root-crt -n tekton-pipelines --from-file ca.crt=./root.crt

    Шаг 2: Настройте TektonConfig с монтированием тома

    Чтобы сделать CA-сертификат доступным в контейнерах, необходимо настроить ресурс TektonConfig с дополнительными options в spec.result для монтирования ConfigMap:

    apiVersion: operator.tekton.dev/v1alpha1
    kind: TektonConfig
    metadata:
      name: config
    spec:
      result:
        is_external_db: true
        # Конфигурация подключения к базе данных
        db_host: your-postgres-host.example.com
        db_port: 5432
        db_name: tekton_results
        db_sslmode: verify-full
        db_sslrootcert: /etc/tls/db/ca.crt
        # Конфигурация секрета
        db_secret_name: tekton-results-postgres
        # Опции для монтирования CA-сертификата
        options:
          deployments:
            tekton-results-api:
              spec:
                template:
                  spec:
                    containers:
                      - name: api
                        volumeMounts:
                          - mountPath: /etc/tls/db
                            name: postgredb-tls-ca
                            readOnly: true
                    volumes:
                      - configMap:
                          name: db-root-crt
                        name: postgredb-tls-ca
            tekton-results-retention-policy-agent:
              spec:
                template:
                  spec:
                    containers:
                      - name: retention-policy-agent
                        volumeMounts:
                          - mountPath: /etc/tls/db
                            name: postgredb-tls-ca
                            readOnly: true
                    volumes:
                      - configMap:
                          name: db-root-crt
                        name: postgredb-tls-ca

    С этой конфигурацией:

    • CA-сертификат будет доступен в контейнерах по пути /etc/tls/db/ca.crt
    • Установите db_sslrootcert в /etc/tls/db/ca.crt для соответствия пути монтирования
    • И API-сервер, и агент политики удержания будут иметь доступ к CA-сертификату

    Операции

    Обновление конфигурации базы данных

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

    Вариант 1: Перезапустить конкретные деплойменты

    # Перезапустить API сервер
    kubectl delete pod -n tekton-pipelines -l app.kubernetes.io/name=tekton-results-api
    
    # Перезапустить агент политики удержания
    kubectl delete pod -n tekton-pipelines -l app.kubernetes.io/name=tekton-results-retention-policy-agent

    Вариант 2: Воссоздать ресурс TektonConfig

    # Получить текущий ресурс TektonConfig и воссоздать его
    kubectl get tektonconfig config -o yaml | kubectl replace --force -f -

    Проверка изменений:

    # Проверить, что поды запущены с новой конфигурацией
    kubectl get pods -n tekton-pipelines -l app.kubernetes.io/name=tekton-results-api
    kubectl get pods -n tekton-pipelines -l app.kubernetes.io/name=tekton-results-retention-policy-agent
    WARNING

    Если вы обновляете поле db_sslmode, возможно, потребуется воссоздать ресурс TektonConfig, чтобы изменения вступили в силу.

    kubectl get tektonconfig config -o yaml | kubectl replace --force -f -

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

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

    1. Connection refused:

      • Проверьте хост и порт базы данных
      • Проверьте сетевое соединение
      • Убедитесь, что база данных запущена
    2. Authentication failed:

      • Проверьте имя пользователя и пароль в секрете
      • Проверьте права пользователя базы данных
    3. Ошибки SSL-сертификата:

      • Проверьте правильность монтирования CA-сертификата
      • Проверьте конфигурацию режима SSL
      • Убедитесь, что путь к сертификату совпадает с путем монтирования

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

    # Проверить статус TektonConfig
    kubectl get tektonconfig config -o yaml
    
    # Просмотреть логи подов
    kubectl logs -n tekton-pipelines -l app.kubernetes.io/name=tekton-results-api
    
    # Проверить наличие секрета
    kubectl get secret tekton-results-postgres -n tekton-pipelines

    Использование PostgreSQL из Data Services

    Data Services поддерживает развертывание экземпляров PostgreSQL, которые можно использовать для Tekton Results. При создании экземпляра PostgreSQL обратите внимание на следующие важные требования:

    1. Выберите версию PostgreSQL, соответствующую версии Tekton Results, например, PostgreSQL 12.x или выше.
    2. Квота хранилища не должна быть меньше 5Gi

    При создании экземпляра PostgreSQL автоматически создается Secret с информацией для подключения. Этот ресурс Secret можно отфильтровать по метке middleware.instance/type: PostgreSQL.

    kubectl get secret -n <ns-of-postgresql-instance> -l middleware.instance/type=PostgreSQL | grep -E '^postgres'
    INFO

    Этот Secret содержит информацию host, port, username, password. Вам нужно дополнить информацию о database на основе этого секрета и создать новый секрет в namespace, где расположен экземпляр Tekton Results.

    Если необходимо установить sslmode, задайте db_sslmode в разделе spec.result ресурса TektonConfig в значение allow или prefer и т.п.

    Для получения дополнительной информации о параметрах и требованиях к развертыванию PostgreSQL смотрите PostgreSQL Deployment Documentation.