Подготовка и установка инфраструктуры¶
Требования к инфраструктурным компонентам¶
Для работы продукта 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
- имя - 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
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¶
Установка¶
Для установки необходимо:
-
В файле конфигурации values-pg.yaml сменить следующие переменные на данные, которые вы будете использовать:
{{ $.Values.postgres.user }}
{{ $.Values.postgres.password }}
-
Установить сервис командой
helm install postgresql people-hub/postgresql --version=13.2.26 -f values-pg.yaml -n people-hub
Настройка¶
- Создать базы данных 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¶
Установка¶
Для установки необходимо:
- В файле конфигурации 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"
- Установить сервис командой
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¶
Установка¶
Для установки необходимо:
-
В файле конфигурации values-keycloak.yaml сменить следующие переменные на данные, которые вы будете использовать:
- adminUser:
ph-admin
- adminPassword:
"sdfgitj8945hrfw984"
- hostname:
test.people-hub.ru
- extraTls:
- hosts:
test.people-hub.ru
- hosts:
- secretName:
"people-hub.ru-tls"
- Если используется внешнее S3 хранилище, заменить в values-keycloak.yaml initContainers.args
- adminUser:
-
Установить сервис командой
helm upgrade --install keycloak release/keycloak --version=16.1.1 -f values-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
Redis¶
Установка¶
Для установки необходимо:
-
В файле конфигурации values-redis.yaml сменить следующие переменные на данные, которые вы будете использовать:
- adminUser:
ph-admin
- adminPassword:
"sdfgitj8945hrfw984"
- hostname:
test.people-hub.ru
- extraTls:
- hosts:
test.people-hub.ru
- hosts:
- secretName:
"people-hub.ru-tls"
- adminUser:
-
Установить сервис командой
helm upgrade --install keycloak release/keycloak --version=16.1.1 -f values-keycloak.yaml -n people-hub
Настройка¶
Дополнительная настройка не требуется.
ClickHouse¶
Установка¶
Для установки необходимо:
-
В файле конфигурации values-ch.yaml сменить следующие переменные на данные, которые вы будете использовать:
- password:
huj2eifush7Gie
- username:
ph
- storageClass:
"csi-ceph-ssd-ms1"
- password:
-
Установить сервис командой
helm upgrade --install clickhouse release/clickhouse --version=4.1.16 -f values-ch.yaml -n people-hub
Настройка¶
Дополнительная настройка не требуется.
Kafka¶
Установка¶
Для установки необходимо:
- Установить сервис командой
helm upgrade --install kafa release/kafka --version=25.1.4 -f values-kafka.yaml -n people-hub
Настройка¶
Дополнительная настройка не требуется.