Установка для промышленной эксплуатации

Структура дистрибутива и конфигурационный файл values.yaml

Совет

Скрипт init.sh — это единая точка входа для развертывания дистрибутива и выполнения вспомогательных скриптов.

Внутри скрипта используются стандартные команды утилит kubectl и helm (менеджер пакетов для Kubernetes). Все доступные параметры конфигурации развертывания описаны в файле helm/values.yaml.

Структура дистрибутива

  • CHANGELOG.md — список изменений всех версий релизов.

  • EULA.md — лицензионное соглашение конечного пользователя. Описывает условия использования программного обеспечения.

  • README.md — основная документация по установке и настройке.

  • datalens-enterprise-images.txt — список Docker-образов и их версий, которые используются в дистрибутиве.

  • datalens-enterprise-images.tar.gz — архив Docker-образов.

  • init.sh — главный скрипт для развертывания и администрирования дистрибутива.

  • meta.json — метаданные о текущем релизе, включая версии ключевых компонентов и контрольные суммы релиза.

  • bin/ — содержит исполняемые файлы утилит:

    • kubectl — инструменты для взаимодействия с кластером Kubernetes.
    • helm — пакетный менеджер для управления Helm-чартами.
    • helm-diff — вспомогательная утилита для управления Helm-релизами, помогает отображать список изменений при обновлении.
    • stern — утилита для просмотра логов в Kubernetes-кластере.
    • k9s — утилита для администрирования Kubernetes-кластера с визуальным интерфейсом внутри терминала.
    • prgz — утилита для отображения прогресса распаковки архивов внутри дистрибутива. Необходима для поддержания SSH-сессии в рабочем состоянии в процессе распаковки.
    • yq — инструмент для обработки и парсинга файлов JSON и YAML.
  • helm/ — содержит Helm-чарты и шаблоны для развертывания:

    • Chart.yaml — основная информация о Helm-чарте.
    • values.yaml — файл конфигурации со значениями по умолчанию.
    • templates/ — шаблоны Kubernetes-манифестов (deployment, service, volume и т. д.).
  • help/ — содержит вспомогательные инструкции и примеры конфигураций:

    • docs/id-sync.md/pdf/html — инструкция по настройке скрипта для синхронизации групп пользователей с внешними провайдерами.
    • docs/ldap.md/pdf/html — инструкция по настройке интеграции с LDAP.
    • docs/oidc.md/pdf/html — инструкция по настройке интеграции с OpenID, который совместим с внешним провайдером аутентификации на примере Keycloak.
    • auth-provider-config.example.json — пример конфигурации для провайдеров аутентификации.
    • docker-config.example.json — пример конфигурации для доступа к приватному реестру Docker-образов.
    • idp-sync.js — пример синхронизации групп пользователей из внешней IdP-системы (Identity Provider).
    • values.example.yaml — пример заполненного файла конфигурации с правильным экранированием значений. Значения указаны для примера и не могут быть использованы в таком виде для развертывания.
  • k3s/ — содержит ресурсы для установки K3s-кластера полностью в офлайн-режиме:

    • install.sh — скрипт установки и настройки K3s-кластера.
    • k3s — утилита управления K3s-кластером.
    • k3s-images.tar.zst — архив с системными образами для K3s-кластера.

Гибкая настройка конфигурации через файл values.yaml

Важно

Никогда не редактируйте ./helm/values.yaml напрямую! Иначе при ошибке в файле нарушится работа сервиса.

Для редактирования скопируйте файл ./helm/values.example.yaml и работайте с ним. Таким образом вы всегда сможете вернуться к изначальной конфигурации. Затем передайте путь к вашему файлу через аргумент --values.

Файл helm/values.yaml — часть базового шаблона развертывания. Прямое редактирование параметров конфигурации в этом файле приведет к некорректной проверке контрольной суммы дистрибутива при развертывании.

При использовании параметра --values все остальные аргументы, переданные в скрипт init.sh и связанные с конфигурацией развертывания дистрибутива, проигнорируются. Скрипт будет считать my-prod-values.yaml единственной точкой истины для развертывания, поэтому файл должен содержать корректное описание всех параметров развертывания.

cp ./helm/values.example.yaml ./my-prod-values.yaml
        # ... отредактируйте my-prod-values.yaml ...
        ./init.sh --values ./my-prod-values.yaml
        

Если нужно переопределить только часть параметров через файл my-prod-values.yaml, то итоговая команда должна выглядеть так:

cp ./helm/values.example.yaml ./my-prod-values.yaml
        # ... отредактируйте my-prod-values.yaml ...
        ./init.sh --values ./my-prod-values.yaml --values-merge
        

Параметр --values-merge позволяет указать неполный файл values.yaml в качестве источника конфигурации. Недостающие параметры будут подставлены из значений по умолчанию.

Обзор сервисов дистрибутива и их сетевого взаимодействия

DataLens — это набор микросервисов. Скрипт установки развернет их в Kubernetes. Внешний трафик от пользователя пройдет на Ingress-контроллер, который направит его на сервис ui. Далее ui будет взаимодействовать с бэкенд-сервисами (us, control_api, data_api) по внутренним сетевым именам Kubernetes.

image

Развертывание с внешним кластером PostgreSQL

Встроенная БД для production-среды — неэффективная практика. Нужно использовать внешний управляемый кластер PostgreSQL. При большом количестве пользователей это позволит гибко работать с объектами сервиса и выстроить отказоустойчивую архитектуру.

Алгоритм действий

  1. В файле my-prod-values.yaml отключите встроенный PostgreSQL:

    infra:
              postgres:
                enabled: false # Отключите встроенный PostgreSQL
            
  2. В том же файле в секции postgres укажите параметры подключения к внешнему кластеру:

    postgres:
              POSTGRES_HOST: 'your-pg-host.db.example.com'
              POSTGRES_PORT: '5432'
              # ... и другие параметры пользователей и баз, если они отличаются от стандартных
            
  3. На старте пароли можно указать в init.sh, но это небезопасно — лучше передавать их через секреты.

При запуске установки с таким values.yaml DataLens не будет создавать свой под с PostgreSQL, а сразу подключится к указанному вами внешнему кластеру.

Использование собственных TLS-сертификатов

Самоподписанные сертификаты подходят для тестирования, но в production браузеры покажут пользователям предупреждения — нужно использовать сертификаты, выпущенные вашим корпоративным или публичным центром сертификации (CA).

Для этого используются аргументы --ingress-tls-crt и --ingress-tls-key:

./init.sh \
        --k3s-install \
        --ingress-domain datalens.mycompany.com \
        --ingress-tls \
        --ingress-tls-crt /path/to/your/cert.pem \
        --ingress-tls-key /path/to/your/private.key
        

Скрипт сохранит эти сертификаты в секреты Kubernetes, и Ingress-контроллер использует их для терминирования TLS-трафика.

Особенности развертывания библиотеки Highcharts в закрытом контуре

По умолчанию некоторые типы чартов используют библиотеку Highcharts. С будущими релизами планируется переезд в библиотеку D3. Дополнительного лицензирования не нужно, пользователь выступает в качестве аналитика.

Рекомендации по проектированию отказоустойчивой архитектуры

Высокая доступность (High Availability, или HA) достигается за счет дублирования компонентов. В Kubernetes это делается через увеличение количества реплик.

В файле values.yaml есть секция application, в которой для каждого сервиса можно указать replicas.

application:
          control_api:
            replicas: 2 # Запустите два экземпляра control-api — сервиса управления подключениями и датасетами
          data_api:
            replicas: 3 # Запустите три экземпляра data-api — сервиса, который обращается в источник
          us:
            replicas: 2 # Запустите два экземпляра us — сервиса для хранения метаданных
          # ... и так далее
        

Рекомендации по масштабированию

  • Начинайте масштабировать самые нагруженные компоненты: data_api, control_api, us.
  • Для полноценного HA нужен отказоустойчивый кластер Kubernetes из нескольких нод (серверов). Установка с флагом --k3s-install создает кластер из одной ноды и не является отказоустойчивой.
  • Используйте внешний отказоустойчивый кластер PostgreSQL и Redis®.

Практика: настройка values.yamlдля production

Подготовьте конфигурационный файл для сценария промышленной установки.

Цель: Создать файл prod-config.yaml, который настраивает DataLens для работы с внешним PostgreSQL и отключает демоданные.

Шаги

  1. Скопируйте ./helm/values.example.yaml в файл с именем prod-config.yaml.

  2. Откройте prod-config.yaml в текстовом редакторе.

  3. Найдите секцию infra.postgres и установите enabled: false.

  4. В секции postgres измените POSTGRES_HOST на prod-pg.db.internal.

  5. Найдите секцию features.demo и установите enabled: false, чтобы не развертывать демонстрационные дашборды в production-среде.

  6. Сохраните файл. Не нужно выполнять установку, достаточно только подготовить файл.

Совет

Предлагаем сделать задание самостоятельно, а далее узнать эталонный ответ, он под скрытым блоком ниже.

Эталонный ответ (фрагменты файла prod-config.yaml)
# ...
        infra:
          postgres:
          enabled: false
        # ...
        postgres:
          POSTGRES_HOST: prod-pg.db.internal
        # ...
        features:
          demo:
            enabled: false
        # ...
        

Итоги

Вы разобрали важные аспекты установки DataLens для промышленной эксплуатации. Теперь вы знаете, как управлять конфигурацией через values.yaml и подключать внешние системы.