• Русский
  • Настройка базы данных

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

    NOTE

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

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

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

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

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

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

    Версия:

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

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

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

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

    CREATE DATABASE tekton_results;

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

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

    1. Учетные данные базы данных (имя пользователя и пароль) хранятся в Kubernetes Secrets
    2. Параметры подключения к базе данных (host, port, имя базы данных, параметры 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Имя Secret с учетными данными базы данныхПустоДа

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

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

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

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

    Обязательные поля в Secret:

    ПолеОписаниеПример значения
    POSTGRES_USERИмя пользователя БДresult
    POSTGRES_PASSWORDПароль базы данныхyour_secure_password

    Команда для создания Secret:

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

    Пример YAML для Secret:

    apiVersion: v1
    kind: Secret
    type: Opaque
    metadata:
      name: tekton-results-postgres
    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 рассматривается только базовая конфигурация. Для production-сред с SSL, расширенной безопасностью или пользовательскими CA-сертификатами см. раздел Расширенная конфигурация ниже.

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

    Настройка 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 не смогут запуститься. Подробные шаги настройки см. в разделе Настройка пользовательских CA-сертификатов ниже.

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

    При использовании режимов SSL, требующих проверки сертификата (require, verify-ca, verify-full), необходимо предоставить CA-сертификат, который подписал сертификат сервера базы данных. Наиболее распространенный подход — сохранить CA-сертификат в ConfigMap и смонтировать его в pods 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
        # Конфигурация Secret
        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 server, и retention policy agent будут иметь доступ к CA-сертификату

    Операции

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

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

    Вариант 1: перезапустить определенные deployments

    # Перезапуск API server
    kubectl delete pod -n tekton-pipelines -l app.kubernetes.io/name=tekton-results-api
    
    # Перезапуск retention policy agent
    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 -

    Проверьте изменения:

    # Проверить, запущены ли pods с новой конфигурацией
    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:

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

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

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

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

    # Проверить статус TektonConfig
    kubectl get tektonconfig config -o yaml
    
    # Проверить логи pods
    kubectl logs -n tekton-pipelines -l app.kubernetes.io/name=tekton-results-api
    
    # Проверить, что Secret существует
    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 на основе этого Secret и создать новый secret в namespace, где расположен экземпляр Tekton Results.

    Если требуется задать sslmode, установите db_sslmode в секции spec.result TektonConfig в allow, prefer и т. д.

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