Placement: управление ресурсами
Бывают случаи, когда в результате неудачной миграции, перестройки инстанса или по другой причине, в реестре nova
остается инстанс со статусом error
, который никак не удалить штатным образом (CLI, GUI).
Запишем UUID проблемного инстанса:
Для начала надо убрать с этой ВМ все дополнительные диски и снимки, если они есть и если это возможно.
Далее, мы вынуждены удалить проблемную виртуалку с помощью такого запроса в СУБД:
!! Конечно, так поступать надо только в крайнем случае, когда все правильные варианты исчерпаны.
Если запросить данные о этой ВМ:
openstack server show $VM_UUID
No server with a name or ID of 'b32e5792-427c-43b1-83dc-2d3e3c8d74c4' exists.
То получим ответ, что такой ВМ не существует.
На гипервизоре остается информация о занятых этой “удаленной” ВМ ресурсах. В логе это выглядит примерно таким образом:
2024-10-02 12:07:18.800 1590924 WARNING nova.compute.resource_tracker [None req-f8320401-70fb-4532-8d87-e5240e53f68b - - - - - -] Instance b32e5792-427c-43b1-83dc-2d3e3c8d74c4 is not being actively managed by this compute host but has allocations referencing this compute host: {'resources': {'VCPU': 12, 'MEMORY_MB': 32768, 'DISK_GB': 80}}. Skipping heal of allocation because we do not know what to do.
2024-10-02 12:07:35.608 1590924 WARNING nova.compute.manager [None req-f8320401-70fb-4532-8d87-e5240e53f68b - - - - - -] While synchronizing instance power states, found 1 instances in the database and 2 instances on the hypervisor.
Здесь явно видно, что на гипервизоре фактически есть две ВМ, а по данным из БД - 1.
Предварительно надо записать сколько vCPU, RAM и Disk занимала эта ВМ, например: 12, 32768, 80.
Далее описывается последовательность действий для исправления другой служебной информации, в частности о потребляемых этой ВМ ресурсах.
- Находим идентификатор ресурсного провайдера для нашего хоста
cmpt-c10z02-c1002
:
HOST="cmpt-c01z02-c1002"
RPL_UUID=$(openstack --os-placement-api-version 1.12 resource provider list | grep ${HOST} | awk '{print $2}')
echo $RPL_UUID
151ad1bd-d4dc-4211-a1e7-d13920c50248
- Смотрим детальную информацию по этому uuid:
openstack --os-placement-api-version 1.12 resource provider show --allocations $RPL_UUID
+-------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Field | Value |
+-------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| uuid | 151ad1bd-d4dc-4211-a1e7-d13920c50248 |
| name | cmpt-c01z02-c1002 |
| generation | 17 |
| allocations | {'e206c8a1-556d-4a12-b3ec-ab275c7f3274': {'resources': {'VCPU': 2, 'MEMORY_MB': 8192, 'DISK_GB': 80}}, 'b32e5792-427c-43b1-83dc-2d3e3c8d74c4': {'resources': {'VCPU': 12, 'MEMORY_MB': 32768, |
| | 'DISK_GB': 80}}} |
+-------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
- Мы знаем, что удаленная ВМ содержала 12 vCPU и 32Гб RAM - соответственно смотрим информацию о размещенных ресурсах по конкретному
allocation uuid
=b32e5792-427c-43b1-83dc-2d3e3c8d74c4
:
AL_UUID="b32e5792-427c-43b1-83dc-2d3e3c8d74c4"
openstack --os-placement-api-version 1.12 resource provider allocation show $AL_UUID
+--------------------------------------+------------+-------------------------------------------------+----------------------------------+----------------------------------+
| resource_provider | generation | resources | project_id | user_id |
+--------------------------------------+------------+-------------------------------------------------+----------------------------------+----------------------------------+
| 151ad1bd-d4dc-4211-a1e7-d13920c50248 | 17 | {'VCPU': 12, 'MEMORY_MB': 32768, 'DISK_GB': 80} | 8b4e913924bb4d9da158244e308bb1c5 | 2f065cf6db5d4ec3b5978ea8a01622f3 |
+--------------------------------------+------------+-------------------------------------------------+----------------------------------+----------------------------------+
- Для примера, мы можем изменить эти значения на другие - например, минимальные:
openstack --os-placement-api-version 1.12 resource provider allocation set --allocation rp=$RPL_UUID,DISK_GB=1,MEMORY_MB=1,VCPU=1 --project-id 8b4e913924bb4d9da158244e308bb1c5 --user-id 2f065cf6db5d4ec3b5978ea8a01622f3 $AL_UUID
+--------------------------------------+------------+-------------------------------------------+----------------------------------+----------------------------------+
| resource_provider | generation | resources | project_id | user_id |
+--------------------------------------+------------+-------------------------------------------+----------------------------------+----------------------------------+
| 151ad1bd-d4dc-4211-a1e7-d13920c50248 | 18 | {'DISK_GB': 1, 'MEMORY_MB': 1, 'VCPU': 1} | 8b4e913924bb4d9da158244e308bb1c5 | 2f065cf6db5d4ec3b5978ea8a01622f3 |
+--------------------------------------+------------+-------------------------------------------+----------------------------------+----------------------------------+
Здесь нельзя задать нулевые значение - только положительные целые числа.
- Но наша задача состоит в том, чтобы вообще убрать эту информацию от $AL_UUID - а сделать это мы можем такой командой:
- Проверим, что информация убралась из потребленных ресурсов:
openstack --os-placement-api-version 1.12 resource provider show --allocations 151ad1bd-d4dc-4211-a1e7-d13920c50248
+-------------+--------------------------------------------------------------------------------------------------------+
| Field | Value |
+-------------+--------------------------------------------------------------------------------------------------------+
| uuid | 151ad1bd-d4dc-4211-a1e7-d13920c50248 |
| name | cmpt-c01z02-c1002 |
| generation | 18 |
| allocations | {'e206c8a1-556d-4a12-b3ec-ab275c7f3274': {'resources': {'VCPU': 2, 'MEMORY_MB': 8192, 'DISK_GB': 80}}} |
+-------------+--------------------------------------------------------------------------------------------------------+
- Далее, дадим из контроллера команду на урегулирование несоответствия размещенных ресурсов:
- Перезапустим сервис
nova-compute
на сервереcmpt-c01z02-c1002
, ждем несколько минут и видим в логе, что и теперь не соответствует:
While synchronizing instance power states, found 1 instances in the database and 2 instances on the hypervisor.
- Смотрим, какие ВМ числятся на гипервизоре:
virsh list --all
Id Name State
------------------------------------
1 instance-000150f0 running
- instance-000150a8 shut off
virsh dominfo instance-000150a8
Id: -
Name: instance-000150a8
UUID: b32e5792-427c-43b1-83dc-2d3e3c8d74c4
OS Type: hvm
State: shut off
CPU(s): 12
Max memory: 33554432 KiB
Used memory: 33554432 KiB
Persistent: yes
Autostart: disable
Managed save: no
Security model: apparmor
Security DOI: 0
-
Убираем определение этой ВМ:
11. Вот теперь в логеnova-compute.log
все хорошо - сообщение о несоответствии не выдается.
Опубликовано: 02.10.2024