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

13 KiB
Raw Blame History

Развертывание контроллеров, сервисов управления данными и отслеживания экспериментов

Для развертывания необходимо создать ресурсы 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 см. в описании конфигурации сервиса отслеживания экспериментов.

Подключение объектного хранилища

Создание 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 и применить манифест.

Значение параметров в манифестах см. в описании конфигурации фреймворка.

Подключение сервиса развертывания

Создать ресурс Secret argo-cd-credentials по образцу argo-cd/argo-cd-credentials-secret.yaml.sample.

Уточнить конфигурацию сервиса развертывания в манифесете argo-cd/argo-cd-cm.yaml.

Значение параметров в манифестах см. в описании конфигурации сервиса развертывания.

Подключение внешнего поставщика реквизитов (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 могут быть взяты из образца без изменений.

Значение параметров манифестах см. в описании конфигурации внешнего поставщика реквизитов.

Создать пространство имен для хранения реквизитов робот аккаунтов из манифеста 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.

Значение параметров манифеста см. в описании конфигурации сервиса отслеживания экспериментов.

Конфигурация сервиса управления данными

Проверить и уточнить конфигурацию сервиса управления данными в манифесете files/files-cm.yaml. Применить манифест ./files/files-cm.yaml.

Значение параметров манифеста см. в описании конфигурации сервиса управления данными.

Конфигурация контроллера модулей данных

Проверить и уточнить конфигурацию сервиса управления данными в манифесете ./datasets/datasets-cm.yaml. Применить манифест ./datasets/datasets-cm.yaml.

Значение параметров манифеста см. в описании конфигурации контроллера модулей данных.

Конфигурация контроллера публикации API

Настройка CORS (опционально)

Проверить и уточнить конфигурацию CORS в манифесете ./apicmps/cors.yaml. Применить манифест ./apicmps/cors.yaml.

Значение параметров манифеста см. в описании конфигурации конфигурации 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 с тремя контейнерами. В логах контейнеров не должно быть ошибок.