Для создания виртуальной машины (ВМ) используется ресурс VirtualMachine. Его параметры позволяют сконфигурировать:
- класс виртуальной машины;
- ресурсы, требуемые для работы виртуальной машины (процессор, память, диски и образы);
- правила размещения виртуальной машины на узлах кластера;
- настройки загрузчика и оптимальные параметры для гостевой ОС;
- политику запуска виртуальной машины и политику применения изменений;
- сценарии начальной конфигурации (cloud-init);
- перечень блочных устройств.
С полным описанием параметров конфигурации виртуальных машин можно ознакомиться по в документации конфигурации.
Создание виртуальной машины
Ниже показано, как запустить виртуальную машину с Ubuntu 24.04 на диске, созданном ранее. Сценарий cloud-init устанавливает агента qemu-guest-agent и сервис nginx, а также создаёт пользователя cloud с паролем cloud.
- В командной строке
- В веб-интерфейсе
-
Создайте ресурс VirtualMachine:
d8 k apply -f - <<"EOF" apiVersion: virtualization.deckhouse.io/v1alpha2 kind: VirtualMachine metadata: name: linux-vm spec: # Название класса ВМ. virtualMachineClassName: generic # Тип ОС, Generic для Linux и Windows для Windows. По умолчанию Generic. # osType: Generic # Тип загрузчика: BIOS, EFI или EFIWithSecureBoot. По умолчанию BIOS. # bootloader: BIOS # Сценарий первичной инициализации ВМ. provisioning: type: UserData userData: | #cloud-config package_update: true packages: - nginx - qemu-guest-agent runcmd: - systemctl daemon-reload - systemctl enable --now nginx.service - systemctl enable --now qemu-guest-agent.service ssh_pwauth: True users: - name: cloud passwd: <PASSWORD_HASH> shell: /bin/bash sudo: ALL=(ALL) NOPASSWD:ALL lock_passwd: False final_message: "The system is finally up, after $UPTIME seconds" # Настройки ресурсов ВМ. cpu: # Количество ядер процессора. cores: 1 # Гарантированная доля процессорного времени одного ядра. coreFraction: 10% memory: # Объём оперативной памяти. size: 1Gi # Список дисков и образов, подключаемых к ВМ. blockDeviceRefs: # Порядок в этом блоке определяет приоритет загрузки. - kind: VirtualDisk name: linux-vm-root EOFЗдесь
<PASSWORD_HASH>— хеш пароля пользователяcloudв кавычках, полученный командойmkpasswd --method=SHA-512 --rounds=4096. -
Проверьте, что машина запустилась:
d8 k get vm linux-vmПример вывода:
NAME PHASE UPTIME NODE IPADDRESS AGE linux-vm Running 11m virtlab-pt-2 10.66.10.12 11mIP-адрес машина получает автоматически из диапазона, заданного администратором в настройках модуля.
- Перейдите на вкладку «Проекты» и выберите нужный проект.
- Перейдите в раздел «Виртуализация» → «Виртуальные машины».
- Нажмите кнопку «Создать».
- В открывшейся форме в поле «Имя» введите
linux-vm. - В разделе «Ресурсы» задайте
1в поле «Ядра ЦП»,10%в поле «Доля ядра» и1Giв поле «Объём памяти». - В разделе «Диски» нажмите кнопку «Добавить».
- В открывшемся окне «Диски / Образы» выберите «Существующий» и укажите в списке диск
linux-vm-root. - Прокрутите страницу вниз до переключателя «Cloud-init» и включите его.
-
В появившееся поле вставьте сценарий, подставив вместо
<PASSWORD_HASH>хеш пароля в кавычках:#cloud-config package_update: true packages: - nginx - qemu-guest-agent runcmd: - systemctl daemon-reload - systemctl enable --now nginx.service - systemctl enable --now qemu-guest-agent.service ssh_pwauth: True users: - name: cloud passwd: <PASSWORD_HASH> shell: /bin/bash sudo: ALL=(ALL) NOPASSWD:ALL lock_passwd: False final_message: "The system is finally up, after $UPTIME seconds" - Нажмите кнопку «Создать».
- Проверьте статус ВМ на её странице.
Жизненный цикл ВМ
От создания до удаления виртуальная машина проходит через несколько фаз. Текущую показывает поле .status.phase, а подробности о том, что с машиной происходит, содержит блок .status.conditions.

Условия в блоке .status.conditions отвечают на вопрос, почему машина находится в текущей фазе. Посмотреть те из них, где есть сообщение, можно так:
d8 k get vm <VM_NAME> -o json | jq '.status.conditions[] | select(.message != "")'
Здесь <VM_NAME> — имя виртуальной машины.
Диагностика по фазам
Пока ВМ находится в фазе Pending, она ждёт готовности зависимых ресурсов, то есть дисков, образов, класса ВМ, секрета со сценарием начальной конфигурации. Задержка на этой фазе означает, что какой-то из ресурсов не готов либо исчерпаны квоты неймспейса или проекта. Что именно блокирует запуск, показывают условия, оканчивающиеся на Ready:
d8 k get vm <VM_NAME> -o json | jq '.status.conditions[] | select(.type | test(".*Ready"))'
В фазе Starting зависимые ресурсы готовы, и Deckhouse Platform (DP) запускает ВМ на одном из узлов. Если запуск затягивается, подходящего узла нет либо на подходящих узлах не хватает процессора или памяти. Причину сообщает условие Running:
d8 k get vm <VM_NAME> -o json | jq '.status.conditions[] | select(.type=="Running")'
В фазе Migrating машина переезжает на другой узел живой миграцией. Миграция не начнётся или прервётся, если наборы процессорных инструкций на узлах несовместимы, версии ядра различаются, ни один узел не подходит под правила размещения или на подходящих узлах не хватает ресурсов. Ход миграции показывает условие Migrating вместе с блоком .status.migrationState:
d8 k get vm <VM_NAME> -o json | jq '.status | {condition: .conditions[] | select(.type=="Migrating"), migrationState}'
Фаза Terminating необратима, все связанные с ВМ ресурсы освобождаются, но сами ресурсы не удаляются.
Условия запущенной ВМ
У работающей машины стоит следить за несколькими условиями:
AgentReadyсо статусомTrueозначает, что в гостевой системе работаетqemu-guest-agent, и тогда блок.status.guestOSInfoсодержит сведения о гостевой ОС.FirmwareUpToDateсо статусомFalseозначает, что прошивку ВМ пора обновить.ConfigurationAppliedсо статусомFalseозначает, что заданная конфигурация к запущенной машине ещё не применена.AwaitingRestartToApplyConfigurationсо статусомTrueозначает, что часть изменений применится только после перезагрузки, и выполнить её нужно вручную.SizingPolicyMatchedсо статусомFalseозначает, что ресурсы машины не отвечают политике сайзинга её класса. Пока вы не приведёте параметры в соответствие политике, сохранить изменения конфигурации не получится.Migratableпоказывает, можно ли перенести машину живой миграцией. Условие вычисляется только для запущенной ВМ, у выключенной оно отсутствует. СтатусFalseс причинойVirtualMachineNoMigrationTargetозначает, что сама машина к миграции пригодна, но подходящего узла в кластере нет. СтатусTrueс причинойVirtualMachineWaitingForMigrationTargetозначает, что подходящие узлы есть, но сейчас ни один не может принять машину, и такое состояние проходит само.
Вытеснение с узла
Условие EvictionRequired появляется, когда узел с вашей ВМ переводят в режим обслуживания. Если узел только вывели из планирования командой d8 k cordon, но обслуживание не начали, условие не появляется.
Сообщение условия говорит, что произойдёт с машиной, а именно перенос живой миграцией без остановки гостевой ОС, перезапуск силами DP с разрешения администратора кластера либо ожидание, пока машину не перезапустят. Машину, которую можно перенести живой миграцией, ради освобождения узла не перезапускают. Пока вытеснение не началось, условие носит предупреждающий характер, потому что обслуживание могут отменить.
После перезапуска машина запускается на другом подходящем узле. Если такого узла нет, она остаётся в фазе Pending, а причину от планировщика показывает условие Running. Узел в режиме обслуживания новые машины не принимает, поэтому ВМ, закреплённая за ним правилами размещения или использующая проброшенное с него устройство, запустится только после возвращения узла в работу.
Просмотр состояния в веб-интерфейсе
Веб-интерфейс показывает фазу машины, её ресурсы и текущие проблемы на странице самой машины.
- Перейдите на вкладку «Проекты» и выберите нужный проект.
- Перейдите в раздел «Виртуализация» → «Виртуальные машины».
- Из списка выберите нужную ВМ и нажмите на её имя.
В шапке страницы показаны текущая фаза ВМ, её IP-адрес, класс, конфигурация ресурсов, количество подключённых дисков и образов, узел размещения, признак работы агента гостевой ОС и время с момента запуска. Сама страница разделена на вкладки «Конфигурация», «Мониторинг», «Операции», «События», «VNC», «TTY», «Сетевые политики», «Снимки», «Диагностика», «Мета» и «YAML».
На вкладке «Конфигурация» у запущенной ВМ рядом с полями «Ядра ЦП» и «Объём памяти» отображаются графики использования. В блоке «Диски» для каждого устройства показаны порядковый номер загрузки, имя, размер, статус, способ подключения, класс хранения и текущая нагрузка на диск. В блоке «Сети» показаны имя сети, её статус, IP- и MAC-адреса, а основная сеть кластера обозначена как «Main».