unip-controller/deploy/controller.md
2025-04-15 20:56:15 +03:00

211 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Развертывание контроллеров, сервисов управления данными и отслеживания экспериментов
Для развертывания необходимо создать ресурсы Kubernetes,
применив манифесты из папки unip-controller из проекта развертывания unip-components из поставки фреймворка.
Применение манифестов осуществляется командой `kubectl apply -f <имя файла манифеста>`.
Развертывание включает следующие шаги:
1. Создание пространства имен;
2. Создание ресурсов kopf;
3. Создание определений ресурсов фреймворка;
4. Подключение системной СУБД и настройка БД;
5. Подключение объектного хранилища;
6. Подключение сервиса развертывания;
7. Подключение внешнего поставщика реквизитов (OIDC провайдера);
8. Конфигурация сервиса отслеживания экспериментов;
9. Конфигурация сервиса управления данными;
10. Конфигурация контроллера модулей данных;
11. Конфигурация контроллера публикации API;
12. Создание ресурса размещения Kubernetes;
## Создание пространства имен
Применить манифест командой `kubectl apply -f ns.yaml`.
## Создание ресурсов kopf
Применить манифест командой `kubectl apply -f kopf/peering.yaml`.
## Создание определений ресурсов фреймворка
Применить манифесты из папки crd командой `kubectl apply -f <имя файла манифеста>`.
## Подключение системной СУБД и настройка БД
### Подготовка среды для настройки
Установить psql клиент PostgreSQL. Для Ubuntu:
`apt-get install -y postgresql-client`
Подключиться к системной СУБД.
Команды для подключения, если системная СУБД развернута в кластере Kubernetes в пространстве unip-system-database:
`kubectl port-forward service/postgres 5432:5432 -n unip-system-database`
`psql -h 127.0.0.1 -p 5432 -U postgres -W`
### Создание БД
Выполнить команды psql:
```
postgres=#
CREATE USER unip_system_pipelines WITH PASSWORD '<password>';
CREATE DATABASE unip_system_pipelines;
GRANT ALL PRIVILEGES ON DATABASE unip_system_pipelines TO unip_system_pipelines;
ALTER DATABASE unip_system_pipelines OWNER TO unip_system_pipelines;
```
Установить привилегии, выполнив команды psql
(важно выполнять при подключении к БД, для которой устанавливаются привилегии):
```
unip_system_pipelines=#
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO unip_system_pipelines;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public to unip_system_pipelines;
GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public to unip_system_pipelines;
```
### Подключение БД к сервису отслеживания экспериментов
Создать ресурс Secret `unip_system_pipelines` с реквизитами доступа к БД
по образцу pipelines/pipelines-db-credentials-secret.yaml.
Значение параметров в Secret `unip_system_pipelines` см. в описании
[конфигурации](config.md) сервиса отслеживания экспериментов.
## Подключение объектного хранилища
### Создание StorageClass
1. Создать ресурс Secret `csi-s3-secret` по образцу s3/csi-s3-credentials-secret.yaml.sample.
Secret должен содержать реквизиты доступа к объектному хранилищу с правами получения списка бакетов;
2. Создать ресурс StorageClass из манифеста s3/sc.yaml;
### Создание бакета для хранения пользовательских данных
1. В объектном хранилище создать бакет `platform-default-user-bucket`.
Его имя может быть любым, но если оно отличается от `platform-default-user-bucket`,
то необходимо изменить значение параметра `UNIP_BOXES_S3_DEFAULT_USER_DATA_BUCKET`
в ресурсах конфигурации (ниже);
2. Создать ресурс Secret `aws-vars-s3-credentials` по образцу s3/csi-s3-credentials-secret.yaml.sample.
Secret должен содержать реквизиты доступа к объектному хранилищу с правами чтения и записи
в бакет хранения пользовательских данных;
### Подключение объектного хранилища
Уточнить конфигурацию доступа к объектному хранилищу в манифесте files/files-cm.yaml и применить манифест.
Уточнить конфигурацию доступа к объектному хранилищу в манифесте databoxes/databoxes-cm.yaml и применить манифест.
Значение параметров в манифестах см. в описании
[конфигурации](config.md) фреймворка.
## Подключение сервиса развертывания
Создать ресурс Secret `argo-cd-credentials` по образцу argo-cd/argo-cd-credentials-secret.yaml.sample.
Уточнить конфигурацию сервиса развертывания в манифесете argo-cd/argo-cd-cm.yaml.
Значение параметров в манифестах см. в описании
[конфигурации](config.md) сервиса развертывания.
## Подключение внешнего поставщика реквизитов (OIDC провайдера)
### Настройка внешнего поставщика реквизитов Keycloak
Для настройки OIDC провайдера Keycloak выполнить следующие шаги:
1. Создать реалм для конечных пользователей и реалм для робот аккаунтов (может использоваться один реалм,
но более безопасно использовать два реалма, например, `end-users` и `robots`);
2. Создать публичный (Client authentication - Off; Standard flow - Enabled; Direct access grants - Enabled)
и конфиденциальный клиенты (Client authentication - On)
в каждом из реалмов (конфиденциальный клиент также называется административным клиентом).
3. Конфиденциальный клиент в реалме конечных пользователей должен иметь права:
1. Управлять группами (просматривать, создавать, удалять, перемещать между родителями).
2. Добавлять в группы и удалять из групп пользователей.
3. Выполнять поиск и просмотр пользователей.
4. Конфиденциальный клиент в реалме робот аккаунтов должен иметь те же права, плюс:
1. Управлять пользователями (просматривать, создавать, удалять, перемещать между родителями).
Опционально в расширенных (advanced) настройках клиента Keycloak можно указать время жизни токена:
Access Token Lifespan.
### Подключение внешнего поставщика к контроллеру ссылок
Проверить и уточнить конфигурацию OIDC в манифесете oidc/oidc-cm.yaml. Применить манифест oidc/oidc-cm.yaml.
Создать ресурс Secret `oidc-credentials` по образцу oidc-credentials-secret.yaml.sample в папке ./oidc.
Значения атрибутов `OIDC_END_USERS_CLIENT_SECRET`, `OIDC_ROBOTS_CLIENT_SECRET`, `OIDC_END_USERS_COOKIE_SECRET`
могут быть взяты из образца без изменений.
Значение параметров манифестах см. в описании
[конфигурации](config.md) внешнего поставщика реквизитов.
Создать пространство имен для хранения реквизитов робот аккаунтов из манифеста keycloak-robots-creds-ns.yaml.
При изменении имени пространства имен изменить значение атрибута `UNIP_REPOSITORY_KEYCLOAK_ROBOTS_CREDS_NAMESPACE`
в ConfigMap oidc-cm.yaml.
После настройки OIDC провайдера Keycloak выполнить:
1. Уточнить настройки OIDC в манифесте ConfigMap oidc-cm.yaml в папке ./oidc и создать ресурс из манифеста.
2. Создать ресурс Secret `oidc-credentials` по образцу oidc-credentials-secret.yaml.sample в папке ./oidc.
1. Значения атрибутов `OIDC_END_USERS_CLIENT_SECRET`, `OIDC_ROBOTS_CLIENT_SECRET`, `OIDC_END_USERS_COOKIE_SECRET`
могут быть взяты из образца без изменений.
3. Создать пространство имен для хранения реквизитов робот аккаунтов из манифеста keycloak-robots-creds-ns.yaml.
При изменении имени пространства имен изменить значение атрибута `UNIP_REPOSITORY_KEYCLOAK_ROBOTS_CREDS_NAMESPACE`
в ConfigMap oidc-cm.yaml.
## Конфигурация сервиса отслеживания экспериментов
Проверить и уточнить конфигурацию сервиса отслеживания экспериментов в манифесете pipelines/pipelines-cm.yaml.
Применить манифест ./pipelines/pipelines-cm.yaml.
Значение параметров манифеста см. в описании
[конфигурации](config.md) сервиса отслеживания экспериментов.
## Конфигурация сервиса управления данными
Проверить и уточнить конфигурацию сервиса управления данными в манифесете files/files-cm.yaml.
Применить манифест ./files/files-cm.yaml.
Значение параметров манифеста см. в описании
[конфигурации](config.md) сервиса управления данными.
## Конфигурация контроллера модулей данных
Проверить и уточнить конфигурацию сервиса управления данными в манифесете ./datasets/datasets-cm.yaml.
Применить манифест ./datasets/datasets-cm.yaml.
Значение параметров манифеста см. в описании
[конфигурации](config.md) контроллера модулей данных.
## Конфигурация контроллера публикации API
### Настройка CORS (опционально)
Проверить и уточнить конфигурацию CORS в манифесете ./apicmps/cors.yaml.
Применить манифест ./apicmps/cors.yaml.
Значение параметров манифеста см. в описании
[конфигурации](config.md) конфигурации CORS.
## Создание ресурса размещения Kubernetes
1. Уточнить имя основного домена - значение ключа `UNIP_DOMAIN` в манифесте ./common/controller-cm.yaml и применить манифест;
2. Создать ресурс Secret `registry-credentials` с реквизитами доступа к реестру образов
с образом unip-controller по образцу ./common/registry-credentials-secret.yaml.sample;
3. Создать ресурсы Kubernetes из манифестов:
1. files/files-svc.yaml;
2. pipelines/pipelines-svc.yaml;
3. sa.yaml;
4. cluster-role.yaml;
5. cluster-rb.yaml;
6. deployment.yam;
## Проверка установки
В пространстве имен `unip-system-deployment` должен быть запущен Pod с тремя контейнерами.
В логах контейнеров не должно быть ошибок.