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

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

    NOTE

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

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

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

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

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

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

    Версия:

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

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

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

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

    CREATE DATABASE tekton_results;

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

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

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

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

    ПолеОписаниеЗначение по умолчаниюОбязательно
    is_external_dbИспользовать ли внешнюю базу данныхfalseДа (установите true для external DB)
    db_hostАдрес host базы данныхlocalhostДа
    db_portPort базы данных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
      namespace: tekton-pipelines # your tekton pipelines namespace
    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 Mode:

    ОкружениеРекомендуемый режимУровень безопасностиОписание
    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 с mount'ами томов

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

    apiVersion: operator.tekton.dev/v1alpha1
    kind: TektonConfig
    metadata:
      name: config
    spec:
      result:
        is_external_db: true
        # Database connection configuration
        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 configuration
        db_secret_name: tekton-results-postgres
        # Options for mounting CA certificate
        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, и агент retention policy будут иметь доступ к CA-сертификату

    Операции

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

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

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

    # Restart the API server
    kubectl delete pod -n tekton-pipelines -l app.kubernetes.io/name=tekton-results-api
    
    # Restart the retention policy agent
    kubectl delete pod -n tekton-pipelines -l app.kubernetes.io/name=tekton-results-retention-policy-agent

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

    # Get the current TektonConfig resource and recreate it
    kubectl get tektonconfig config -o yaml | kubectl replace --force -f -

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

    # Check if the pods are running with the new configuration
    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 mode
      • Убедитесь, что путь к сертификату совпадает с путем монтирования

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

    # Check TektonConfig status
    kubectl get tektonconfig config -o yaml
    
    # Check pod logs
    kubectl logs -n tekton-pipelines -l app.kubernetes.io/name=tekton-results-api
    
    # Verify Secret exists
    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.