Перейти к основному содержимому

Жизненный цикл виртуальной машины

Виртуальная машина в 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.

Список ВМ на табе 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_version4Полный набор операций
hw_version3Методы v4 отклоняют запрос: «VM with hardware version == 3 can't be managed via v4 method»; снимки и откат недоступны
nvmetrueЗапуск на любом online-узле; без явно выбранного узла vStack Center берёт наименее загруженный
nvmefalseЗапуск только на узле пула; попытка запустить на другом узле возвращает «virtio-blk VM: start only on the pool node»
create_completed0 у 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 на уровне кластера.

Код ошибкиСообщениеПричина
-415vDC CPU cores quota depletedКончилась квота ядер ВЦОД
-414vDC RAM quota depletedКончилась квота RAM ВЦОД
-413vDC storage quota depletedКончилась квота хранилища ВЦОД
-440Cluster RAM has been depletedКластеру не хватает RAM с учётом overcommit
-458No available online nodes for VM placementНет online-узла под авторазмещение
-461VM 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.