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

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

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

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

База данных PostgreSQL

  • Необходимая версия: 12-15
  • Рекомендуемый 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

  • Необходимая версия: 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

  • Необходимая версия: 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

  • Необходимая версия: => 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

  • Необходимая версия: 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

  • Необходимая версия: 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

  • Необходимая версия: 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

  • Необходимая версия: 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

Настройка

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