# Политика масштабирования

При создании группы виртуальных машин можно выбрать каким образом увеличивать и уменьшать число ВМ в группе.

Политика определяется в YAML-файле, в ключе `scale_policy`.

## fixed_scale {#fixed-scale-policy}

Ключ `fixed_scale` определяет группу ВМ фиксированного размера. Размер группы определяется в ключе `size`. Вы можете создать группу с необходимым вам количеством ВМ в рамках доступных [квот и лимитов](../../limits.md).

Пример записи в YAML-файле:

```yaml
...
scale_policy:
  fixed_scale:
    size: 3
...
```

Где:

Ключ | Значение
--- | ---
`fixed_scale` | Группа ВМ фиксированного размера.
`size`* | Количество ВМ в группе.<br>Допустимые значения — от 0 до 100.

\* Обязательное поле.

## auto_scale {#auto-scale-policy}

Ключ `auto_scale` определяет автоматически масштабируемую группу ВМ. Начальный размер группы определяется в ключе `initial_size`. Вы можете создать группу с необходимым вам количеством ВМ в рамках доступных [квот и лимитов](../../limits.md).

Группа ВМ будет масштабироваться по значениям указанных метрик: [нагрузке CPU](../scale.md#cpu-utilization) (ключ `cpu_utilization_rule`) и/или [метрикам из сервиса Yandex Monitoring](../scale.md#monitoring-metrics). Если в файле указано несколько метрик, то в качестве размера группы ВМ используется наибольший из вычисленных по метрикам.

Пример записи в YAML-файле:

```yaml
scale_policy:
  auto_scale:
    auto_scale_type: REGIONAL
    initial_size: 5
    max_size: 15
    min_zone_size: 3
    measurement_duration: 30s
    warmup_duration: 60s
    stabilization_duration: 120s
    cpu_utilization_rule:
      utilization_target: 75
    custom_rules:
    - rule_type: WORKLOAD
      metric_type: GAUGE
      metric_name: queue.messages.stored_count
      labels:
        queue: dj6000000002********
      target: 5
```

Где:

Ключ | Значение
--- | ---
`auto_scale` | Автоматически масштабируемая группа ВМ.
`auto_scale_type` | [Тип автоматического масштабирования](../scale.md#auto-scale-type).<br/>Возможные значения: <ul><li>`ZONAL` — зональное масштабирование: для каждой [зоны доступности](../../../../overview/concepts/geo-scope.md) рассчитывается свое [среднее значение метрики](../scale.md#average-metric) для масштабирования и нужное количество ВМ.</li><li>`REGIONAL` — региональное масштабирование: метрика и количество ВМ рассчитываются для всей группы.</li></ul> Значение по умолчанию: `ZONAL`.
`initial_size`* | Начальное количество ВМ в группе.<br>Допустимые значения — от 1 до 100.
`max_size` | Максимальное количество ВМ в группе.<br>Допустимые значения — от 0 до 100.
`min_zone_size` | Минимальное количество ВМ в одной зоне доступности.<br>Допустимые значения — от 0 до 100.
`measurement_duration` | Промежуток измерения нагрузки: значение каждой метрики будет рассчитываться как среднее всех измерений, сделанных за указанный промежуток. Если это значение превысит целевое значение [метрики для масштабирования](../scale.md#metrics), то Instance Groups увеличит количество ВМ в группе.<br>Допустимые значения — от 60 до 600 секунд. Значение по умолчанию — 60 секунд.
`warmup_duration` | Время на разогрев ВМ. В течение этого времени после запуска на ВМ подается трафик, но значения метрик для этой ВМ не используются для масштабирования группы. Вместо них используются средние значения метрик в группе.<br>Допустимые значения — от 0 до 600 секунд. Значение по умолчанию — 0 секунд.
`stabilization_duration` | Период стабилизации. После увеличения количества ВМ размер группы не уменьшается до окончания периода стабилизации, даже если [среднее значение метрики](../scale.md#average-metric) для масштабирования стало ниже целевого уровня.<br>Допустимые значения — от 60 до 1800 секунд.
`cpu_utilization_rule` | Задает целевой уровень нагрузки CPU, который позволяет выполнять масштабирование, основываясь на средней нагрузке CPU для группы ВМ.
`utilization_target` | Целевой уровень нагрузки CPU, который должен поддерживать Instance Groups.<br>Если средний уровень нагрузки CPU ниже целевого значения, Instance Groups будет сокращать количество ВМ, пока не достигнет значения `min_zone_size` в каждой зоне доступности.<br>Если средний уровень нагрузки CPU выше целевого значения, Instance Groups будет создавать ВМ, пока не достигнет значения `max_size`.<br>Допустимые значения — от 10 до 100.
`custom_rules` | Список [метрик из сервиса Yandex Monitoring](../scale.md#monitoring-metrics) для автоматического масштабирования. Может включать до трех метрик.
`rule_type` | Тип правил применения метрики:<ul><li>`UTILIZATION` — для метрик, характеризующих потребление ресурсов одной ВМ;</li><li>`WORKLOAD` — для метрик, характеризующих суммарную нагрузку на все ВМ.</li></ul>Подробнее в разделе [Метрики мониторинга](../scale.md#monitoring-metrics).
`metric_type` | Тип метрики:<ul><li>`GAUGE` — метрика отражает значение показателя в определенный момент времени;</li><li>`COUNTER` — метрика монотонно растет со временем.</li></ul>Подробнее в разделе [Метрики мониторинга](../scale.md#monitoring-metrics).
`metric_name` | Имя метрики из Monitoring.
`labels` | [Метки](../../../../monitoring/concepts/data-model.md#label) метрики из Monitoring.
`target` | Целевое значение метрики, по которому Instance Groups рассчитывает нужное количество ВМ. Подробнее в разделе [Метрики мониторинга](../scale.md#monitoring-metrics).

\* Обязательное поле.

## test_auto_scale {#test-auto-scale-policy}

Ключ `test_auto_scale` определяет группу ВМ фиксированного размера с возможностью тестирования автоматического масштабирования. На графиках вкладки **Мониторинг** отображается рекомендуемое увеличение или уменьшение числа ВМ в зависимости от значения выбранной метрики, при этом фактическое число машин всегда остается равным заданному в ключе `size`. Вы можете создать группу с необходимым вам количеством ВМ в рамках доступных [квот и лимитов](../../limits.md).

```yaml
scale_policy:
  fixed_scale:
    size: 5
  test_auto_scale:
    initial_size: 5
    max_size: 15
    min_zone_size: 3
    measurement_duration: 30s
    warmup_duration: 60s
    stabilization_duration: 120s
    cpu_utilization_rule:
      utilization_target: 75
```

Для `test_auto_scale` используются такие же ключи, [как и для `auto_scale`](#auto-scale-policy).

## Примеры использования {#examples}

* [Работа с группой виртуальных машин с автоматическим масштабированием](../../../tutorials/vm-autoscale/index.md)

#### Полезные ссылки {#see-also}

* [Политика восстановления](healing-policy.md)
* [Политика распределения](allocation-policy.md)
* [Политика развертывания](deploy-policy.md)