Подготовка параметров для инсталляции
Подготовка параметров для инсталляции состоит из следующих последовательных шагов:
- Подготовка inventory окружения.
- Настройка параметров Платформы.
- Распаковка архива дистрибутива.
- Правка конфигурации Ansible.
После настройки всех параметров inventory перейдите к запуску инсталлятора (подробнее — в разделе Запуск инсталлятора).
Для создания первоначального inventory для первичной установки Платформы используется Inventory-генератор (invgen).
Inventory-генератор выполняет следующие функции:
-
Копирование необходимых уникальных параметров из файла конфигурации
minimal.ymlв структуруinventory. -
Включение или отключение установки определённых компонентов Платформы (DBaaS, K8saas и прочее).
-
Генерирование внутренних секретных переменных (сложные уникальные пароли, ключи в правильном формате, токены с правильной длиной и пр.)
Подготовьте параметры для автоматической Inventory-генерации:
-
Распакуйте архив с генератором:
$ cd ~$ RELEASE_NAME='4.0'$ tar -xzf invgen_box-${RELEASE_NAME}.tar.gz$ cd invgen_box-${RELEASE_NAME}Архив содержит пять исполняемых файлов для Inventory-генерации:
invgen-darwin-amd64— для macOS с архитектурой amd64.invgen-darwin-arm64— для macOS с архитектурой arm64.invgen-linux-amd64— для Linux с архитектурой amd64.invgen-linux-arm64— для Linux с архитектурой arm64.invgen-windows-amd64.exe— для Windows с архитектурой amd64.
-
Скопируйте подходящий исполняемый файл в домашний каталог:
$ cp invgen-linux-amd64 ~$ cd ~ -
Перейдите в данный каталог и запустите выгрузку основных параметров в
minimal.yml:$ chmod 755 invgen-linux-amd64$ ./invgen-linux-amd64 config-example > minimal.yml
Заполните файл minimal.yml значениями из Паспорта проекта. В файле приведено описание переменных с примерами заполнения в виде комментариев.
$ vi minimal.yml
Файл minimal.yml поделён на разделы:
equipment— управление количеством узлов для серверов разного назначения (например, можно развернуть вычислительный узел через данный параметр).components— управление компонентами Платформы.vars— переменные, которые необходимо заполнить под вашу среду (IP, домены, названия VLAN и прочее).networks— параметры для подключения Платформы к внешней корпоративной среде (BGP, MTU и прочее).host_templates— правила именования и нумерации узлов по hostname и по IP.hosts— дополнительные переменные для определённых хостов.groups— включение определённых хостов в определённые группы (например, чтобы включить поддержку scsi не на всех вычислительных узлах, а только на некоторых).vault— секретные данные, которые не могут быть сгенерированы самостоятельно на этапе первичной установки (доступы к AD, к email, сертификаты, прочее).
В разделе components можно включать или отключать следующие компоненты Платформы:
-
LaaS — Logging as a Service. Чтобы включить:
-
Добавьте параметр
laasв разделcomponents. -
Заполните переменную
laas_public_endpoint_domain. -
Настройте глубину хранения логов в днях. Внутри переменной
helm_laas_admin_api_builtin_services_raw_contentзаполните переменныеttlдля следующих объектов виртуализации:- IaaS-сервисы (
id:Default). - Контейнеры (
id:Containers). - DBaaS-сервисы (
id:Databases).
- IaaS-сервисы (
-
-
MaaS — Monitoring as Service. Чтобы включить:
-
Добавьте параметр
maasв разделcomponents. -
Заполните переменную
maas_public_endpoint_domain. -
Заполните переменные почтового сервера в файле
~/inventory/vkcloud/group_vars/vkcloud_kube/cloud-alerting.yml:helm_cloud_alerting_smtp_host.helm_cloud_alerting_smtp_port.helm_cloud_alerting_smtp_user.helm_cloud_alerting_smtp_password.helm_cloud_alerting_smtp_from_addr.
-
-
Sprut — Software Defined Network, реализованный VK Cloud. Альтернатива Neutron. Чтобы включить:
-
Добавьте параметр
sprutв разделcomponents. -
Заполните переменные:
network_address_dns_internal_pool_sprut.network_address_dns_exchange_sprut.network_address_ephn_internal_sprut.network_address_ephn_exchange_sprut.network_address_metadata_internal_pool_sprut.network_address_metadata_exchange_pool_sprut.privatedns_host.sprut_dns_exchange_pool_proxy_address.both_sdn_enabled_projects.groups.private_dns.
-
-
HighIOPS — вид хранилища, реализованного поверх нескольких SSD- или NVME-дисков. Чтобы включить:
-
Добавьте параметр
highiopsв разделcomponents. -
Заполните переменные:
cinder_hiops_cinder_state_vol_size.lvm_mirrors_count.hiops_disk_format_name.hiops_disks_regexp.groups.highiops.
-
-
Network — установка инсталляции с выделенным Network-узлом. Чтобы включить:
-
Добавьте параметр
networkв разделcomponents. -
Заполните переменные:
equipment.network.host_templates.network.
-
-
External Network — способ подачи внешних сетей в Платформу.
-
shared— одна общая внешняя сеть на все проекты. Чтобы включить, заполните переменные:network_address_cloudexternal.external_network_name.external_networks_extend.
-
provider(сети провайдера) — отдельные внешние сети на каждый проект. Чтобы включить:- Оставьте пустой или уберите переменную
network_address_cloudexternal. - Заполните список провайдерских сетей
postdeploy_provider_network.
- Оставьте пустой или уберите переменную
-
-
Glance-S3 — хранение образов сервиса Glance в S3. Чтобы включить:
-
Добавьте значение
s3в переменнуюglance_type_store. -
Заполните переменные из раздела Cloud Storage от VK или сторонний S3.
-
Раскомментируйте необходимые компоненты для включения, остальные закомментируйте.
В зависимости от включенных компонентов в разделе components файла minimal.yml Inventory-генератор создаст inventory с нужными параметрами для выбранной конфигурации.
Поддерживаемые наборы компонентов и параметров:
cloud-audit-logs,octavia,magnum,trove,xaas,manila,external_network(shared),glance_type_store(rbd).cloud-audit-logs,octavia,magnum,trove,xaas,manila,external_network(provider),glance_type_store(rbd).cloud-audit-logs,octavia,magnum,trove,xaas,manila,external_network(provider),glance_type_store(s3),laas,maas.cloud-audit-logs,octavia,magnum,trove,xaas,manila,external_network(shared),glance_type_store(rbd),laas,maas,sprut.
Компоненты network, highiops можно включать в любую из перечисленных конфигураций. Компонент network нужно включать в инсталляциях, где количество виртуальных портов превышает 5000.
...components:- cloud_audit_logs- highiops- octavia- magnum- trove- manila- xaas- network- sprut- maas- laas...
-
После заполнения файла
minimal.ymlзапуститеinvgen:$ ./invgen-linux-amd64 generateГенератор создаст папку
inventoryв текущей директории. Внутри папкиinventoryбудут конфигурационные файлы, необходимые для установки Платформы. При необходимости их можно отредактировать до запуска установщика Платформы (подробнее — в разделе Настройка параметров Платформы).$ ls ~/inventory/vkcloud/ansible.cfg group_vars hosts.yml host_vars README.md vkcloud.ymlls ~/inventory/vkcloud/group_vars/vkcloud vkcloud_magnum_addons_stolon_clustervkcloud_audit vkcloud_magnum_etcd_clustervkcloud_az1_storage vkcloud_magnumrapid_redisvkcloud_barbican vkcloud_magnum_rapid_stolon_clustervkcloud_billingcore_stolon_cluster vkcloud_mcsvkcloud_ceph_osd vkcloud_mcs_apex_breezevkcloud_ch_cluster_audit_logs vkcloud_mcs_breezevkcloud_cinder vkcloud_mcs_duskvkcloud_cinder_backup vkcloud_mcs_nginxvkcloud_cinder_ceph vkcloud_mcs_policyvkcloud_clickhouse vkcloud_mcs_sundogvkcloud_compute vkcloud_mcs_zephyrvkcloud_consul vkcloud_monitoring_frontendvkcloud_dhcp vkcloud_nbgpvkcloud_elk_kafka vkcloud_networkvkcloud_etcd_cluster vkcloud_neutron_controllervkcloud_galera_barbican vkcloud_nova_controllervkcloud_galera_billingaccountservice vkcloud_octaviavkcloud_galera_cinder vkcloud_ost_kubevkcloud_galera_ghosts vkcloud_pankovkcloud_galera_glance vkcloud_preinstallvkcloud_galera_karboii vkcloud_private_haproxyvkcloud_galera_keycloak vkcloud_projectsservice_stolon_clustervkcloud_galera_keystone vkcloud_proxysqlvkcloud_galera_magnum vkcloud_public_haproxyvkcloud_galera_neutron vkcloud_rabbitmq_persistentvkcloud_galera_nova vkcloud_redisvkcloud_galera_octavia vkcloud_rsvkcloud_galera_quotamanager vkcloud_scrooge_etcd_clustervkcloud_galera_scrooge vkcloud_scst_iscsivkcloud_galera_scroogearchive vkcloud_service_galeravkcloud_galera_sdnbilling vkcloud_servicesmanager_stolon_clustervkcloud_galera_zabbix vkcloud_sprutvkcloud_glance vkcloud_stolon_clustervkcloud_iam_etcd_cluster vkcloud_syncservice_stolon_clustervkcloud_katana vkcloud_uncert_kubevkcloud_kube vkcloud_zabbixvkcloud_logstash vkcloud_zookeeper$ ls ~/inventory/vkcloud/group_vars/vkcloud/addresses.yml freeipa.yml networks.yml version_locks.ymlbgp.yml iam.yml packages.yml versions.ymlbox-builder.yml imageloader.yml postdeploy.yml yum-repos.ymlceph.yml initial-install-vars.yml README.md yum.ymlcommon.yml INVENTORY.md test-stand-app-limits.yml zabbix.ymldeprecated.yml logging.yml vars.ymlfeature.yml memcached.yml vault.yml -
Удалите исполняемый файл Inventory-генератора и файл
minimal.yml:$ rm -f invgen-* minimal.yml
Ряд параметров производительности в инсталляторе настроен таким образом, чтобы Платформа могла запуститься даже на малых ресурсах. При использовании высокопроизводительной конфигурации отредактируйте параметры, указанные далее.
В файлах ~/inventory/vkcloud/group_vars/vkcloud_galera_<SERVICE>/vars.yml измените значения параметров max_connections, которые ограничивают количество одновременных подключений к БД MySQL и нагрузку на неё:
mysql:# Калибровка Mysql. Название переменной должно соответствовать названию параметра в MySQLinnodb_io_capacity: 8000innodb_buffer_pool_instances: 2max_connections: 700max_connect_errors: 4294967295max_heap_table_size: 134217728tmp_table_size: 134217728innodb_read_io_threads: 16innodb_buffer_pool_size: "{{ default_innodb_buffer_pool_size }}"key_buffer_size: 134217728
Значения параметров max_connections необходимо изменять пропорционально по компонентам, в зависимости от нагрузки на Платформу. Конкретные значения зависят от многих факторов и вычисляются эмпирически.
Примерные пропорциональные значения приведены в таблице 1.
Компонент | Значение |
|---|---|
Neutron |
|
Nova |
|
Cinder |
|
BillingAccountService |
|
Scrooge |
|
ScroogeArchive |
|
Karboii |
|
Glance |
|
Karboii |
|
QuotaManager |
|
SDNBilling |
|
Keystone |
|
Glance |
|
Keycloak |
|
Zabbix |
|
Barbican |
|
GHost |
|
Octavia |
|
Magnum |
|
Manila |
|
Trove |
|
Для инсталляции без пользователей достаточно указать значение 1000 для всех компонентов.
При увеличении нагрузки на Платформу значения max_connections необходимо увеличить.
В файле ~/inventory/vkcloud/group_vars/vkcloud/common.yml измените значение переменной default_innodb_buffer_pool_size (размер буфера в ОЗУ, выделяемого для каждой БД).
Увеличить значение в переменной innodb_buffer_pool_size можно в файле настроек для конкретной БД group_vars/vkcloud_galera_<DATABASE>/vars.yml.
По умолчанию пароль от пользователя root генерируется автоматически из 32 символов, закодированных поверх в Base64.
Пароль от пользователя root содержится в файле ~/inventory/vkcloud/group_vars/vkcloud/vault.yml в переменной vault_root_password_plain_text в открытом виде и в переменной vault_root_password в закодированном виде.
$ grep vault_root_password ~/inventory/vkcloud/group_vars/vkcloud/vault.ymlvault_root_password_plain_text: Uzl5YTA3MDdTR3djUDlNUDMxNTA=vault_root_password: $6$Bq.lsw6tyfI/jsJw$95eqFapn0Lt.XbvY9bErYRRBoRvM0FHMITB8dh0a8bYO3QJHsT47d3InDObKRELPKeMyELXl36Yj9X3I3z2Op0
Оставьте сгенерированный пароль в качестве root-пароля, либо поменяйте его на свой.
Чтобы применить сгенерированный пароль в качестве root, сохраните пароль из переменной vault_root_password_plain_text для инвентаризации секретов. Переменную vault_root_password_plain_text при этом можно удалить.
Чтобы поменять пароль на свой:
-
Зашифруйте свой пароль через Python:
$ python3 -c 'import crypt,getpass;pw=getpass.getpass();print(crypt.crypt(pw) if (pw==getpass.getpass("Confirm: ")) else exit())'Password: *password*Confirm: *password*$6$AZAax7ZhzC3Mmv9A$KVc8C5odjXjz1A94ZvaYLpjSXh4hqZBlkpEHIZkhWveCJsrEaYYWpVHdqGaIezL/x3yaaOtXVEoveC6Iu0NXi1 -
Получившуюся строку внесите в переменную
vault_root_password. При этом переменнуюvault_root_password_plain_textможно удалить из файла:$ vi ~/inventory/vkcloud/group_vars/vkcloud/vault.yml...vault_root_password: $6$AZAax7ZhzC3Mmv9A$KVc8C5odjXjz1A94ZvaYLpjSXh4hqZBlkpEHIZkhWveCJsrEaYYWpVHdqGaIezL/x3yaaOtXVEoveC6Iu0NXi1...
-
Распакуйте и откройте архив дистрибутива:
$ cd ~$ RELEASE_NAME='4.0'$ tar -xzf repos_mcs_distr_box-${RELEASE_NAME}.tar.gz$ cd repos_mcs_distr_box-${RELEASE_NAME}/$ ls -lРаспакованный архив включает в себя следующие файлы и папки:
ansible-openstack/— Ansible-плейбуки и роли для установки Платформы.gitinfo.txt— техническая информация для разработки. Необходим на случай отладки.invgen-version— версия Inventory-генератора под ваш релиз. Необходим на случай отладки.mcs-ceph-deploy/— вспомогательные инструменты для настройки Ceph.terraform_manifests/— примеры Terraform-манифестов для проверки работы IaC-составляющей облака.
-
Скопируйте каталог
ansible-openstack/в каталог~/inventory.$ cp -r ansible-openstack ~/inventory/ansible-openstack
После выполнения всех шагов данного раздела проверьте содержимое каталога inventory:
$ ls ~/inventory/*/home/ansible/inventory/ansible-openstack:inventory library playbooks roles upgrade/home/ansible/inventory/tools:box.sh.d/home/ansible/inventory/vkcloud:ansible.cfg group_vars hosts.yml host_vars README.md vkcloud.yml
Каталог содержит:
ansible-openstack— каталог с Ansible-ролями и плейбуками.tools— настройки скрипта установкиbox.sh.vkcloud— сгенерированный инвенторник.
Файл конфигурации Ansible (ansible.cfg) расположен в каталоге ~/inventory/vkcloud.
Создайте каталог для хранения логов из параметра log_path:
$ mkdir $HOME/ansible/
Файл group_vars/vkcloud/vault.yml содержит пароли Платформы. При условии, что злоумышленники гарантированно не смогут его прочитать, вы можете оставить его в открытом виде. Иначе зашифруйте его с помощью ansible-vault.
Чтобы оставить файл group_vars/vkcloud/vault.yml открытым, удалите из файла ansible.cfg строку с параметром vault_identity_list:
$ cd ~/inventory/vkcloud$ sed -i '/vault_identity_list/d' ansible.cfg
В случае необходимости зашифруйте файл group_vars/vkcloud/vault.yml:
-
Создайте файл с новым паролем для Ansible vault:
$ echo "my-vault-secret-password" > ~/.ansible.vault-vkcloud -
Зашифруйте файл
group_vars/vkcloud/vault.yml:$ ansible-vault encrypt group_vars/vkcloud/vault.ymlПосле этого содержимое файла
group_vars/vkcloud/vault.ymlстанет зашифрованным:$ head group_vars/vkcloud/vault.yml$ANSIBLE_VAULT;1.2;AES256;vkcloud356138323034633933393838643365306565613236613632353562636537386630663632303438366363386337356434373362303062633662313266396235310a356164626431393531333663633131623964336461313832633534353762353534326137313362393237366366666263643737366566303161326262313732350a3436663533363234336435353062333564343839333633316235393339643865336334303138396639366439616130306537626335303238373338343566396235623866343135626361663536626539613435643032383361356132346536353635386461383637343363623138346636323861393933623636323962326333666538386561383039633065343561306430306438666630636637326235373663333666363738343462613162306366343739643663666238396133663833326636633338646239373362376134353938646161396433633365313531663332353138303732Чтобы внести в него изменения выполните команду
ansible-vault:$ ansible-vault edit group_vars/vkcloud/vault.yml
Откроется текстовый редактор с расшифрованным текстом. После сохранения и выхода из него файл снова зашифруется.