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

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

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

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

База данных PostgreSQL

  • Необходимая версия: =>12
  • Рекомендуемый 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/values.tar.gz
  • Необходимые настройки:

    • для каждого сервиса необходима отдельная БД;
    • имя БД выставляется в env переменной PG_DB;
    • для БД (filestorage, profile, groups, polls) необходимо установить extention pg_trgm, btree_gin;
    • в настройках выставить max_connections=1000.

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

Pgbouncer

  • Необходимая версия: =>1.20.1
  • Рекомендуемый helm chart: chart.people-hub.ru/pgbouncer версия 3.31.3
  • Рекомендованные values к инфраструктурным сервисам и скрипты размещены по ссылке https://raw.people-hub.ru/infra/values.tar.gz
  • Необходимые настройки: настройка доступа для всех БД или через wildcard выражение *=host=ph-develop-postgresql

Kafka

  • Необходимая версия: =>7.0.1
  • Рекомендуемый helm chart: oci://registry-1.docker.io/bitnamicharts/kafka версия 25.1.4
  • Helm chart источник: oci://registry-1.docker.io/bitnamicharts/kafka версия 25.1.4
  • Рекомендованные values к инфраструктурным сервисам и скрипты размещены по ссылке https://raw.people-hub.ru/infra/values.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: oci://registry-1.docker.io/bitnamicharts/minio версия 12.8.12
  • Рекомендованные values к инфраструктурным сервисам и скрипты размещены по ссылке https://raw.people-hub.ru/infra/values.tar.gz
  • Helm chart источник: oci://registry-1.docker.io/bitnamicharts/minio версия 12.8.12
  • Необходимые настройки:
    • необходимо создать объектное хранилище для работы системы;
    • на данный момент, для работы портала объектное хранилище должно иметь права доступа public и проксирование запросов с пути /media и /media-fs.

Keycloak

  • Необходимая версия: 22.0.1
  • Рекомендуемый helm chart: oci://registry-1.docker.io/bitnamicharts/keycloak версия 16.1.1
  • Helm chart источник: oci://registry-1.docker.io/bitnamicharts/keycloak версия 16.1.1
  • Рекомендованные values к инфраструктурным сервисам и скрипты размещены по ссылке https://raw.people-hub.ru/infra/values.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

Redis

  • Необходимая версия: 5.0.7
  • Рекомендуемый helm chart: chart.people-hub.ru/redis:3.37.2
  • Helm chart источник: oci://registry-1.docker.io/bitnamicharts/redis версия 3.37.2
  • Рекомендованные values к инфраструктурным сервисам и скрипты размещены по ссылке https://raw.people-hub.ru/infra/values.tar.gz
  • Необходимые настройки:
    • С релиза 4.17.1 можно размещать все БД сервисов в одном экземпляре Redis.

ClickHouse

  • Необходимая версия: 22.0.1
  • Рекомендуемый helm chart: chart.people-hub.ru/keycloak:16.1.1
  • Helm chart источник: oci://registry-1.docker.io/bitnamicharts/clickhouse версия 16.1.1
  • Рекомендованные values к инфраструктурным сервисам и скрипты размещены по ссылке https://raw.people-hub.ru/infra/values.tar.gz

Airflow

  • Необходимая версия: 2.7.2
  • Рекомендуемый helm chart: chart.people-hub.ru/redis: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/values.tar.gz

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

Вы всегда можете установить инфраструктурные компоненты удобным для вас способом используя техническое описание сервисов и требования к инфраструктурным компонентам. Но мы рекомендуем устанавливать продукт через предостовляемые нами helm chart и файлы values. Дальнейшая иструкция показывает как установить рекомендуемым нами способом.

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

  • Установлена утилита 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/values.tar.gz. Для доступа необходимо использовать учетные данные, которые вы получили от вашего менеджера.

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

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

  • Установленный Local Path Provisioner. Инструкция установки local-path-provisioner размещена по ссылке https://github.com/rancher/local-path-provisioner

Postgresql

Установка

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

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

    • {{ $.Values.postgres.user }}
    • {{ $.Values.postgres.password }}
  2. Установить сервис командой helm install postgresql people-hub/postgresql --version=13.2.26 -f values-pg.yaml -n people-hub

Настройка

  1. Создать базы данных PostgreSQL для сервисов. Для создания БД можно использовать скрипт, передав ему как аргумент файл со списком БД, пользователей и паролей.

Скрипт для создания БД (PostgreSQL)

    #!/bin/sh
    DATABASES=(
    "blogs"
    "calendar"
    "cms"
    "comments"
    "dictionaries"
    "events"
    "filestorage"
    "gamification"
    "groups"
    "keycloak"
    "meetings"
    "news"
    "notifications"
    "pages"
    "polls"
    "profile"
    "reports"
    "roles"
    "settings"
    "tasks"
    "termsofuse"
    "timelines"
    "idea"
    "reactions"
    )

    for DB in "${DATABASES[@]}"
    do
        # Create database
        echo "SELECT 'CREATE DATABASE $DB' WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = '$DB')\gexec" | \
        psql -d "postgres://postgres:$POSTGRESQL_PASSWORD@localhost/$POSTGRESQL_DATABASE"
        # Create database extensions
        psql -d "postgres://postgres:$POSTGRESQL_PASSWORD@localhost/$POSTGRESQL_DATABASE" \
        -c 'CREATE EXTENSION IF NOT EXISTS btree_gin' \
        -c 'CREATE EXTENSION IF NOT EXISTS pg_trgm' \
        -c 'CREATE EXTENSION IF NOT EXISTS pgcrypto' \
        -c 'CREATE EXTENSION IF NOT EXISTS uuid-ossp'
        # Grant privileges
        psql -d "postgres://postgres:$POSTGRESQL_PASSWORD@localhost/$POSTGRESQL_DATABASE" \
        -c "GRANT ALL PRIVILEGES ON DATABASE $DB to $POSTGRESQL_USERNAME"
    done

Пример файла со списком БД (PostgreSQL) db_list.txt

    asyncblogs user1 VerySecretPassword
    calendar user1 VerySecretPassword
    cms-backend user1 VerySecretPassword
    comments user1 VerySecretPassword
    dictionaries user1 VerySecretPassword
    discovery user1 VerySecretPassword
    events user1 VerySecretPassword
    filestorage user1 VerySecretPassword
    gamification user1 VerySecretPassword
    groups user1 VerySecretPassword
    meetings user1 VerySecretPassword
    news user1 VerySecretPassword
    notifications user1 VerySecretPassword
    pages user1 VerySecretPassword
    polls user1 VerySecretPassword
    profile user1 VerySecretPassword
    reports user1 VerySecretPassword
    roles user1 VerySecretPassword
    settings user1 VerySecretPassword
    tasks user1 VerySecretPassword
    termsof-use-service user1 VerySecretPassword
    websockets-notifications user1 VerySecretPassword

Pgbouncer

Установка

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

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

- `{{ envs.POSTGRESQL_HOST=${PG_HOST} }}`
- `{{ envs.POSTGRESQL_PORT=${PG_PORT} }}`
- `{{ secretEnvs.POSTGRESQL_PASSWORD=${PG_PASSWORD} }}`
- `{{ secretEnvs.POSTGRESQL_USERNAME=${PG_USER} }}`

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

Настройка

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

Airflow

Установка

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

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

  • name: "KEYCLOAK_API_USERNAME" value: "api-username"
  • name: "KEYCLOAK_API_PASSWORD" value: "password"
  • name: "KEYCLOAK_API_BASE_URL" value: "http://keycloak/auth"
  • name: "KEYCLOAK_API_REALM" value: "realm" data: metadataConnection: user: airflow protocol: postgresql+psycopg2 host: postgresqlhost port: 5432 db: airflow sslmode: disable pass: pass config: webserver: base_url: "https://some-domain.ru/airflow" ingress: web: hosts:
    • name: "uat.people-hub.ru" tls: enabled: true secretName: "people-hub.ru" scheduler: extraInitContainers:
    • name: get-dags-from-s3 env:
      • name: DAGS_VERSION value: "3.60.1" workers: extraInitContainers:
    • name: get-dags-from-s3 env:
      • name: DAGS_VERSION value: "3.60.1"

Установить сервис командой helm install airflow people-hub/airflow --version=1.11.0 -f values-airflow.yaml -n people-hub

Настройка

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

Minio

Установка

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

  1. В файле конфигурации values-pg.yaml сменить следующие переменные на данные, которые вы будете использовать:
  • rootUser: ph-admin
  • rootPassword: y345mgr96njwijn45qwrgf
  • hostname: minio-test.people-hub.ru
  • extraTls:
  • hosts:
    • minio-test.people-hub.ru
  • secretName: "people-hub.ru-tls"
  1. Установить сервис командой helm install minio release/minio --version=12.8.12 -f values-minio.yaml -n people-hub

Настройка

  • Сделать объектное хранилище публичным с помощью GUI. Инструкция размещена по ссылке https://min.io/docs/minio/linux/reference/minio-mc/mc-anonymous-set.html
  • Добавить в объектное хранилище следующие данные для настройки сервисов Airflow, Keycloak.
    • Добавить папку init и разместить в ней themes.tar.gz для Keycloak. Источник: https://raw.people-hub.ru/init/themes.tar.gz
    • Загрузить из источника и переименовать файл dags-{release}.tar.gz в dags.tar.gz. Загрузить переименованный файл dags.tar.gz в папку init объектного хранилища. Источник: https://raw.people-hub.ru/airflow/dags-3-60-1.tar.gz

Keycloak

Установка

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

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

    • adminUser: ph-admin
    • adminPassword: "sdfgitj8945hrfw984"
    • hostname: test.people-hub.ru
    • extraTls:
      • hosts:
        • test.people-hub.ru
    • secretName: "people-hub.ru-tls"
    • Если используется внешнее S3 хранилище, заменить в values-keycloak.yaml initContainers.args
  2. Установить сервис командой helm upgrade --install keycloak release/keycloak --version=16.1.1 -f values-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

Redis

Установка

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

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

    • adminUser: ph-admin
    • adminPassword: "sdfgitj8945hrfw984"
    • hostname: test.people-hub.ru
    • extraTls:
      • hosts:
        • test.people-hub.ru
    • secretName: "people-hub.ru-tls"
  2. Установить сервис командой helm upgrade --install keycloak release/keycloak --version=16.1.1 -f values-keycloak.yaml -n people-hub

Настройка

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

ClickHouse

Установка

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

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

    • password: huj2eifush7Gie
    • username: ph
    • storageClass: "csi-ceph-ssd-ms1"
  2. Установить сервис командой helm upgrade --install clickhouse release/clickhouse --version=4.1.16 -f values-ch.yaml -n people-hub

Настройка

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

Kafka

Установка

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

  1. Установить сервис командой helm upgrade --install kafa release/kafka --version=25.1.4 -f values-kafka.yaml -n people-hub

Настройка

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