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