Класс виртуальной машины (ВМ) задаёт, какой процессор и какой набор инструкций увидит гостевая система.
Виртуальный процессор
Блок .spec.cpu определяет, какой процессор увидит гостевая ОС. От него зависит и то, между какими узлами ВМ сможет мигрировать.
Блок .spec.cpu после создания ресурса изменить нельзя. Чтобы задать другой процессор, создайте новый класс.
Ниже приведены примеры для каждого типа процессора.
-
Набор процессорных инструкций, обязательных для ВМ. Задаётся типом
Features:spec: cpu: features: - vmx type: FeaturesКак настроить vCPU в веб-интерфейсе в форме создания классов ВМ:
- В блоке «Настройки ЦП» в поле «Тип» выберите
Features. - В поле «Обязательный набор поддерживаемых инструкций» выберите нужные инструкции.
- Нажмите кнопку «Создать».
- В блоке «Настройки ЦП» в поле «Тип» выберите
-
Универсальный процессор для заданного набора узлов. Задаётся типом
Discovery:spec: cpu: discovery: nodeSelector: matchExpressions: - key: node-role.kubernetes.io/control-plane operator: DoesNotExist type: DiscoveryКак выполнить операцию в веб-интерфейсе в форме создания классов ВМ:
- В блоке «Настройки ЦП» в поле «Тип» выберите
Discovery. - Нажмите кнопку «Добавить» в блоке «Условия для создания универсального процессора» → «Лейблы и выражения».
- Задайте «Ключ», «Оператор» и «Значение», они соответствуют параметру
.spec.cpu.discovery.nodeSelector. - Нажмите клавишу «Enter», чтобы подтвердить параметры ключа.
- Нажмите кнопку «Создать».
- В блоке «Настройки ЦП» в поле «Тип» выберите
-
Процессор, близкий к процессору узла. Задаётся типом
Host. Гостевая ОС получает почти полный набор инструкций узла, поэтому производительность выше, чем у фиксированной модели. ВМ такого класса мигрирует только между узлами со схожими процессорами. Например, между узлами с процессорами Intel и AMD миграция невозможна, как и между процессорами разных поколений, если их наборы инструкций различаются.spec: cpu: type: HostКак выполнить операцию в веб-интерфейсе в форме создания классов ВМ:
- В блоке «Настройки ЦП» в поле «Тип» выберите
Host. - Нажмите кнопку «Создать».
- В блоке «Настройки ЦП» в поле «Тип» выберите
-
Процессор узла без изменений. Задаётся типом
HostPassthrough. ВМ такого класса мигрирует только на узел, процессор которого в точности совпадает с процессором исходного узла.spec: cpu: type: HostPassthroughКак выполнить операцию в веб-интерфейсе в форме создания классов ВМ:
- В блоке «Настройки ЦП» в поле «Тип» выберите
HostPassthrough. - Нажмите кнопку «Создать».
- В блоке «Настройки ЦП» в поле «Тип» выберите
-
Конкретная модель процессора с заранее известным набором инструкций. Задаётся типом
Model. Сначала посмотрите, какие модели поддерживает нужный узел:d8 k get nodes <NODE_NAME> -o json | jq '.metadata.labels | to_entries[] | select(.key | test("cpu-model.node.virtualization.deckhouse.io")) | .key | split("/")[1]' -rЗдесь
<NODE_NAME>— имя узла кластера.Пример вывода:
Broadwell-noTSX Broadwell-noTSX-IBRS Haswell-noTSX Haswell-noTSX-IBRS IvyBridge IvyBridge-IBRS Nehalem Nehalem-IBRS Penryn SandyBridge SandyBridge-IBRS Skylake-Client-noTSX-IBRS Westmere Westmere-IBRSЗатем укажите выбранную модель в спецификации класса:
spec: cpu: model: IvyBridge type: ModelКак выполнить операцию в веб-интерфейсе в форме создания классов ВМ:
- В блоке «Настройки ЦП» в поле «Тип» выберите
Model. - В поле «Модель» выберите модель процессора.
- Нажмите кнопку «Создать».
- В блоке «Настройки ЦП» в поле «Тип» выберите
Пример конфигурации vCPU Discovery
Ниже показано, как подобрать типы процессора в кластере с разнородными узлами.

Ниже разобран кластер из четырёх узлов. Два узла с лейблом group=blue оснащены процессором «CPU X» с тремя наборами инструкций, два других с лейблом group=green — более новым процессором «CPU Y» с четырьмя наборами.
Набор инструкций процессора — это все команды, которые он умеет выполнять, от сложения до работы с памятью. От набора зависит, какие программы запустятся и насколько быстро, а у разных поколений процессоров наборы различаются.
Такому кластеру подойдут три класса:
universal— ВМ запускаются на любом узле и мигрируют между всеми четырьмя. Deckhouse Platform (DP) возьмёт набор инструкций, общий для обоих процессоров, поэтому совместимость максимальная, а часть возможностей «CPU Y» останется неиспользованной;cpuX— ВМ запускаются только на узлах с «CPU X» и мигрируют между ними, используя все инструкции этого процессора;cpuY— то же самое для узлов с «CPU Y».
Классы для такого кластера выглядят так:
---
apiVersion: virtualization.deckhouse.io/v1alpha2
kind: VirtualMachineClass
metadata:
name: universal
spec:
cpu:
# Пустой discovery означает, что учитываются все узлы кластера.
discovery: {}
type: Discovery
---
apiVersion: virtualization.deckhouse.io/v1alpha2
kind: VirtualMachineClass
metadata:
name: cpuX
spec:
cpu:
discovery:
nodeSelector:
matchExpressions:
- key: group
operator: In
values: ["blue"]
type: Discovery
---
apiVersion: virtualization.deckhouse.io/v1alpha2
kind: VirtualMachineClass
metadata:
name: cpuY
spec:
cpu:
discovery:
nodeSelector:
matchExpressions:
- key: group
operator: In
values: ["green"]
type: Discovery