К запущенной машине можно подключиться из командной строки и из веб-интерфейса, а тем, запущена ли она, управляет политика запуска.

Подключение к виртуальной машине

К виртуальной машине (ВМ) можно подключиться четырьмя способами. Первый — по протоколу удалённого управления вроде SSH, который вы настраиваете в гостевой ОС сами. Второй — через серийную консоль. Третий — по VNC. Четвёртый — по SPICE, если он включён у машины.

  • В командной строке
  • В веб-интерфейсе

Серийная консоль:

d8 v console linux-vm

Пример вывода:

Successfully connected to linux-vm console. The escape sequence is ^]
linux-vm login: cloud
Password: cloud

Чтобы выйти из консоли, нажмите Ctrl+].

Подключение по VNC:

d8 v vnc linux-vm

Подключение по SPICE:

d8 v spice linux-vm

Подключение по SSH:

d8 v ssh cloud@linux-vm
  1. Перейдите на вкладку «Проекты» и выберите нужный проект.
  2. Перейдите в раздел «Виртуализация» → «Виртуальные машины».
  3. Из списка выберите нужную ВМ и нажмите на её имя.
  4. Перейдите на вкладку «TTY» для работы с серийной консолью или на вкладку «VNC» для подключения по VNC.

Серийная консоль и VNC эксклюзивны, в них работает только один пользователь, и новое подключение отключает того, кто уже работает с машиной.

Перед подключением d8 v console и d8 v vnc сообщают, кто занял поток и с какого времени, и предлагают выбор:

The serial console of linux-vm is in use:
  user       serviceaccount default/alice
  connected  12 minutes ago (14:32), from the d8 v command line

Connect and disconnect them? [y] yes  [N] no  [w] wait until free:

Ответ w означает дождаться, пока другой пользователь отключится, и подключиться автоматически. Нажатие Enter отменяет подключение, потому что по умолчанию выбран безопасный вариант. Флаг --force подключает без вопроса, и он же нужен при неинтерактивном запуске в скрипте.

Серийная консоль не меняет размер терминала автоматически. Если вывод команд переносится неправильно, задайте размер вручную командой stty rows <ROWS> cols <COLUMNS>, например stty rows 50 cols 200. Когда в системе установлен пакет xterm, ту же задачу решает команда resize.

SPICE

SPICE — второй протокол удалённого дисплея, который в отличие от VNC передаёт из гостевой системы звук, пробрасывает в неё USB-устройства с вашего компьютера и разделяет с ней буфер обмена. Он работает рядом с VNC, поэтому уже открытые VNC-сессии и веб-интерфейс продолжают работать.

По умолчанию SPICE выключен. Чтобы включить его, задайте параметр .spec.spice.enabled и перезапустите машину:

spec:
  spice:
    enabled: true

Вместе со SPICE машина получает видеоадаптер virtio-gpu. Если драйвера для него в гостевой системе нет, как в Windows 7 и Windows XP, задайте другую модель адаптера аннотацией virtualization.deckhouse.io/video со значением vga, bochs или ramfb.

Общий буфер обмена, подстройку разрешения под окно клиента и локальный курсор добавляет гостевой агент SPICE. Установите его в гостевой системе, в Linux это пакет spice-vdagent, в Windows — spice-guest-tools.

Для подключения нужен клиент remote-viewer из пакета virt-viewer, и команда d8 v spice открывает его сама. Если такого клиента нет, запустите только прокси и подключитесь своим клиентом на порт, который выведет команда:

d8 v spice linux-vm --proxy-only

SPICE-дисплей эксклюзивен так же, как серийная консоль и VNC, и d8 v spice предупреждает, прежде чем отключить того, кто уже подключён.

SPICE резервирует память независимо от того, подключён клиент или нет. Эта память входит в накладные расходы машины, поэтому на узле машина занимает больше памяти, чем указано в её спецификации.

Политика запуска и управление состоянием ВМ

Политика запуска определяет, как Deckhouse Platform (DP) поддерживает состояние машины. Её задаёт параметр .spec.runPolicy:

  • AlwaysOnUnlessStoppedManually — вариант по умолчанию. Машина всегда работает, а остановить её можно только вручную;
  • AlwaysOn — машина всегда работает, и даже после выключения из гостевой ОС DP запускает её снова;
  • Manual — состоянием машины вы управляете сами;
  • AlwaysOff — машина всегда выключена, и запустить её нельзя.

Управлять состоянием машины можно двумя способами, создавая ресурс VirtualMachineOperation или пользуясь утилитой d8. Ресурс описывает действие декларативно, а утилита создаёт такой же ресурс за вас.

Команда d8 Тип операции Действие
d8 v stop Stop Остановить ВМ
d8 v start Start Запустить ВМ
d8 v restart Restart Перезапустить ВМ
d8 v evict Evict Вытеснить ВМ на другой узел
d8 v migrate Migrate Мигрировать ВМ на другой узел

Ниже показано, как выполнить операцию над виртуальной машиной:

  • В командной строке
  • В веб-интерфейсе

Перезапустить машину проще всего утилитой d8:

d8 v restart linux-vm

Та же операция ресурсом:

d8 k create -f - <<EOF
apiVersion: virtualization.deckhouse.io/v1alpha2
kind: VirtualMachineOperation
metadata:
  generateName: restart-linux-vm-
spec:
  virtualMachineName: linux-vm
  # Тип выполняемой операции.
  type: Restart
EOF

Результат покажет список операций:

d8 k get virtualmachineoperation

# Короткий вариант команды.
d8 k get vmop

Политика запуска задаётся на странице машины:

  1. Перейдите на вкладку «Проекты» и выберите нужный проект.
  2. Перейдите в раздел «Виртуализация» → «Виртуальные машины».
  3. Из списка выберите нужную ВМ и нажмите на её имя.
  4. На вкладке «Конфигурация» прокрутите страницу вниз до раздела «Жизненный цикл».
  5. Выберите нужную политику из списка «Политика запуска».

Операции доступны из списка машин:

  1. Перейдите в раздел «Виртуализация» → «Виртуальные машины».
  2. Из списка выберите нужную виртуальную машину и нажмите кнопку с многоточием.
  3. В открывшемся меню выберите операцию.

Для одной машины одновременно выполняется только одна операция. Новая операция либо вытесняет активную, либо завершается неудачей, и какой из вариантов сработает, зависит от пары типов:

Активная операция Чем её можно вытеснить
Start Stop
Stop или Restart без force Stop или Restart с force: true
Migrate, Evict Stop, Restart
Stop или Restart с force: true ничем

Вытесненная операция переходит в фазу Superseded. Операция, которая вытеснить активную не может, переходит в фазу Failed, поэтому её нужно создать заново после того, как активная завершится. Восстановление и клонирование другие операции не вытесняют.

Дополнительные ресурсы