211 lines
13 KiB
Markdown
211 lines
13 KiB
Markdown
# Развертывание контроллеров, сервисов управления данными и отслеживания экспериментов
|
||
|
||
Для развертывания необходимо создать ресурсы 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 с тремя контейнерами.
|
||
В логах контейнеров не должно быть ошибок.
|
||
|
||
|