VK Data Platform logo
Помощь
Обновлена 17 июля 2026 г. в 15:34

Установка компонентов на деплой-ноде VK Data Platform

Перед началом установки компонентов на деплой-ноде VK Data Platform убедитесь, что:

  1. Выполнены условия, приведенные в разделе Предусловия.
  2. Развернут кластер Kubernetes с базовой инфраструктурой с помощью инсталлятора Base Infra. Подробнее — в разделе Развертывание кластера Kubernetes из дистрибутива Base Infra.
  3. Выполнены шаги из инструкции Установка компонентов на деплой-ноде VK Private Cloud.

Чтобы установить компоненты на деплой-ноде VK Data Platform, выполните следующие шаги:

  1. Создайте сервисных пользователей OpenStack.
  2. Получите пароль для утилиты logaudit.
  3. Подключитесь к инсталляционному серверу.
  4. Распакуйте архив на инсталляционном сервере.
  5. Задайте переменные окружения на инсталляционном сервере.
  6. Настройте параметры ядра.
  7. Выполните второй запуск инсталлятора.

Создание сервисных пользователей OpenStack

  1. Подключитесь к деплой-ноде по SSH:

    $ ssh deployer@deploy_fip
  2. Подключитесь к управляющему узлу:

    $ ssh <УЗЕЛ>

    Здесь <УЗЕЛ> — имя управляющего узла.

  3. Переключитесь на пользователя root и загрузите переменные окружения из файла:

    $ sudo su# source /root/openrc.sh
  4. Задайте переменные окружения OpenStack:

    # export ATOM_PASSWORD="<ПАРОЛЬ_АТОМ>"# export DP_PASSWORD="<ПАРОЛЬ_DP>"# export PROJECT_ID="<ID_ПРОЕКТА>"# export AUTH_URL="<AUTH_URL>"

    Здесь:

    • <ПАРОЛЬ_АТОМ> — пароль для пользователя atom.
    • <ПАРОЛЬ_DP> — пароль для пользователя data-platformer.
    • <ID_ПРОЕКТА> — идентификатор проекта (значение отображается в веб-интерфейсе в настройках проекта).
    • <AUTH_URL> — URL-адрес аутентификации OpenStack (значение отображается в веб-интерфейсе в настройках проекта).
  5. Создайте пользователя atom и назначьте ему роль:

    # openstack user create --password "$ATOM_PASSWORD" atom# openstack role add --project "$PROJECT_ID" --user atom member
  6. Создайте пользователя data-platformer и назначьте ему роли:

    # openstack user create --password "$DP_PASSWORD" data-platformer# openstack role add --project "$PROJECT_ID" --user data-platformer mcs_k8s_admin# openstack role add --project "$PROJECT_ID" --user data-platformer mcs_admin_network# openstack role add --project "$PROJECT_ID" --user data-platformer mcs_co_owner
  7. Получите идентификаторы созданных пользователей и ролей:

    # ATOM_ROLE_ID=$(openstack role show member -f value -c id)# DP_ROLE_ID=$(openstack role show admin -f value -c id)# ATOM_USER_ID=$(openstack user show atom -f value -c id)# DP_USER_ID=$(openstack user show data-platformer -f value -c id)# ADMIN_TOKEN=$(openstack token issue -f value -c id)# PROJECT_DOMAIN=$(openstack role assignment list --user atom --user-domain default --names --format value --column Project | cut -d'@' -f2)# PROJECT_NAME=$(openstack role assignment list --user atom --user-domain default --names --format value --column Project | cut -d'@' -f1)# echo $ATOM_ROLE_ID# echo $DP_ROLE_ID# echo $ATOM_USER_ID# echo $DP_USER_ID

    Сохраните значения переменных ATOM_PASSWORD, DP_PASSWORD, ATOM_ROLE_ID, DP_ROLE_ID, ATOM_USER_ID, DP_USER_ID, PROJECT_ID, PROJECT_DOMAIN, PROJECT_NAME — они потребуются в дальнейшем.

Получение пароля для утилиты logaudit

  1. Подключитесь к деплой-ноде по SSH:

    $ ssh deployer@deploy_fip
  2. Получите параметр пароля для утилиты logaudit:

    $ cat /opt/vkcloud/inventory/vkcloud/data-platform/group_vars/vkcloud/vault-data-platform.yml | grep vault_data_master_audit_s2s_password

    Сохраните значение параметра vault_data_master_audit_s2s_password — оно потребуется в дальнейшем.

Подключение к инсталляционному серверу

  1. Подключитесь к деплой-ноде по SSH:

    $ ssh deployer@deploy_fip
  2. Подключитесь к инсталляционному серверу с router-узла:

    $ ssh router
  3. На router-узле в файл .ssh/id_rsa добавьте приватную часть ключа, указанного при создании инсталляционного сервера и трех узлов для кластера Kubernetes.

  4. Перейдите на инсталляционный сервер, развернутый в VK Private Cloud:

    $ ssh <ЛОГИН>@<IP-АДРЕС>

    Здесь:

    • <ЛОГИН> — логин пользователя сервера.
    • <IP-АДРЕС> — IP-адрес сервера.

Распаковка архива на инсталляционном сервере

  1. Создайте директорию и распакуйте архив инсталлятора:

    $ mkdir -p ~/vkcloud$ cd ~/vkcloud$ tar -xPf ~/<ИМЯ_АРХИВА>.tar

    Здесь <ИМЯ_АРХИВА> — имя файла архива VK Data Platform.

  2. Скопируйте сертификаты в формате PEM в директорию ~/vkcloud/data-platform/ssl/.

  3. Скопируйте сертификат (файл tls.crt) и приватный ключ (файл tls.key) для Личного кабинета в формате PEM в директорию ~/vkcloud/data-platform/ssl/. Не меняйте имена файлов.

  4. При наличии собственного корневого сертификата:

    1. Поместите корневой сертификат в директорию ~/vkcloud/data-platform/ssl/ca/.
    2. Добавьте сертификат в доверенное хранилище на каждый узел Kubernetes.
    3. Перезапустите containerd.

Конфигурация переменных окружения на инсталляционном сервере

  1. Для модуля Atom в файле ~/ansible-standalone/inventory/group_vars/matreshka_kube/helm_atom-matreshka.yaml заполните переменные:

    • helm_atom_s3_endpoint_public — эндпоинт S3 с указанием протокола. Пример: http://hb.corpcloud.devmail.ru.
    • helm_atom_s3_region — регион S3. Пример: ru-msk.
    • helm_atom_keystone_admin_user — пользователь, созданный для atom. Укажите значение atom.
    • helm_atom_keystone_auth_uri — URL-адрес аутентификации, Auth URL из настроек проекта. Пример: https://lk194-1.dp.corp.devmail.ru/infra/identity/v3/.
    • helm_atom_keystone_admin_project_name — название проекта из переменной PROJECT_NAME, сохраненное на шаге создания сервисных пользователей. Пример: mcs5844961147.
    • helm_atom_keystone_admin_project_domain_name — доменное имя проекта из переменной PROJECT_DOMAIN, сохраненное на шаге создания сервисных пользователей. Пример: mcs2047157859.
  2. Для модуля Windmill в файле ~/ansible-standalone/inventory/group_vars/matreshka_kube/helm_windmill-matreshka.yaml заполните переменные:

    • helm_maintenance_backup_s3_endpoint — эндпоинт S3 без указания протокола. Пример: hb.corpcloud.devmail.ru.
    • helm_maintenance_backup_s3_region — регион S3. Пример: ru-msk.
    • helm_maintenance_backup_s3_secure — протокол публичного эндпоинта S3: false для HTTP, true для HTTPS.
    • helm_windmill_standalone_mode_enabled — включение режима Standalone. Укажите значение true.
    • helm_windmill_keystone_auth_uri — URL-адрес аутентификации, Auth URL из настроек проекта. Пример: https://lk194-1.dp.corp.devmail.ru/infra/identity/v3/.
    • helm_windmill_keystone_admin_user — пользователь, созданный для atom. Укажите значение atom.
    • helm_windmill_keystone_admin_role_id — идентификатор роли из параметра ATOM_ROLE_ID, сохраненный на шаге создания сервисных пользователей. Пример: 49d7dce513224bf38472b5d98c693d8e.
    • helm_windmill_sa_id — идентификатор пользователя из параметра ATOM_USER_ID, сохраненный на шаге создания сервисных пользователей. Пример: 5ad372001ecc4c14ac8e7ab82193772a.
    • helm_windmill_sa_project_id — идентификатор проекта из параметра PROJECT_ID, сохраненный на шаге создания сервисных пользователей. Пример: e0fc7342a75a4b1f9cae949df1a1fe24.
  3. Для модуля Kosmos в файле ~/ansible-standalone/inventory/group_vars/matreshka_kube/helm_kosmos-matreshka.yaml заполните переменную:

    • helm_kosmos_nexus_url — DNS-имя веб-интерфейса Nexus. Пример: https://dp-repo.dp.corp.devmail.ru.
  4. Для модуля Data Platformer в файле ~/ansible-standalone/inventory/group_vars/matreshka_kube/helm_data-platformer-matreshka.yaml заполните переменные:

    • helm_data_platformer_s3_endpoint_url — эндпоинт S3 с указанием протокола. Пример: https://hb.corpcloud.devmail.ru.

    • helm_data_platformer_s3_default_region — регион S3. Пример: ru-msk.

    • helm_data_platformer_standalone_subnets:

      • cidr — адрес подсети узлов кластера с маской сети.
      • forbidden_ip_addresses — запрещенные IP-адреса, которые не могут быть использованы kube-vip. Оставьте последние пять адресов сети — они нужны для веб-интерфейса.

      Пример:

      helm_data_platformer_standalone_subnets: [  {    "id": "00000000-0000-0000-0000-000000000000",    "name": "local",    "cidr": "10.139.33.128/25",    "network_id": "00000000-0000-0000-0000-000000000000",    "network_name": "local",    "sdn": "local",    "forbidden_ip_addresses": [      "<ПЕРВЫЕ_ТРИ_ОКТЕТА_IP>.255",      "<ПЕРВЫЕ_ТРИ_ОКТЕТА_IP>.254",      "<ПЕРВЫЕ_ТРИ_ОКТЕТА_IP>.253",      "<ПЕРВЫЕ_ТРИ_ОКТЕТА_IP>.252",      "<ПЕРВЫЕ_ТРИ_ОКТЕТА_IP>.251",      "<ПЕРВЫЕ_ТРИ_ОКТЕТА_IP>.1",      "<ПЕРВЫЕ_ТРИ_ОКТЕТА_IP>.2",      "<ПЕРВЫЕ_ТРИ_ОКТЕТА_IP>.3"   ]}]

      Здесь <ПЕРВЫЕ_ТРИ_ОКТЕТА_IP> — первые три октета запрещенных IP-адресов. Пример: Если IP-адрес — 10.139.33.0/25, то первые три октета — это 10.139.33.

    • helm_data_platformer_docker_registry_address — эндпоинт Docker registry с образами компонентов узла рабочих нагрузок. Пример: dp-repo-dp.dp.corp.devmail.ru.

    • helm_data_platformer_openstack_identity_endpoint — URL-адрес аутентификации, Auth URL из настроек проекта. Пример: https://lk194-1.dp.corp.devmail.ru/infra/identity/v3/.

    • helm_data_platformer_openstack_service_role — идентификатор роли из переменной DP_ROLE_ID, сохраненный на шаге создания сервисных пользователей. Пример: 7d584c57bcc54c5c9c70b633ec0a738b.

    • helm_data_platformer_openstack_user_id — идентификатор пользователя из параметра DP_USER_ID, сохраненный на шаге создания сервисных пользователей. Пример: e1619125546a4aaf9e0600966f4ce9e5.

    • helm_data_platformer_controllers:

      • app.enable_service — по умолчанию false. Установите true при необходимости использования нового app-контроллера.
      • distributor.enable_service — укажите true для включения мультиплексора.
      • distributor.project_id — идентификатор проекта, в котором развернута Матрешка.
      • distributor.subnet_id — идентификатор подсети, в которой развернута Матрешка.
      • distributor.network_id — идентификатор сети, в которой развернута Матрешка.
      • distributor.security_groups — идентификатор групп безопасности, с которых разрешен доступ к кластеру Матрешки.
      • distributor.default_azs — названия зон доступности, в которых нужно разворачивать машины мультиплексора (MVM).
      • distributor.min_free_ifaces — минимальное количество свободных соединений на каждой MVM.
      • distributor.ifaces_per_vm — общее количество соединений, доступных на каждой MVM.
      • distributor.min_vms — минимальное поддерживаемое количество MVM.
      • distributor.default_preset — имя пресета по умолчанию для создания MVM.
      • distributor.presets — пресеты для MVM. Укажите хотя бы один пресет с ID флейвора, ID образа, типом и размером диска:

      Пример:

      helm_data_platformer_controllers:  app:    enable_service: false  distributor:    project_id: "e0fc7342a75a4b1f9cae949df1a1fe24"    security_groups: ["d6d6a28f-111b-4dde-abc6-004c18e4e9b6"]    subnet_id: "184b1f2b-2d73-4665-8ad1-376cc4326d95"    default_azs: ["AZ1"]    default_preset: "standard"    enable_service: true    min_free_ifaces: 4    ifaces_per_vm: 16    min_vms: 0    network_id: "238bfd17-a067-4af5-bb60-ac6e7332cd15"    presets:      standard:        flavor_id: "1fbf0c56-6943-41b4-b455-ff9f971a6dd2"        image_id: "62e70652-a095-4d92-9ca2-fe6d8dd4a5dc"        volume_size: 20        volume_type: "lvm-localpv"
    • helm_data_platformer_extensions_global_network_policy:

      • internal_nets — IP-адреса внешних систем, например S3, которые позволят разрешить доступ из зон service, dmz, trusted, db. Получите у администратора текущей инсталляции.

      • nodes_nets — подсеть узлов кластера в формате <ПЕРВЫЕ_ТРИ_ОКТЕТА_IP>.0/24.

        Здесь <ПЕРВЫЕ_ТРИ_ОКТЕТА_IP> — первые три октета подсети узлов кластера. Пример: Если кластер работает в подсети 10.0.5.0/24, то первые три октета — это 10.0.5 и ввести нужно 10.0.5.0/24.

      • ext_nets — IP-адреса внешних сетей, с которых разрешен доступ. Оставьте значение по умолчанию. Пример: ["0.0.0.0/0"].

      Пример:

      helm_data_platformer_extensions_global_network_policy:    ...    internal_nets: []    nodes_nets: []    ext_nets: []
  5. Для модуля Nexus в файле ~/ansible-standalone/inventory/group_vars/matreshka/nexus.yml заполните переменные:

    • nexus_s3_bucket — имя бакета для S3. Пример: data-platform-nexus-backup.
    • nexus_s3_region — регион. Пример: ru-msk.
    • nexus_s3_endpoint — эндпоинт S3 с указанием протокола. Пример: http://hb.corpcloud.devmail.ru.
  6. Для модуля HAProxy в файле ~/ansible-standalone/inventory/group_vars/matreshka/haproxy.yml заполните переменные:

    • nexus_web_domain — DNS-имя веб-интерфейса Nexus. Пример: dp-repo.dp.corp.devmail.ru.
    • nexus_control_plane_domain — DNS-имя Docker registry с образами компонентов управляющего узла. Пример: dp-repo-cp.dp.corp.devmail.ru.
    • nexus_data_plane_domain — DNS-имя Docker registry с образами компонентов узла рабочих нагрузок. Пример: dp-repo-dp.dp.corp.devmail.ru.
  7. Для модуля Common в файле ~/ansible-standalone/inventory/group_vars/matreshka_kube/common.yml заполните переменные:

    • helm_image_registry — DNS-имя Docker registry с образами компонентов управляющего узла. Пример: dp-repo-cp.dp.corp.devmail.ru.
    • helm_registry — DNS-имя Docker registry с образами компонентов узла рабочих нагрузок. Пример: dp-repo-dp.dp.corp.devmail.ru.
    • nexus_web_domain — DNS-имя веб-интерфейса Nexus. Пример: dp-repo.dp.corp.devmail.ru.
    • helm_repo_url — адрес Helm-репозитория в Nexus. Укажите по схеме: https://<DNS_WEB>/repository/public-mcs-helm, где <DNS_WEB> — DNS-имя веб-интерфейса Nexus. Пример: https://dp-repo.dp.corp.devmail.ru/repository/public-mcs-helm.
    • lk_domain — адрес Личного кабинета. Пример: lk50-112.dp.corp.devmail.ru.
    • laas_public_endpoint_domain — эндпоинт LogaaS VK Private Cloud (Cloud Logging). Пример: cloudlogs50-112.dp.corp.devmail.ru.
    • maas_public_endpoint_domain — эндпоинт MonaaS VK Private Cloud (Cloud Monitoring). Пример: cloudmon50-112.dp.corp.devmail.ru.
    • openstack_public_url — URL-адрес OpenStack VK Private Cloud. Пример: lk50-112.dp.corp.devmail.ru.
    • disk_name — имя диска, добавленного в VolumeGroup при разворачивании кластера Base Infra. Пример: vdb.
    • ssh_kube_user — имя пользователя для подключения к серверам кластера Kubernetes. Пример: cloud-user.
    • ssh_key_path — имя файла SSH-ключа для подключения к серверам кластера Kubernetes. Пример: id_rsa.
  8. В файле ~/ansible-standalone/inventory/group_vars/matreshka_kube/common.yml заполните переменные для резервного копирования БД управляющего узла:

    • s3_backup_url — адрес S3 для резервных копий с указанием протокола. Пример: http://hb.corpcloud.devmail.ru/.
    • s3_bucket_name — имя бакета для резервных копий.
    • s3_region — регион S3 для бакета резервных копий. Пример: ru-msk.
    • backup_full_start — шаблон cron для создания резервных копий. Пример: 0 15 * * * — один раз в день в 15:00.
    • backup_full_keep_time — срок хранения резервной копии в днях. Пример: 14.
    • backup_full_enabled — включение создания резервных копий. По умолчанию true. Если указать false, резервные копии создаваться не будут.
  9. Создайте файл ~/envvars.env со следующим содержимым:

    $ cat > ~/envvars.env << 'EOF'S3_ACCESS_KEY=<КЛЮЧ_ДОСТУПА_S3>S3_SECRET_KEY=<СЕКРЕТНЫЙ_КЛЮЧ_S3>S3_BACKUP_ACCESS_KEY=<КЛЮЧ_ДОСТУПА_РЕЗЕРВНЫЕ_КОПИИ_S3_CP>S3_BACKUP_SECRET_KEY=<СЕКРЕТНЫЙ_КЛЮЧ_РЕЗЕРВНЫЕ_КОПИИ_S3_CP>VAULT_HELIUM_ACCESS_TOKEN=<ТОКЕН_ДОСТУПА_HELIUM>VAULT_HELIUM_AUTH_SALT=<СОЛЬ_АУТЕНТИФИКАЦИИ_HELIUM>VAULT_HELIUM_JWT_AUTH=<JWT_КЛЮЧ_HELIUM>NEXUS_S3_BACKUP_ACCESS_KEY=<КЛЮЧ_ДОСТУПА_РЕЗЕРВНЫЕ_КОПИИ_S3_NEXUS>NEXUS_S3_BACKUP_SECRET_KEY=<СЕКРЕТНЫЙ_КЛЮЧ_РЕЗЕРВНЫЕ_КОПИИ_S3_NEXUS>DP_OS_PASSWORD=<ПАРОЛЬ_DP>AT_OS_PASSWORD=<ПАРОЛЬ_АТОМ>ANSIBLE_ENV=matreshkaREG_AUTH_URL=<AUTHURL>REG_PASSWORD=<ПАРОЛЬ_АТОМ>REG_PROJECT_ID=<ID_ПРОЕКТА>VAULT_WINDMILL_LOG_AUDIT_PASSWORD=<PASSWORD>VAULT_ATOM_AUDIT_S2S_PASSWORD=<PASSWORD>EOF

    Здесь:

    • <КЛЮЧ_ДОСТУПА_S3> — публичный ключ для доступа к S3-хранилищу.
    • <СЕКРЕТНЫЙ_КЛЮЧ_S3> — приватный ключ для доступа к S3-хранилищу.
    • <КЛЮЧ_ДОСТУПА_РЕЗЕРВНЫЕ_КОПИИ_S3_CP> — публичный ключ для доступа к S3-хранилищу для резервных копий БД управляющего узла.
    • <СЕКРЕТНЫЙ_КЛЮЧ_РЕЗЕРВНЫЕ_КОПИИ_S3_CP> — приватный ключ для доступа к S3-хранилищу для резервных копий БД управляющего узла.
    • <ТОКЕН_ДОСТУПА_HELIUM> — токен доступа Helium.
    • <СОЛЬ_АУТЕНТИФИКАЦИИ_HELIUM> — секретная строка (salt) для формирования и проверки данных аутентификации Helium в Vault.
    • <JWT_КЛЮЧ_HELIUM> — JWT-токен для аутентификации Helium в Vault.
    • <КЛЮЧ_ДОСТУПА_РЕЗЕРВНЫЕ_КОПИИ_S3_NEXUS> — публичный ключ для доступа к S3-хранилищу для резервных копий Nexus.
    • <СЕКРЕТНЫЙ_КЛЮЧ_РЕЗЕРВНЫЕ_КОПИИ_S3_NEXUS> — приватный ключ для доступа к S3-хранилищу для резервных копий Nexus.
    • <ПАРОЛЬ_DP> — пароль пользователя data-platformer, сохраненный на шаге создания сервисных пользователей.
    • <ПАРОЛЬ_АТОМ> — пароль пользователя atom, сохраненный на шаге создания сервисных пользователей.
    • <AUTH_URL> — адрес Keystone на стенде.
    • <ID_ПРОЕКТА> — идентификатор проекта, сохраненный на шаге создания сервисных пользователей.
    • <PASSWORD> — сохраненный vault_data_master_audit_s2s_password, полученный на шаге Получение пароля для утилиты logaudit.

Настройка параметров ядра

  1. На узле Kubernetes создайте файл /etc/sysctl.d/99-inotify-instances.conf со следующим содержимым:

    fs.inotify.max_user_instances=512
  2. Примените изменение:

    $ sudo sysctl -p /etc/sysctl.d/99-inotify-instances.conf

Второй запуск инсталлятора

  1. Перейдите в рабочую директорию инсталлятора и запустите CLI инсталляции:

    $ cd ~/vkcloud/data-platform/$ ./shellkunchik
  2. Выберите целевую среду Матрешка и нажмите ENTER.

  3. Выберите тип операции Первичная установка и нажмите ENTER.

  4. Выберите Шаг 2: Установка DP в подготовленный кластер Kubernetes и нажмите ENTER.

  5. Выберите конфигурацию:

    • Матрешка 3+1 — если кластер Kubernetes развернут в одной зоне;
    • Матрешка 3+1 Мультизоны — если кластер Kubernetes развернут в нескольких зонах доступности.
  6. Проверьте путь к файлу kubeconfig и нажмите ENTER.

  7. (Опционально) Включите параметр Режим отладки, чтобы получить лог установки. Опция выключена по умолчанию.

    Чтобы включить или отключить опцию, переместите курсор на нее и нажмите клавишу ПРОБЕЛ.

  8. Нажмите ENTER.

  9. Проверьте, что все переменные заданы корректно, и нажмите ENTER.

  10. Проверьте корректность выбранных параметров для подключения к кластеру.

  11. Нажмите ENTER. Запустится процесс установки.

  12. Проверьте результаты установки:

    1. После выполнения скрипта установки откройте Личный кабинет по адресу https://<АДРЕС_ЛИЧНОГО_КАБИНЕТА>/app в браузере.

      Здесь <АДРЕС_ЛИЧНОГО_КАБИНЕТА> — адрес Личного кабинета VK Data Platform.

    2. Войдите в Личный кабинет, используя почту и пароль.

    3. Перейдите в раздел Data PlatformЭкземпляры сервисов.

    4. Нажмите кнопку Создать экземпляр.

    5. Выберите конфигурацию сервиса Кластер.

    6. Нажмите кнопку Следующий шаг.

    7. Выберите опцию Продвинутая.

    8. Убедитесь, что в поле Тип диска data есть выпадающий список с типом диска.

  13. В случае появления ошибки при установке VK Data Platform:

    • Перезапустите инсталлятор с флагом --debug:

      $ ./shellkunchik --debug
    • Повторно выполните шаги настроек из раздела Второй запуск инсталлятора.

    • Ознакомьтесь с подробными логами ошибок и исправьте их.