unip-controller/deploy/controller.md

212 lines
13 KiB
Markdown
Raw Normal View History

2025-01-29 13:13:51 +00:00
# Развертывание контроллеров, сервисов управления данными и отслеживания экспериментов
Для развертывания необходимо создать ресурсы 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 с тремя контейнерами.
В логах контейнеров не должно быть ошибок.