Перейти к содержанию

Подготовка и установка инфраструктуры

Требования к инфраструктурным компонентам

Для работы продукта VK People Hub необходимы элементы инфраструктуры, описанные ниже.

База данных PostgreSQL

Необходимая версия БД PostgreSQL: 14 и выше.

Рекомендуемый helm chart:

  • chart.people-hub.ru/postgresql,

  • версия 13.2.26.

Helm chart источник:

  • oci://registry-1.docker.io/bitnamicharts/postgresql,

  • версия 13.2.26.

Рекомендованные values к инфраструктурным сервисам и скрипты размещены по ссылке https://raw.people-hub.ru/infra/ph-install.tar.gz.

Необходимые настройки:

  • для каждого сервиса необходима отдельная БД;

  • имя БД выставляется в env переменной PG_DB;

  • для всех БД необходимо установить extention pg_trgm, btree_gin, pgcrypto, uuid-ossp;

  • в настройках выставить max_connections=1000.

  • нужен пользователь с доступом ко всем базам данных.

Сервисы соединяются с БД через Pgbouncer.

Pgbouncer

Необходимая версия Pgbouncer: 1.22.1.

Рекомендуемый helm chart:

  • chart.people-hub.ru/universal-chart,

  • версия 2.4.1.

Рекомендованные values к инфраструктурным сервисам и скрипты размещены по ссылке https://raw.people-hub.ru/infra/ph-install.tar.gz.

Необходимые настройки:

  • настройка доступа для всех БД или через wildcard выражение *=host=ph-develop-postgresql.

Kafka

Необходимая версия Kafka: 3.5.1.

Рекомендуемый helm chart:

  • chart.people-hub.ru/kafka,

  • версия 25.1.4.

Helm chart источник:

  • oci://registry-1.docker.io/bitnamicharts/kafka,

  • версия 13.2.26.

Рекомендованные values к инфраструктурным сервисам и скрипты размещены по ссылке https://raw.people-hub.ru/infra/ph-install.tar.gz.

Необходимые настройки:

  • настройка подключения клиентов к брокеру через переменную KAFKA_BROKER;

  • настроить listeners:

    client:
        containerPort: 9092
        protocol: PLAINTEXT
        name: CLIENT
        sslClientAuth: ""
    controller:
        name: CONTROLLER
        containerPort: 9093
        protocol: PLAINTEXT
        sslClientAuth: ""
    

Minio

Необходимая версия Minio: 2023.10.24.

Рекомендуемый helm chart:

  • chart.people-hub.ru/minio,

  • версия 12.8.12.

Helm chart источник:

  • oci://registry-1.docker.io/bitnamicharts/minio,

  • версия 12.8.12.

Рекомендованные values к инфраструктурным сервисам и скрипты размещены по ссылке https://raw.people-hub.ru/infra/ph-install.tar.gz.

Необходимые настройки:

  • создать объектное хранилище для работы системы;

  • для работы портала объектное хранилище должно иметь права доступа public и проксирование запросов с пути /media и /media-fs.

Keycloak

Необходимая версия Keycloak: 23.0.6.

Рекомендуемый helm chart:

  • chart.people-hub.ru/keycloak,

  • версия 17.3.6.

Helm chart источник:

  • oci://registry-1.docker.io/bitnamicharts/keycloak,

  • версия 17.3.6.

Рекомендованные values к инфраструктурным сервисам и скрипты размещены по ссылке https://raw.people-hub.ru/infra/ph-install.tar.gz.

Необходимые настройки:

  • создать Realm (ph);

  • создать клиента с настройками по умолчанию, добавить в Valid redirect URIs * и Web origins *;

  • в клиенте добавить роль superuser;

  • добавить Client scopes – ph, добавить mappers:

    1. имя – aud;

      Mapper type – Audience;

      Included Client Audience – ph-client;

      Add to ID token – on;

      Add to access token – on;

    2. имя – client roles;

      Mapper type – User Client Role;

      Add to ID token – on;

      Add to access token – on;

  • добавить Client scope в клиента;

  • добавить пользователя в Realm с правами администратора ph-admin, создать ему пароль и добавить следующие роли:

    • realm-management: manage-users,

    • realm-management: view-authorization,

    • realm-management: view-events,

    • realm-management: realm-admin,

    • realm-management: query-clients,

    • realm-management: query-realms,

    • realm-management: view-clients,

    • realm-management: view-users,

    • realm-management: impersonation,

    • realm-management: manage-identity-providers,

    • realm-management: manage-events,

    • realm-management: view-realm,

    • realm-management: manage-authorization,

    • realm-management: manage-clients,

    • realm-management: query-groups,

    • realm-management: view-identity-providers,

    • realm-management: create-client,

    • realm-management: manage-realm,

    • realm-management: query-users,

  • для администрирования продукта необходимо создать пользователя с клиентской ролью Администратор системы (superuser) и задать ему пароль.

Redis

Необходимая версия Redis 7.

Рекомендуемый helm chart:

  • chart.people-hub.ru/redis,

  • версия 18.4.0.

Helm chart источник:

  • oci://registry-1.docker.io/bitnamicharts/redis,

  • версия 18.4.0.

Рекомендованные values к инфраструктурным сервисам и скрипты размещены по ссылке https://raw.people-hub.ru/infra/ph-install.tar.gz.

Начиная с релиза 4.17.1, можно размещать все БД сервисов в одном экземпляре Redis.

ClickHouse

Необходимая версия ClickHouse: 23.12.

Рекомендуемый helm chart:

  • chart.people-hub.ru/clickhouse,

  • версия 4.1.16.

Helm chart источник:

  • oci://registry-1.docker.io/bitnamicharts/clickhouse,

  • версия 4.1.16.

Рекомендованные values к инфраструктурным сервисам и скрипты размещены по ссылке https://raw.people-hub.ru/infra/ph-install.tar.gz.

Airflow

Необходимая версия Airflow: 2.7.2.

Рекомендуемый helm chart:

  • chart.people-hub.ru/airflow,

  • версия 1.11.0,

  • helm chart источник:

        helm repo add apache-airflow https://airflow.apache.org
        helm pull airflow apache-airflow/airflow --version 1.11.0
    

Рекомендованные values к инфраструктурным сервисам и скрипты размещены по ссылке https://raw.people-hub.ru/infra/ph-install.tar.gz.

Установка инфраструктурных компонентов

Вы всегда можете установить инфраструктурные компоненты удобным для вас способом используя техническое описание сервисов и требования к инфраструктурным компонентам. Но мы рекомендуем устанавливать продукт через предостовляемые нами helm chart и файлы values. Дальнейшая иструкция показывает как установить рекомендуемым нами способом. Все компонеты устанавляваются командой helm install или helm upgrade --install. Все valus файлы можно составить самим из чартов или скачать созданные нами https://raw.people-hub.ru/infra/ph-install.tar.gz в папке infrastructure. Так же в архиве есть скрипт по установке с инструкцией.

Для установки необходимо проверить следующие компонеты:

  • Установлена утилита kubectl и настроен доступ к кластеру kubernetes. Инструкцию можно найти на сайте производителя https://kubernetes.io/ru/docs/tasks/tools/install-kubectl/.

  • Установлен helm. Инструкцию можно найти на сайте производителя https://helm.sh/docs/intro/install/.

  • Добавлен helm репозиторий people-hub helm repo add people-hub https://chart.people-hub.ru --username <login> --password <password>. Где <login> и <password> учётные данные, которые вы получили от вашего менеджера.

  • Для доступа к docker репозиторию необходимо создать regcred секрет в kubernetes используя учётные данные, которые вы получили от вашего менеджера. Инструкция размещена по ссылке https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/. Секрет должен находится в namespace, где будет установлен продукт VK People Hub.

  • Файлы настроек всех компонентов размещены по ссылке https://raw.people-hub.ru/infra/ph-install.tar.gz. Для доступа необходимо использовать учетные данные, которые вы получили от вашего менеджера.

  • Создать namespace people-hub $ kubectl create namespace people-hub

  • Установленный ingress контроллер. Инструкция установки размещена по ссылке https://docs.nginx.com/nginx-ingress-controller/installation/installing-nic/installation-with-manifests/

  • Если у вашего провайдера нет persistent volume provisioner, то нужно установить Local Path Provisioner. Инструкция установки local-path-provisioner размещена по ссылке https://github.com/rancher/local-path-provisioner. Далее имя класса нужно будет вставлять в настройки всех PV.

  • Так же нужно будет создать секрет с данными от TLS сертификата. https://kubernetes.io/docs/reference/kubectl/generated/kubectl_create/kubectl_create_secret_tls/. Для этого вам понадобятся сертификат и приватный ключ от него. Далее это имя нужно будет вставлять в настройки всех ingress.

Postgresql

Установка

Для установки необходимо:

  1. В файле конфигурации postgresql.yaml сменить следующие переменные на данные, которые вы будете использовать:

    • global.storageClass=csi-ceph-ssd-me1 - Имя класса для PV
    • global.postgresql.auth.postgresPassword=* Пароль для пользователя postgres
    • global.postgresql.auth.username=ph имя пользователя
    • global.postgresql.auth.password=* пароль пользователя
    • global.postgresql.auth.database=ph база данных пользователя
  2. Установить сервис командой helm upgrade --install postgresql people-hub/postgresql --version=13.2.26 -f postgresql.yaml -n people-hub

Настройка

Дополнительная настройка не требуется. Базы данных и расширения устанавливаются в скрипте инициализации. Изменить список можно в postgresql.yaml primary.initdb.scripts

Pgbouncer

Установка

Для установки необходимо:

В файле конфигурации values-pgbouncer.yaml сменить следующие переменные на данные, которые вы будете использовать (данные из values postgresql):

- envs.POSTGRESQL_HOST=postgresql-master - адрес хоста postgresql. (Имя сервиса мастера или внешний адрес.)
- envs.POSTGRESQL_PORT=5432 - номер порта postresql
- secretEnvs.POSTGRESQL_PASSWORD=*** - пароль пользователя
- secretEnvs.POSTGRESQL_USERNAME=ph - имя пользователя

Для pgboucer-exporter нужно изменить следующие значения - name: PGBOUNCER_PORT value: "5432" номер порта pgboucer - name: PGBOUNCER_USER value: "ph" имя пользователя - name: PGBOUNCER_PWD value: "ph-pass" пароль пользователя

Установить сервис командой helm upgrade --install pgbouncer people-hub/universal-chart --version=2.4.1 -f pgbouncer.yaml -n people-hub

Настройка

Дополнительная настройка не требуется.

Airflow

Установка

Для установки необходимо:

В файле конфигурации airflow.yaml сменить следующие переменные на данные, которые вы будете использовать:

env:
  - name: "KEYCLOAK_API_USERNAME"
    value: "api-username"           Пользователь с правами доступа к API keycloak
  - name: "KEYCLOAK_API_PASSWORD"
    value: "password"               Пароль пользователя с правами доступа к API keycloak
  - name: "KEYCLOAK_API_BASE_URL"
    value: "http://keycloak/auth"   URL keyckloak
  - name: "KEYCLOAK_API_REALM"
    value: "realm"                  Realm keycloak
data:
  metadataConnection:
    user: airflow                   Пользователь базы данных postgresql
    protocol: postgresql+psycopg2
    host: postgresql-master         Хост базы данных postgresql
    port: 5432                      Порт базы данных postgresql
    db: airflow                     Имя базы данных postgresql
    sslmode: disable
    pass: pass                      Пароль пользователь базы данных postgresql
ingress:
  web:
    hosts:
      - name: "some-domain.ru"                 Имя домена для airflow для ингресса
        tls:
          enabled: true
          secretName: "some-domain.ru-tls"     Имя секрета TLS для ингресса
scheduler:
  extraInitContainers:
    - name: get-dags-from-s3
      env:
        - name: DAGS_VERSION
          value: "4.30.1"                      Версия DAGS
workers:
  extraInitContainers:
    - name: get-dags-from-s3
      env:
        - name: DAGS_VERSION
          value: "4.30.1"                      Версия DAGS
config:
  webserver:
    enable_proxy_fix: 'True'
    base_url: "https://some-domain.ru/airflow" Имя домена для airflow
Установить сервис командой helm upgrade --install airflow people-hub/airflow --version=1.11.0 -f values-airflow.yaml -n people-hub

Minio

Установка

Для установки необходимо:

  1. В файле конфигурации minio.yaml сменить следующие переменные на данные, которые вы будете использовать:
  • global.storageClass: csi-ceph-ssd-me1 - Имя класса для PV
  • auth.rootUser: ph-admin Имя пользователя с правами администратора
  • auth.rootPassword: pass Пароль пользователя с правами администратора
  • provisioning.users.username: sfdvuefnvisjniuer2efdwe Имя пользователя с правами доступа к бакету ph-media
  • provisioning.users.password: asvosuernvie45gnjwkej5s Пароль пользователя с правами доступа к бакету ph-media
  • ingress.hostname: minio.some-domain.ru
  • apiIngress.extraTls:
  • hosts:
    • minio.some-domain.ru
  • secretName: "some-domain.ru-tls"
  • persistence.size: 15Gi Размер PV для S3
  1. Установить сервис командой helm upgrade --install minio people-hub/minio --version=12.8.12 -f minio.yaml -n people-hub

Настройка

Keycloak

Установка

Для установки необходимо:

  1. В файле конфигурации keycloak.yaml сменить следующие переменные на данные, которые вы будете использовать:

    • auth.adminUser: ph-admin Имя пользователя с правами администратора
    • auth.adminPassword: "password" Пароль пользователя с правами администратора
    • hostname: some-domain.ru Имя домена
    • extraTls:
      • hosts:
        • some-domain.ru Имя домена
    • secretName: "some-domain.ru-tls" Имя секрета TLS для ингресса
    • externalDatabase.database: keycloak Имя базы данных postgresql
    • externalDatabase.host: postgresql-master Хост базы данных postgresql
    • externalDatabase.password: pass Пароль пользователь базы данных postgresql
    • externalDatabase.port: 5432 Порт базы данных postgresql
    • externalDatabase.user: ph Пользователь базы данных postgresql
  2. Установить сервис командой helm upgrade --install keycloak people-hub/keycloak --version=17.3.6 -f keycloak.yaml -n people-hub

Настройка

На данный момент установка создает типовой реалм. Если вам нужен свой, отличный от типового, то после установки нужно:

  1. Создать Realm (ph)

  2. Создать клиента с настройками по умолчанию, добавить в:

    • Valid redirect URIs *
    • Web origins *
  3. В клиенте добавить роль superuser

  4. Добавить Client scopes - ph, добавить mappers

    • имя - aud
      Mapper type - Audience
      Included Client Audience - ph-client
      Add to ID token - on
      Add to access token - on
    • имя - client roles
      Mapper type - User Client Role
      Add to ID token - on
      Add to access token - on
    • добавить Client scope в клиента
  5. Добавить пользователя в Realm с правами администратора ph-admin, создать ему пароль и добавить следующие роли:

    • realm-management: manage-users
    • realm-management: view-authorization
    • realm-management: view-events
    • realm-management: realm-admin
    • realm-management: query-clients
    • realm-management: query-realms
    • realm-management: view-clients
    • realm-management: view-users
    • realm-management: impersonation
    • realm-management: manage-identity-providers
    • realm-management: manage-events
    • realm-management: view-realm
    • realm-management: manage-authorization
    • realm-management: manage-clients
    • realm-management: query-groups
    • realm-management: view-identity-providers
    • realm-management: create-client
    • realm-management: manage-realm
    • realm-management: query-users
  6. Поднять приоритет типа шифрования. Для этого в настройках реалма (Realm settings) на вкладке Keys, зайти в настройку провайдеров шифрования (Add providers) и проверить что в самом верху находится (rsa-generated) провайдер. Если нет, то перетащить его туда. Или создать если его там нет.

  7. Кастомизация дизайна страницы авторизации.

    Стандартная тема страницы авторизации продукта VK People Hub размещена в хранилище https://raw.people-hub.ru/init/themes.tar.gz. Она используется при установке Keycloak. Для изменения дизайна страницы авторизации необходимо выполнить следующие действия:

    • Создайте тему по инструкции.
    • Соберите tar архив.
    • Разместите tar архив в любом доступном для исполняемой среды Kubernetes месте (например, объектное хранилище, с включенным публичным доступом для загруженного файла).
    • Измените путь в values файлу к helm chart Keycloak

      - name: get-theme
          args:
          - |-
          if ! [[ -d /opt/bitnami/keycloak/themes/ph ]]; then \
              cd /opt/bitnami/keycloak/themes; \
              curl https://{Путь к архиву с темой} | tar -xz; \
              printf "\033[0;32mKeycloak theme successfully downloaded\033[0m\n"; \
          else \
              printf "\033[0;31mFound Keycloak theme\033[0m\n"; \
          fi
          command:
          - '/bin/sh'
          - '-c'
      
    • Запустите обновление Keycloak командой helm upgrade

Redis

Установка

Для установки необходимо:

  1. В файле конфигурации redis.yaml сменить следующие переменные на данные, которые вы будете использовать:

    • global.storageClass: csi-ceph-ssd-me1 Имя класса для PV
  2. Установить сервис командой helm upgrade --install redis people-hub/redis --version=18.4.0 -f redis.yaml -n people-hub

Настройка

Дополнительная настройка не требуется.

ClickHouse

Установка

Для установки необходимо:

  1. В файле конфигурации values-ch.yaml сменить следующие переменные на данные, которые вы будете использовать:

    • auth.password: some_pass Пароль пользователя с правами администратора
    • auth.username: some_user Имя пользователя с правами администратора
    • common.storageClass: storage_class Имя класса для PV
    • extraEnvVars.KAFKA_BROKER: kafka:9092 Адрес Kafka
    • extraEnvVars.ANALYTIC_TOPIC: analytic Топик Kafka
    • extraEnvVars.CLICKHOUSE_ANALYTIC_GROUP: clickhouse_analytic_group Имя группы Kafka
    • extraEnvVars.S3_URL: http://minio:9000/ph-media/clickhouse Адрес объектного хранилища S3
    • extraEnvVars.S3_KEY_ID: id ID ключа объектного хранилища S3
    • extraEnvVars.S3_SECRET_KEY: key Cекретный ключ объектного хранилища S3
  2. Установить сервис командой helm upgrade --install clickhouse people-hub/clickhouse --version=4.1.16 -f clickhouse.yaml -n people-hub

Настройка

Дополнительная настройка не требуется.

Kafka

Установка

Для установки необходимо:

  1. В файле конфигурации kafka.yaml сменить следующие переменные на данные, которые вы будете использовать:

    • controller.persistence.storageClass: "csi-ceph-ssd-me1" Имя класса для PV
    • controller.persistence.size: 5Gi Размер PV
  2. Установить сервис командой helm upgrade --install kafa people-hub/kafka --version=25.1.4 -f kafka.yaml -n people-hub

Настройка

Дополнительная настройка не требуется.