Подготовка и установка инфраструктуры¶
Требования к инфраструктурным компонентам¶
Для работы продукта 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
- имя - 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
- имя - aud
- добавить 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¶
Установка¶
Для установки необходимо:
-
В файле конфигурации 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 база данных пользователя
-
Установить сервис командой
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¶
Установка¶
Для установки необходимо:
- В файле конфигурации 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
- Установить сервис командой
helm upgrade --install minio people-hub/minio --version=12.8.12 -f minio.yaml -n people-hub
Настройка¶
- Сделать объектное хранилище публичным с помощью GUI. Инструкция размещена по ссылке https://min.io/docs/minio/linux/reference/minio-mc/mc-anonymous-set.html
Keycloak¶
Установка¶
Для установки необходимо:
-
В файле конфигурации keycloak.yaml сменить следующие переменные на данные, которые вы будете использовать:
- auth.adminUser:
ph-admin
Имя пользователя с правами администратора - auth.adminPassword:
"password"
Пароль пользователя с правами администратора - hostname:
some-domain.ru
Имя домена - extraTls:
- hosts:
some-domain.ru
Имя домена
- hosts:
- 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
- auth.adminUser:
-
Установить сервис командой
helm upgrade --install keycloak people-hub/keycloak --version=17.3.6 -f keycloak.yaml -n people-hub
Настройка¶
На данный момент установка создает типовой реалм. Если вам нужен свой, отличный от типового, то после установки нужно:
-
Создать Realm (ph)
-
Создать клиента с настройками по умолчанию, добавить в:
- Valid redirect URIs *
- Web origins *
-
В клиенте добавить роль superuser
-
Добавить 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 в клиента
- имя - aud
-
Добавить пользователя в 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
-
Поднять приоритет типа шифрования. Для этого в настройках реалма (Realm settings) на вкладке Keys, зайти в настройку провайдеров шифрования (Add providers) и проверить что в самом верху находится (rsa-generated) провайдер. Если нет, то перетащить его туда. Или создать если его там нет.
-
Кастомизация дизайна страницы авторизации.
Стандартная тема страницы авторизации продукта 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¶
Установка¶
Для установки необходимо:
-
В файле конфигурации redis.yaml сменить следующие переменные на данные, которые вы будете использовать:
- global.storageClass:
csi-ceph-ssd-me1
Имя класса для PV
- global.storageClass:
-
Установить сервис командой
helm upgrade --install redis people-hub/redis --version=18.4.0 -f redis.yaml -n people-hub
Настройка¶
Дополнительная настройка не требуется.
ClickHouse¶
Установка¶
Для установки необходимо:
-
В файле конфигурации 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
-
Установить сервис командой
helm upgrade --install clickhouse people-hub/clickhouse --version=4.1.16 -f clickhouse.yaml -n people-hub
Настройка¶
Дополнительная настройка не требуется.
Kafka¶
Установка¶
Для установки необходимо:
-
В файле конфигурации kafka.yaml сменить следующие переменные на данные, которые вы будете использовать:
- controller.persistence.storageClass: "csi-ceph-ssd-me1" Имя класса для PV
- controller.persistence.size: 5Gi Размер PV
-
Установить сервис командой
helm upgrade --install kafa people-hub/kafka --version=25.1.4 -f kafka.yaml -n people-hub
Настройка¶
Дополнительная настройка не требуется.