Настройка и управление DRS¶
Основные операции при работе с DRS:
Подробнее о каждой операции далее.
Подготовка файла конфигурации DRS¶
Для начала работы с DRS необходимо определить основные параметры DRS в файле конфигурации drs.ini. Для этого создайте файл drs.ini в каталоге config репозитория региона.
Пример файла конфигурации (замените все <VALUE> на подходящие значения):
[DEFAULT] # Limit DRS to specific availability zone. It means that source and # destination hypervisors for migrations are located in this specific # availability zone (string value) limit_drs_to_az = <None> # Limit to exact CPU spec (boolean value) limit_to_exact_cpu_spec = false # Migration timeout in seconds (integer value) migration_timeout = 1200 # Post-migration cooldown timeout in seconds (integer value) live_migration_cooldown = 0 # VMs, projects, pci exclude enable (boolean value) exclude_enable = false # VMs, projects, pci exclude list (list value) exclude_list = # A list of Nova filter names that will be used for filtering hosts to # calculate destination hypervisor during live migrations (list value) enabled_nova_filters = AvailabilityZoneFilter,ComputeFilter,ServerGroupAntiAffinityFilter,ServerGroupAffinityFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,AggregateInstanceExtraSpecsFilter # Client key (string value) client_key = <VALUE> # Client certificate (string value) client_cert = <VALUE> [alerting] # enable alerting (boolean value) enable_alerting = false # alert storage types enabled, ex: prometheus,zabbix (list value) #alert_storage_types = # prometheus alert managers urls (list value) #prometheus_alert_urls = http://10.0.0.11:9093/api/v2/alerts # zabbix alerts urls (list value) #zabbix_alert_urls = 10.0.0.11 # event types to alert, ex: Balancing_failed (list value) #enabled_alerts = Balancing_failed,Balancing_started [api] # Database URI (string value) db_uri = <VALUE> # API host (string value) api_host = <VALUE> # API port (integer value). Probably 8089 api_port = <VALUE> # API debug mode (boolean value) api_debug = false # Disable Keystone auth middleware (boolean value) disable_auth = true # Enable API documentation. For Now supported Swagger and Redoc.Config # option 'docs_prefix_url' specifies path prefix to both docs types # (boolean value) enable_docs = false # URL prefix for documentation. It should be set without slashes, e.g. # docs_prefix_url='docs', then you'll find swagger and redoc at # docs/swagger and docs/redoc (string value) #docs_prefix_url = docs [openstack] # # From openstacklb # # OpenStack username (string value) username = <VALUE> # OpenStack password (string value) password = <VALUE> # OpenStack project name (string value) project_name = <VALUE> # OpenStack auth url (string value) auth_url = <VALUE> # OpenStack user domain name (string value) domain_name = <VALUE> # check OpenStack SSL certificates (boolean value) verify = true # OpenStack region name (string value) region_name = <VALUE> # Enable openstack debugging logs level (boolean value) logging_enabled = false # OpenStack interface (string value) interface = <VALUE> [prometheus] # Prometheus username (string value) prometheus_username = <VALUE> # Prometheus password (string value) prometheus_password = <VALUE> # Prometheus query url (uri value) query_url = <VALUE> # Prometheus retry count (integer value) retry_count = 3 # Prometheus metric resolution in minutes (integer value) metric_resolution = 5 # Prometheus timeout in seconds (integer value) prometheus_timeout = 10 [scheduler] # (string value) scheduler_log_level = INFO scheduler_check_period=60
Использование DRS через CLI¶
Если вы планируете управлять модулем DRS через консольный клиент для работы с DRS API, установите DRS CLI. Для этого введите команду:
$ pip install python_drs_client -i http://<nexus-ip>:<nexus-port>/nexus/repository/pypi-all/simple -v --trusted-host <nexus-ip>
Создание конфигураций DRS (DRS Config)¶
Конфигурация DRS определяет алгоритм работы и основные параметры.
Пример создания конфигурации DRS:
$ source ~/openrc
$ drs config create --name config_1 --algorithm help_overloaded_hypervisors --live_migration_cooldown 500 --base_config '{"METRIC_RESOLUTION": 2, "METRIC_WEIGHT_CPU": 1.0, "MOVE_SYN_THRESHOLD": 75}'
Здесь:
config_1— имя конфигурации;
help_overloaded_hypervisors— алгоритм DRS;
live_migration_cooldown— время (в секундах) "остывания" ВМ после её миграции, в течение которого она не будет включаться в рекомендации;
METRIC_RESOLUTION = 2— время (в минутах), за которое будут учтены данные о нагрузках на гипервизор, значение должно быть не меньше2;
METRIC_WEIGHT_CPU = 1— коэффициент, определяющий вес получаемых данных о нагрузке на CPU гипервизора;
MOVE_SYN_THRESHOLD = 75— порог нагрузки (в процентах), который определяет перегруженность гипервизора.
Ожидаемый вывод:
+----------------------+----------------------------------------------------------------------------------------------------------------------------------------------+
| Field | Value |
+----------------------+----------------------------------------------------------------------------------------------------------------------------------------------+
| name | config_1 |
| algorithm | help_overloaded_hypervisors |
| exclude_enable | True |
| exclude_list | server,project,pci |
| base_config | {'METRIC_RESOLUTION': 2, 'METRIC_WEIGHT_CPU': 1.0, 'METRIC_WEIGHT_MEM': 0.0, 'MOVE_SYN_THRESHOLD': 75, 'TARGET_HYPERVISOR_SOFT_LIMIT': None} |
| id | 3 |
| uuid | 19a96358-83a5-4047-9910-b1e80a1689d4 |
| created_user_id | e326737fa7d847c08ee5252fa77ad139 |
| created_at | Mon, 09 Sep 2024 09:18:26 GMT |
| last_updated_user_id | None |
| updated_at | None |
+----------------------+----------------------------------------------------------------------------------------------------------------------------------------------+
Создание заданий DRS (DRS Job)¶
Создание задания необходимо для запуска работы DRS. Формат команды создания задания:
$ drs job create [-h] [-f {json,shell,table,value,yaml}] [-c COLUMN] [--noindent] [--prefix PREFIX]
[--max-width <integer>] [--fit-width] [--print-empty] [--name <name>]
[--config_id <config_id>] [--autorun_recommendations <autorun_recommendations>]
[--period <period>] [--status <status>] [--offset <offset>]
[--availability_zone <availability_zone>]
Пример создания задания DRS:
$ source ~/openrc
$ drs job create --name job_1 --period 180 --status "enabled" --autorun_recommendations true --config_id 3
Здесь:
job_1— имя задания;
<config_id>— ID конфигурации;
period = 180— периодичность оценки состояния нагрузки на гипервизор (в секундах), значениеperiodдолжно превышатьMETRIC_RESOLUTIONиз конфигурации;
status = "enabled"— статус (запущено);
autorun_recommendations = true— автоматически применять выработанные рекомендации.
Пример команды для создания задания DRS и получения его ID:
$ drs_config_id=$(drs config create --name config_1 --algorithm help_overloaded_hypervisors --base_config '{"METRIC_RESOLUTION": 2, "METRIC_WEIGHT_CPU": 1.0, "MOVE_SYN_THRESHOLD": 75}'|grep -E "\sid\s"| awk '{print $4}')
Ожидаемый вывод:
+-------------------------+--------------------------------------+
| Field | Value |
+-------------------------+--------------------------------------+
| name | job_1 |
| config_id | 3 |
| autorun_recommendations | True |
| period | 180 |
| status | enabled |
| id | 3 |
| uuid | 2c196030-c665-4125-8bc5-250958bed791 |
| created_at | Mon, 09 Sep 2024 09:47:51 GMT |
| updated_at | None |
| created_user_id | e326737fa7d847c08ee5252fa77ad139 |
| last_updated_user_id | None |
+-------------------------+--------------------------------------+
Просмотр оптимизаций и рекомендаций¶
Чтобы получить список оптимизаций, введите команду:
$ drs optimization list
Посмотрите статусы оптимизаций в выводе команды:
| 21 | f2c3bbea-7a57-4b1d-929b-d29e1780cbd4 | {"id": 1, "uuid": "e2ddc24b-fb5c-46b8-8363-419f604343e9",
"name": "config_1", "base_config": {"METRIC_RESOLUTION": 2, "METRIC_WEIGHT_MEM": 0.0,
"METRIC_WEIGHT_CPU": 1.0, "MOVE_SYN_THRESHOLD": 65, "MOVE_SYN_DIFF_AFTER": 0}, "exclude_enable": "false",
"exclude_list": "", "created_user_id": null, "created_at": "2023-10-16T14:52:07", "last_updated_user_id":
null, "updated_at": "2023-10-16T15:38:21"} | 0 | Mon, 16 Oct 2023 15:43:19 GMT | None
| 1 | recommendations created |
...
Присутствие recommendations created в этом выводе означает, что были сгенерированы рекомендации.
Запуск рекомендаций¶
Чтобы получить рекомендацию, введите команду:
$ drs recommendation list --optimization_id 3
При проведении оптимизации будут сформированы рекомендации, как в примере ниже:
| id | uuid | instance_uuid | instance_name | source_node | destination_node | expected_scoring_diff | optimization_id | created_at |
+----+--------------------------------------+--------------------------------------+---------------+-------------+------------------+-----------------------+-----------------+-------------------------------+
| 1 | 463d664e-4522-41a8-b524-b0c1968af520 | 38214574-603b-4501-8e69-83b16e87056c | server_3 | cmpt-1 | cmpt-2 | None | 3 | Tue, 17 Oct 2023 13:54:14 GMT |
Просмотр миграций¶
Чтобы запустить миграцию, введите команду:
$ drs migration start 1
Ожидаемый вывод:
+-------------------+--------------------------------------+
| Field | Value |
+-------------------+--------------------------------------+
| recommendation_id | 1 |
| id | 1 |
| uuid | b7cba790-eff7-4ef3-9bf7-f2213d204770 |
| user_id | None |
| status | created in db |
| error_details | None |
| started_at | Tue, 17 Oct 2023 14:01:10 GMT |
| updated_at | None |
+-------------------+--------------------------------------+
Чтобы узнать статус миграции, введите команду:
$ drs migration show 1
Ожидаемый вывод:
+-------------------+--------------------------------------+
| Field | Value |
+-------------------+--------------------------------------+
| recommendation_id | 1 |
| id | 1 |
| uuid | 52950686-cbc6-43d0-8f34-cee2ec114eb5 |
| user_id | None |
| status | completed |
| error_details | None |
| started_at | Mon, 24 Jul 2023 19:08:14 GMT |
| updated_at | Mon, 24 Jul 2023 19:09:08 GMT |
+-------------------+--------------------------------------+
Очистка базы данных DRS от старых объектов¶
Внимание
Операция удаления базы данных DRS необратима. Вследствие удаления БД DRS будут удалены все конфигурации, задания, оптимизации и рекомендации.
Формат команды очистки данных DRS:
$ openstacklb-manage db purge [-h] (--all | --before <YYYY-MM-DD [HH:mm:ss]>)
options:
-h, --help show this help message and exit
--all Clear all optimizations
--before <YYYY-MM-DD [HH:mm:ss]>
Clear optimizations older than date
Использование DRS через Admin UI¶
Вся основная информация о DRS, такая как нагрузка на гипервизоры, оптимизации и рекомендации, доступна в разделе Портала администратора.
DRS Board в Портале администратора¶
Управляйте конфигурациями DRS в разделе .
Список конфигураций DRS¶
Чтобы создать новую конфигурацию, нажмите кнопку Создать Config. В открывшемся окне выберите алгоритм. Заполните необходимые поля и нажмите Создать.
Создание конфигурации DRS¶
Управляйте заданиями DRS в разделе .
Список заданий DRS¶
Чтобы создать новое задание, нажмите кнопку Создать Job. Заполните обязательные поля и нажмите Создать.
Создание задания DRS¶
Всю информацию по оптимизациям (ID оптимизации, ID связанного задания, время создания и статус) можно посмотреть в разделе .
Нажмите кнопку Посмотреть рекомендации для выбранной оптимизации в строке таблицы, чтобы посмотреть связанные рекомендации.
Чтобы увидеть оптимизации для определенного задания, используйте фильтр Job над таблицей.
Список оптимизаций¶
В разделе вы можете работать с рекомендациями DRS — смотреть все детали и запускать миграции.
Чтобы запустить миграцию по отдельной рекомендации, нажмите кнопку start_migration в соответствующей строке таблицы.
Рекомендации DRS¶
Всю информацию по миграциям (ID миграции, ID связанной рекомендации, время запуска и статус) можно найти в разделе .
Информация по миграциям¶