Я использую Heat для реализации автоматического масштабирования, ниже приведена короткая часть моего кода:
heat_template_version: 2016-10-14
...
resources:
corey_server_group:
type: OS::Heat::AutoScalingGroup
depends_on: corey-server
properties:
min_size: 1
max_size: 5
resource:
type: CoreyLBSServer.yaml
properties:
......
CoreyLBSServer.yaml
heat_template_version: 2016-10-14
...
resources:
server:
type: OS::Nova::Server
properties:
flavor:
......
Я нахожу способ уменьшить конкретный экземпляр, вот некоторые из них, которые я пробовал, но все они не сработали, всегда уменьшается самый старый экземпляр.
1. Завершите работу экземпляра, затем сообщите о политике масштабирования. (X)
2.Согласно this, найдите идентификатор стека из атрибута refs_map
, пометьте ресурс server
как unhealthy
, затем сигнализируйте политику масштабирования. (X)
3. Найдите идентификатор стека из атрибута refs_map
, установите статус стека как FAILED
, затем сигнализируйте политику масштабирования. (ИКС)
Я попытался выяснить, какую стратегию использует AutoScalingGroup при масштабировании, из кода heat/common/grouputils.py, он сортирует участников по created_time, а затем по имени, поэтому самый старый член будет удален первым при уменьшении масштаба. Но есть исключение: если установлено include_failed
, неудачные участники будут помещены первыми в список, отсортированный по created_time, а затем по имени.
Обновить
Я, наконец, успешно установил свою цель как неудачную, вот команда:
# firstly, print the physical_resource_id of corey_server_group
openstack stack resource show -c physical_resource_id <parent_stack_id> corey_server_group
# secondly, list resources in the corey_server_group
openstack stack resource list <physical_resource_id>
# thirdly, mark the target as unhealthy
openstack stack resource mark unhealthy <physical_resource_id> <resource_name>
# after these commands, you will see the resource_status of the target becomes "Check Failed"
Но у него есть еще одна проблема: Heat удалит как неисправный, так и самый старый ресурс при уменьшении масштаба! Как уменьшить масштаб только цели, отмеченной как неудачная?