Жизненный цикл виртуальной машины
Виртуальная машина в vStack Center живёт в трёх местах одновременно. В базе кластера лежит её эталонная конфигурация: имя, число vCPU, объём RAM, профиль ОС, список дисков и сетевых портов. На пуле хранения лежат ZFS-датасеты дисков. На узле работает процесс гипервизора, собранный по этой конфигурации. vStack Center — control plane: он держит эталон, а команды исполняют агенты на узлах.
Из такого разделения следует главное свойство подсистемы: почти каждая операция
над ВМ меняет сначала запись в кластере, а потом — состояние на узле. Поэтому у
ВМ два статуса. admin_status — желаемое состояние, его выставляет vStack Center по
команде оператора. oper_status — фактическое, его приносят агенты; рядом
приходит oper_status_ts с временем последнего обновления. Пока команда идёт до
узла, статусы расходятся, и это нормально. Расхождение, которое не сходится
минутами, — уже сигнал к диагностике.
Чтобы две операции не переписывали одну ВМ одновременно, vStack Center ставит флаг
locked. Запуск, остановка, добавление диска, ballooning блокируют ВМ на время
работы и снимают блокировку в обработчике ответа агента. Пока флаг стоит,
конкурирующие вызовы отбиваются ошибкой «VM is locked»; занять машину может
только один запрос — проверка и пометка выполняются одним неделимым действием.
Залипшую блокировку с 3.1.0 в большинстве случаев снимать вручную не нужно. Сбой
связи с брокером сообщений снимает занятость автоматически — до того, как
оператор увидит ошибку. Переходное состояние машины живёт не дольше своего срока
(таблица ниже), по истечении которого машина переводится в парную неудачу, а
причина попадает в журнал службы и в историю состояний машины. Ручной
vm-unlock остаётся для случаев, которые не закрывает ни то, ни другое, и
доступен только роли Cluster master.
Второй сквозной признак — версия конфигурации hw_version. Машины третьей
версии остались от старых установок: методы семейства v4 их не обслуживают и
отбивают запрос отдельным кодом ошибки. Всё, что описано в этом разделе,
относится к hw_version = 4; для v3-машин доступны только чтение и удаление.
Третий признак определяет, где ВМ может работать. Поле nvme показывает режим
подключения дисков: true — NVMe, false — virtio-blk. При NVMe диски доступны
узлу по сети, поэтому ВМ запускается на любом online-узле кластера, и vStack Center
умеет выбрать наименее загруженный сам. При virtio-blk диск виден только узлу,
который держит пул, — запуск возможен исключительно там. У Windows-машин,
пришедших со старой схемы дисков, обычно nvme = false.
Долгие операции vStack Center не держит в открытом запросе. Команда уходит в очередь, управление возвращается сразу, а работу дальше делают контроллер хранилища и агент узла. Отсюда правило чтения интерфейса: принятая команда — ещё не выполненная команда. Готовность подтверждают статус ВМ и запись в истории событий на карточке машины.
Состояния ВМ
Состояние машины видно в столбце «State» списка ВМ и на её карточке. Список ВМ
открывается на табе Virtual Machines ВЦОД и несёт колонки ID, Name, IP,
OS, State и Health.

Значения admin_status, на которые опираются проверки операций питания:
admin_status | Состояние | Что можно делать |
|---|---|---|
1 | Остановлена | Запуск, откат к снимку, клонирование, миграция, добавление и удаление дисков и сетевых портов |
10 | Создана, ещё не запускалась | Запуск, миграция |
3 | Запущена | Остановка, перезапуск, приостановка, изменение лимитов, ballooning, консоль |
11 | Приостановлена | Восстановление из приостановки |
9 | Удаляется | Ничего: операция идёт |
Переходные состояния и их сроки
Переходное состояние — это признак идущей операции, а не конечная точка. С 3.1.0 у каждого свой предельный срок: если за него ответ агента не пришёл, машина переводится в парное состояние неудачи и разблокируется, так что операцию можно повторить, а удаление больше не отклоняется как «машина заблокирована». Сроки заданы по физике операции, а не одним общим числом.
| Переходное состояние | Срок | Во что переходит по истечении |
|---|---|---|
| Запускается | 15 минут | Запуск не удался |
| Останавливается | 30 минут | Остановка не удалась |
| Приостанавливается | 30 минут | Приостановка не удалась |
| Возобновляется | 30 минут | Возобновление не удалось |
| Создаётся | 1 час | Создание не удалось |
| Удаляется | 1 час | Удаление не удалось |
| Переносится | 6 часов | Перенос не удался |
| Восстанавливается | 6 часов | Восстановление не удалось |
Два уточнения. Успешно созданная, но ни разу не запущенная машина под это правило не попадает: она законно остаётся в состоянии создания до первого события узла или цикла инвентаризации. И выход из переходного состояния при зависшем агенте происходит именно по сроку, а не мгновенно; если ответ агента придёт позже, состояние машины будет исправлено на фактическое.
Повторная команда запуска для уже работающей ВМ вернёт «Unable to start VM having admin_status==N already». Приостановленную ВМ можно остановить обычной командой остановки; для запуска её сначала нужно восстановить из приостановки.
Версия конфигурации и режим дисков
| Признак | Значение | Следствие |
|---|---|---|
hw_version | 4 | Полный набор операций |
hw_version | 3 | Методы v4 отклоняют запрос: «VM with hardware version == 3 can't be managed via v4 method»; снимки и откат недоступны |
nvme | true | Запуск на любом online-узле; без явно выбранного узла vStack Center берёт наименее загруженный |
nvme | false | Запуск только на узле пула; попытка запустить на другом узле возвращает «virtio-blk VM: start only on the pool node» |
create_completed | 0 у Windows с nvme = true | До завершения первичной настройки удалённый запуск запрещён: «Windows: finish setup on the pool node before remote start» |
Режим дисков у существующей ВМ не переключается на ходу: у Windows смена схемы после установки ломает загрузку гостя. Поэтому машины, перенесённые со старой схемы, остаются в virtio-blk и привязаны к узлу пула.
Немедленные и отложенные операции
Часть операций vStack Center выполняет сам и сразу: показывает список ВМ и карточку машины, отдаёт адрес консоли, читает справочники. Остальные требуют работы агента узла или контроллера хранилища — запуск, остановка, создание и расширение диска, снимки, миграция. Такая команда сначала регистрируется, потом исполняется.
В работе это выглядит так. Команда принята, ВМ помечена как заблокированная,
статусы разошлись. Через несколько секунд — а для миграции через минуты —
oper_status догоняет admin_status, блокировка снимается, а в истории событий
ВМ появляется запись с действием, статусом и длительностью. Запись об ошибке
означает, что операция не выполнена; повторять её можно после снятия блокировки.
У части операций поведение зависит от состояния ВМ. Лимит диска или сетевого порта у остановленной машины меняет только запись в кластере и применяется сразу; у запущенной — уходит на узел. Отдельный случай — частичный успех: лимит записан в конфигурацию, но агент его не применил («Ratelimit has been set (DB), but agent didn't apply it»). Значение вступит в силу при следующем запуске ВМ.
Ограничения ёмкости
Запуск ВМ проходит два независимых контроля. Сначала vStack Center сверяет квоты ВЦОД (виртуального центра обработки данных) — по vCPU, RAM и хранилищу. Затем проверяет overcommit по RAM на уровне кластера.
| Код ошибки | Сообщение | Причина |
|---|---|---|
-415 | vDC CPU cores quota depleted | Кончилась квота ядер ВЦОД |
-414 | vDC RAM quota depleted | Кончилась квота RAM ВЦОД |
-413 | vDC storage quota depleted | Кончилась квота хранилища ВЦОД |
-440 | Cluster RAM has been depleted | Кластеру не хватает RAM с учётом overcommit |
-458 | No available online nodes for VM placement | Нет online-узла под авторазмещение |
-461 | VM is running on another cluster node | Узел доложил, что машина работает не на том узле, куда идёт запуск (с 3.1.1) |
Разница между запуском и перезапуском тонкая, но важная для планирования
ёмкости. При vms-start ресурсы ВМ добавляются к текущему потреблению — они ещё
не заняты. При vms-restart ВМ уже учтена, поэтому её ресурсы второй раз не
прибавляются, а проверка overcommit не вычитает её RAM из свободной.
Карта операций
| Задача | Методы |
|---|---|
| Создать, удалить ВМ, перенести между ВЦОД | vms-create, vms-remove, vm-change-vdc |
| Питание, приостановка, консоль, снятие блокировки | vms-start, vms-stop, vms-restart, vms-suspend, vms-resume, vms-suspend-pool, vms-resume-pool, vm-console, vm-unlock |
| Диски, память, процессор | vms-add-disk, vms-disk-resize, vm-remove-disk, vm-disk-set-label, vm-ratelimit-disk, vm-set, vms-balloon, vms-cpu-priority, vms-vcpu-class |
| Сетевые интерфейсы | vms-add-nic, vm-remove-nic, vm-ratelimit-nic |
| Снимки и откат | vms-snapshot, vm-snapshot-list, snapshot-list, vms-snapshot-remove, vms-rollback |
| Миграция, клонирование, восстановление из области импорта | vm-migrate, vm-migrate-status, vm-migration, vms-clone, vm-import-area-list, vm-import-area-process |
| Инвентарь, метрики, контроль конфигурации | vm-list, vm-get, vm-history, vm-perfdata, vm-check-configuration, vm-inventory |
См. также
- Как создать, удалить и перенести виртуальную машину
- Как управлять питанием ВМ и подключаться к консоли
- Как управлять дисками и вычислительными ресурсами ВМ
- Как подключить ВМ к сети
- Как делать снимки ВМ и откатываться к ним
- Как перенести и клонировать ВМ
- Инвентарь, метрики и контроль конфигурации ВМ — справочник полей ответов и справочные методы
Методы API
Операции этой страницы в API перечислены в таблице «Карта операций» выше — см. Справочник API.