Установка компонентов на деплой-ноде VK Data Platform
Перед началом установки компонентов на деплой-ноде VK Data Platform убедитесь, что:
- Выполнены условия, приведенные в разделе Предусловия.
- Развернут кластер Kubernetes с базовой инфраструктурой с помощью инсталлятора Base Infra. Подробнее — в разделе Развертывание кластера Kubernetes из дистрибутива Base Infra.
- Выполнены шаги из инструкции Установка компонентов на деплой-ноде VK Private Cloud.
Чтобы установить компоненты на деплой-ноде VK Data Platform, выполните следующие шаги:
- Создайте сервисных пользователей OpenStack.
- Получите пароль для утилиты logaudit.
- Подключитесь к инсталляционному серверу.
- Распакуйте архив на инсталляционном сервере.
- Задайте переменные окружения на инсталляционном сервере.
- Настройте параметры ядра.
- Выполните второй запуск инсталлятора.
-
Подключитесь к деплой-ноде по SSH:
$ ssh deployer@deploy_fip -
Подключитесь к управляющему узлу:
$ ssh <УЗЕЛ>Здесь
<УЗЕЛ>— имя управляющего узла. -
Переключитесь на пользователя
rootи загрузите переменные окружения из файла:$ sudo su# source /root/openrc.sh -
Задайте переменные окружения 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 (значение отображается в веб-интерфейсе в настройках проекта).
-
Создайте пользователя
atomи назначьте ему роль:# openstack user create --password "$ATOM_PASSWORD" atom# openstack role add --project "$PROJECT_ID" --user atom member -
Создайте пользователя
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 -
Получите идентификаторы созданных пользователей и ролей:
# 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— они потребуются в дальнейшем.
-
Подключитесь к деплой-ноде по SSH:
$ ssh deployer@deploy_fip -
Получите параметр пароля для утилиты
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— оно потребуется в дальнейшем.
-
Подключитесь к деплой-ноде по SSH:
$ ssh deployer@deploy_fip -
Подключитесь к инсталляционному серверу с router-узла:
$ ssh router -
На router-узле в файл
.ssh/id_rsaдобавьте приватную часть ключа, указанного при создании инсталляционного сервера и трех узлов для кластера Kubernetes. -
Перейдите на инсталляционный сервер, развернутый в VK Private Cloud:
$ ssh <ЛОГИН>@<IP-АДРЕС>Здесь:
<ЛОГИН>— логин пользователя сервера.<IP-АДРЕС>— IP-адрес сервера.
-
Создайте директорию и распакуйте архив инсталлятора:
$ mkdir -p ~/vkcloud$ cd ~/vkcloud$ tar -xPf ~/<ИМЯ_АРХИВА>.tarЗдесь
<ИМЯ_АРХИВА>— имя файла архива VK Data Platform. -
Скопируйте сертификаты в формате PEM в директорию
~/vkcloud/data-platform/ssl/. -
Скопируйте сертификат (файл
tls.crt) и приватный ключ (файлtls.key) для Личного кабинета в формате PEM в директорию~/vkcloud/data-platform/ssl/. Не меняйте имена файлов. -
При наличии собственного корневого сертификата:
- Поместите корневой сертификат в директорию
~/vkcloud/data-platform/ssl/ca/. - Добавьте сертификат в доверенное хранилище на каждый узел Kubernetes.
- Перезапустите
containerd.
- Поместите корневой сертификат в директорию
-
Для модуля 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.
-
Для модуля 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.
-
Для модуля 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.
-
Для модуля 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: falsedistributor: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: truemin_free_ifaces: 4ifaces_per_vm: 16min_vms: 0network_id: "238bfd17-a067-4af5-bb60-ac6e7332cd15"presets:standard:flavor_id: "1fbf0c56-6943-41b4-b455-ff9f971a6dd2"image_id: "62e70652-a095-4d92-9ca2-fe6d8dd4a5dc"volume_size: 20volume_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: [] -
-
-
Для модуля 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.
-
Для модуля 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.
-
Для модуля 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.
-
В файле
~/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, резервные копии создаваться не будут.
-
Создайте файл
~/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.
-
На узле Kubernetes создайте файл
/etc/sysctl.d/99-inotify-instances.confсо следующим содержимым:fs.inotify.max_user_instances=512 -
Примените изменение:
$ sudo sysctl -p /etc/sysctl.d/99-inotify-instances.conf
-
Перейдите в рабочую директорию инсталлятора и запустите CLI инсталляции:
$ cd ~/vkcloud/data-platform/$ ./shellkunchik -
Выберите целевую среду
Матрешкаи нажмите ENTER. -
Выберите тип операции
Первичная установкаи нажмите ENTER. -
Выберите
Шаг 2: Установка DP в подготовленный кластер Kubernetesи нажмите ENTER. -
Выберите конфигурацию:
Матрешка 3+1— если кластер Kubernetes развернут в одной зоне;Матрешка 3+1 Мультизоны— если кластер Kubernetes развернут в нескольких зонах доступности.
-
Проверьте путь к файлу kubeconfig и нажмите ENTER.
-
(Опционально) Включите параметр
Режим отладки, чтобы получить лог установки. Опция выключена по умолчанию.Чтобы включить или отключить опцию, переместите курсор на нее и нажмите клавишу
ПРОБЕЛ. -
Нажмите ENTER.
-
Проверьте, что все переменные заданы корректно, и нажмите ENTER.
-
Проверьте корректность выбранных параметров для подключения к кластеру.
-
Нажмите ENTER. Запустится процесс установки.
-
Проверьте результаты установки:
-
После выполнения скрипта установки откройте Личный кабинет по адресу
https://<АДРЕС_ЛИЧНОГО_КАБИНЕТА>/appв браузере.Здесь
<АДРЕС_ЛИЧНОГО_КАБИНЕТА>— адрес Личного кабинета VK Data Platform. -
Войдите в Личный кабинет, используя почту и пароль.
-
Перейдите в раздел Data Platform → Экземпляры сервисов.
-
Нажмите кнопку Создать экземпляр.
-
Выберите конфигурацию сервиса
Кластер. -
Нажмите кнопку Следующий шаг.
-
Выберите опцию
Продвинутая. -
Убедитесь, что в поле Тип диска data есть выпадающий список с типом диска.
-
-
В случае появления ошибки при установке VK Data Platform:
-
Перезапустите инсталлятор с флагом
--debug:$ ./shellkunchik --debug -
Повторно выполните шаги настроек из раздела Второй запуск инсталлятора.
-
Ознакомьтесь с подробными логами ошибок и исправьте их.
-