Блок .spec.sizingPolicies задаёт, какие сочетания ядер, доли ядра и памяти разрешены виртуальным машинам (ВМ) этого класса.
Изменения в блоке .spec.sizingPolicies затрагивают уже существующие виртуальные машины. У виртуальных машин, которые перестали соответствовать новым требованиям, условие SizingPolicyMatched в блоке .status.conditions принимает статус False.
Задавая политики, учитывайте топологию CPU виртуальных машин.
Политика состоит из списка правил, каждое из которых действует на свой диапазон ядер. Диапазон задаётся обязательным блоком cores, и диапазоны разных правил пересекаться не могут, иначе Deckhouse Platform (DP) отклонит такой класс.
Правильная структура, где диапазоны идут друг за другом без пересечений:
- cores:
min: 1
max: 4
# ...
- cores:
min: 5 # Начало следующего диапазона на единицу больше предыдущего max.
max: 8
Недопустимая структура, где значение 4 попадает сразу в два диапазона:
- cores:
min: 1
max: 4
# ...
- cores:
min: 4
max: 8
Оставлять разрывы между диапазонами DP не запрещает, но виртуальная машина, число ядер которой не попало ни в один диапазон, останется без политики. Поэтому начинайте очередной диапазон со значения, следующего за max предыдущего.
Внутри диапазона задаются требования к памяти и к доле ядра:
memory— минимум и максимум памяти. Указывается либо на весь диапазон, либо на одно ядро через вложенный блокmemory.perCore.coreFractions— список разрешённых долей ядра, например[25, 50, 100]для 25%, 50% и 100%. Если владелец проекта задал параметрcoreFractionвиртуальной машины явно, значение должно быть из этого списка.defaultCoreFraction— доля ядра, которую получит виртуальная машина, еслиcoreFractionв ней не задан. Значение должно входить в списокcoreFractions. Когда параметр не указан, применяется 100%.
Правило, в котором нет ни memory, ни coreFractions, ничего не ограничивает, поэтому задавайте хотя бы одно из них.
В коммерческих редакциях DP параметру defaultCoreFraction можно задать значение Auto. Тогда долю ядра для ВМ без явного coreFraction подбирает вертикальное автомасштабирование. Auto — это режим, а не доля ядра, поэтому в списке coreFractions его быть не должно.
spec:
sizingPolicies:
- cores:
min: 1
max: 8
coreFractions: [10, 25, 50, 100]
defaultCoreFraction: Auto
Значение Auto принимается, только когда доступны обе возможности:
- вертикальное автомасштабирование виртуальных машин, которое включается само в коммерческих редакциях DP при включённом модуле
vertical-pod-autoscaler; - изменение числа ядер и объёма памяти без перезапуска, которое включается функцией
HotplugCPUAndMemoryWithInPlaceResizeв параметре.spec.settings.featureGatesмодуля.
Если хотя бы одна из них недоступна, DP отклонит создание такого класса.
Новое значение по умолчанию применяется только к виртуальным машинам, созданным после его изменения. У существующей машины прежнее значение уже записано в её спецификации и остаётся там, пока владелец проекта не задаст другое.
Примеры зависимости объёма памяти от числа ядер:
-
Параметр
memoryзадаёт границы, одинаковые для всего диапазона ядер:- cores: min: 1 max: 4 memory: min: 2Gi max: 8GiВиртуальная машина с любым числом ядер от 1 до 4 получает от 2 до 8 ГиБ памяти, и число ядер на эти границы не влияет.
-
Параметр
memory.perCoreзадаёт границы в расчёте на одно ядро, а итоговые границы получаются умножением на число ядер:- cores: min: 1 max: 4 memory: perCore: min: 1Gi max: 2GiДля такой политики допустимый объём памяти растёт вместе с числом ядер:
- 1 ядро — от 1 до 2 ГиБ;
- 2 ядра — от 2 до 4 ГиБ;
- 3 ядра — от 3 до 6 ГиБ;
- 4 ядра — от 4 до 8 ГиБ.
-
Параметр
memory.stepограничивает набор допустимых значений памяти шагом сетки, чтобы владелец проекта не выбирал произвольные объёмы.Вместе с
memory.minиmemory.maxшаг отсчитывается от минимума:- cores: min: 1 max: 4 memory: min: 2Gi max: 8Gi step: 1GiДопустимы только значения 2, 3, 4, 5, 6, 7 и 8 ГиБ, а 2,5 или 7,5 ГиБ задать нельзя.
Вместе с
memory.perCoreшаг отсчитывается от памяти на одно ядро, и уже полученное значение умножается на число ядер:- cores: min: 1 max: 4 memory: perCore: min: 1Gi max: 2Gi step: 512MiНа одно ядро допустимы 1, 1,5 и 2 ГиБ, поэтому итоговый объём зависит от числа ядер:
- 1 ядро — 1, 1,5 или 2 ГиБ;
- 2 ядра — 2, 3 или 4 ГиБ;
- 3 ядра — 3, 4,5 или 6 ГиБ;
- 4 ядра — 4, 6 или 8 ГиБ.
Пример политики, которая покрывает диапазоны от 1 до 248 ядер:
spec:
sizingPolicies:
# Для 1-4 ядер доступно от 1 до 8 ГиБ памяти с шагом 512 МиБ,
# то есть 1 ГиБ, 1,5 ГиБ, 2 ГиБ, 2,5 ГиБ и так далее.
# Доступны все доли ядра.
- cores:
min: 1
max: 4
memory:
min: 1Gi
max: 8Gi
step: 512Mi
coreFractions: [5, 10, 20, 50, 100]
defaultCoreFraction: 50 # Доля ядра по умолчанию для диапазона 1-4 ядра.
# Для 5-8 ядер доступно от 5 до 16 ГиБ памяти с шагом 1 ГиБ,
# то есть 5 ГиБ, 6 ГиБ, 7 ГиБ и так далее.
# Доли ядра ограничены тремя значениями.
- cores:
min: 5
max: 8
memory:
min: 5Gi
max: 16Gi
step: 1Gi
coreFractions: [20, 50, 100]
defaultCoreFraction: 100 # Доля ядра по умолчанию для диапазона 5-8 ядер.
# Для 9-16 ядер доступно от 9 до 32 ГиБ памяти с шагом 1 ГиБ.
# Доли ядра ограничены двумя значениями.
- cores:
min: 9
max: 16
memory:
min: 9Gi
max: 32Gi
step: 1Gi
coreFractions: [50, 100]
# Для 17-248 ядер доступно от 1 до 2 ГиБ памяти на каждое ядро.
# Доля ядра только 100%.
- cores:
min: 17
max: 248
memory:
perCore:
min: 1Gi
max: 2Gi
coreFractions: [100]
Как настроить политики сайзинга в веб-интерфейсе в форме создания классов ВМ:
- Нажмите кнопку «Добавить» в блоке «Правила выделения ресурсов для виртуальных машин».
- В блоке «ЦП» в поле «Мин» укажите
1, а в поле «Макс» —4. - В блоке «ЦП» в поле «Разрешить задать доли ядра» выберите по порядку значения
5%,10%,20%,50%,100%. - В блоке «Память» установите переключатель в положение «Объём на 1 ядро».
- В блоке «Память» в поле «Мин» укажите
1, а в поле «Макс» —8. - В блоке «Память» в поле «Шаг дискретизации» укажите
1. - При необходимости добавьте другие диапазоны кнопкой «Добавить».
- Нажмите кнопку «Создать».