Чтобы взаимодействовать с VM
внутри моей виртуализации на базе Ubuntu 18.04 Server + QEMU/KVM
нужно обязательно устанавливать агента. По сути это как Vmware Tools & Virtualbox Tools
, но лучше и практичнее в использовании если ты гик или ответственный системный администратор желающий докапываться. Как я понял из документации qemu-agent
это демон/служба которая служит для управления виртуальной машиной. Среди возможностей которыми она может помочь в мне в дальнейшем это: Исполнение команд, Взаимодействие с файловой системой, Создание снапшотов (снимков системы), Миграции, Включение и выключение.
- srv-server → это VM
- srv-bionic → это Хост
Хост установлен по заметке
Шаг №1: На виртуальной машине внутри хоста QEMU+KVM
устанавливаем агент:
ekzorchik@srv-server:~$ apt-cache search qemu-guest-agent qemu-guest-agent - Guest-side qemu-system agent ekzorchik@srv-server:~$ sudo apt-get install qemu-guest-agent -y ekzorchik@srv-server:~$ sudo poweroff
Шаг №2: На хосте, выключаем VM
и вносим изменения в шаблон виртуальной машины:
(Если VM не выключили в Шаге №1 то выключаем так:
ekzorchik@srv-bionic:~$ sudo virsh list Id Name State ---------------------------------------------------- 3 Userver1804_2 running 4 UServer1804 running — выключаем вот эту ekzorchik@srv-bionic:~$ ekzorchik@srv-bionic:~$ sudo virsh shutdown 4 Domain 4 is being shutdown
Добавляем в свойства VM
устройство:
ekzorchik@srv-bionic:~$ sudo virsh edit UServer1804 <channel type='unix'> <target type='virtio' name='org.qemu.guest_agent.0'/> </channel>
Сохраняем внесенные изменения и видим надпись:
Domain UServer1804 XML configuration edited.
Также добавление устройства для агента можно сделать и через «Менеджер виртуальных машин» - VM — Добавить оборудование
— выбираю «Канал
», затем
Название: org.qemu.guest_agent.0
Тип устройства: Сокет Unix (unix)
Автосокет: отмечаю галочкой
и нажимаю «Готово
». Изменения активируются после включения системы если в момент добавления оборудования VM
была включена.
Если посмотреть свойства VM
через «Менеджер виртуальный машин
»
Отобразить все VM
, как выключенные так и включенные:
ekzorchik@srv-bionic:~$ sudo virsh list --all Id Name State ---------------------------------------------------- 3 Userver1804_2 running - UServer1804 shut off - UServer1804_3 shut off - W7X64 shut off ekzorchik@srv-bionic:~$
Запускаем гостевую VM:
ekzorchik@srv-bionic:~$ sudo virsh start UServer1804 Domain UServer1804 started
Шаг №3: Подключаемся либо через оснастку «Менеджер виртуальных машин
» к гостевой виртуальной машине, либо подключается к ней по SSH
(предварительно должен быть установлен пакет openssh-server
)
ekzorchik@navy:~$ ssh -l ekzorchik 172.33.33.2
и проверяем наличие нового устройства:
ekzorchik@srv-server:~$ ls -al /dev/virtio-ports/org.qemu.guest_agent.0 lrwxrwxrwx 1 root root 11 May 15 20:00 /dev/virtio-ports/org.qemu.guest_agent.0 -> ../vport1p2
Шаг №4: Проверяем с хоста что видим агент гостевой VM:
ekzorchik@srv-bionic:~$ sudo virsh qemu-agent-command UServer1804 '{"execute":"guest-ping"}' {"return":{}}
Шаг №5: Отобразить список всех команд доступных к передаче агенту гостевой VM:
ekzorchik@srv-bionic:~$ sudo virsh qemu-agent-command UServer1804 '{"execute":"guest-info"}' {"return":{"version":"2.11.1","supported_commands":[{"enabled":true,"name":"guest-sync-delimited","success-response":true},{"enabled":true,"name":"guest-sync","success-response":true},{"enabled":true,"name":"guest-suspend-ram","success-response":false},
Шаг №6: Отобразить IP
—адрес гостевой VM
через команду найденную в предыдущем шаге:
ekzorchik@srv-bionic:~$ sudo virsh qemu-agent-command UServer1804 '{"execute":"guest-network-get-interfaces"}' {"return":[{"name":"lo","ip-addresses":[{"ip-address-type":"ipv4","ip-address":"127.0.0.1","prefix":8},{"ip-address-type":"ipv6","ip-address":"::1","prefix":128}],"statistics":{"tx-packets":0,"tx-errs":0,"rx-bytes":0,"rx-dropped":0,"rx-packets":0,"rx-errs":0,"tx-bytes":0,"tx-dropped":0},"hardware-address":"00:00:00:00:00:00"},{"name":"ens3","ip-addresses":[{"ip-address-type":"ipv4","ip-address":"172.33.33.2","prefix":24},{"ip-address-type":"ipv6","ip-address":"fe80::5054:ff:fe55:4a29","prefix":64}],"statistics":{"tx-packets":23,"tx-errs":0,"rx-bytes":8823,"rx-dropped":36,"rx-packets":78,"rx-errs":0,"tx-bytes":2238,"tx-dropped":0},"hardware-address":"52:54:00:55:4a:29"}]}
в этом выводе у интерфейса ens3
значится IP
-адрес 172.33.33.2
Шаг №7: Все агент установлен и может взаимодействовать с хостом, к примеру это выполнение команд внутри VM
если подключиться к хосту по SSH:
ekzorchik@srv-bionic:~$ sudo virsh qemu-agent-command --help NAME qemu-agent-command - QEMU Guest Agent Command ekzorchik@srv-bionic:~$ sudo virsh qemu-agent-command UServer1804 '{"execute":"guest-exec","arguments":{"path":"/bin/mkdir","arg":["/home/ekzorchik/ekzorchik"]}}' {"return":{"pid":621}}
Проверяем, а успешно ли отработала команда на гостевой VM:
ekzorchik@srv-bionic:~$ sudo virsh qemu-agent-command UServer1804 '{"execute":"guest-exec-status","arguments":{"pid":621}}'
{"return":{"exitcode":0,"exited":true}}
→ ответ результирует, что команда посланная на гостевую VM была выполнена успешно.
exited:true - говорит о том что программа закончила свое выполнение
exitcode:0 - указывает код возврата программы (0 как правило говорит о успешном выполнении)
Проверям на гостевой VM
наличие каталога с именем ekzorchik
:
ekzorchik@srv-server:~$ ls -l total 4 drwx------ 2 root root 4096 May 15 20:33 ekzorchik ekzorchik@srv-server:~$
Итого успешно.
Теперь кстати стало возможным корректно выключать и перезагружать гостевую VM
через оснастку «Менеджер виртуальных машин» - VM — Виртуальная машина - Выключить — Перезагрузить/Выключить
, а не как раньше я использовал
Перезагрузить/Выключить (принудительно).
Если я попытаюсь запустить соединение взаимодействие с другой гостевой VM
(Userver1804_2 = 172.33.33.17
) на которой не установлен агент, то меня ждет уведомление:
ekzorchik@srv-bionic:~$ sudo virsh qemu-agent-command Userver1804_2 '{"execute":"guest-exec","arguments":{"path":"/bin/mkdir","arg":["/home/ekzorchik/ekzorchik"]}}' error: argument unsupported: QEMU guest agent is not configured
В целом все правильно. Но агент можно поставить и после того как система развернута, а потом когда будет оговоренное время на профилактические работы добавить в контейнер VM
устройство:
ekzorchik@srv-bionic:~$ ssh -t ekzorchik@172.33.33.17 "sudo mkdir /root/1" ekzorchik@172.33.33.17's password: указываю пароль на подключение к хосту [sudo] password for ekzorchik: указываю пароль на повышение прав до уровня суперпользователя Connection to 172.33.33.17 closed.
Команда успешно отрабатывает, а теперь установка агента:
ekzorchik@srv-bionic:~$ ssh -t ekzorchik@172.33.33.18 "sudo apt-get install -y qemu-guest-agent"
Проверяю, а действительно ли агент установлен:
ekzorchik@srv-bionic:~$ ssh -l ekzorchik 172.33.33.18 "dpkg -l | grep qemu-guest-agent" ekzorchik@172.33.33.18's password: ii qemu-guest-agent 1:2.11+dfsg-1ubuntu7.12 amd64 Guest-side qemu-system agent ekzorchik@navy:~$
Да установился.
Что я сейчас нового узнал, а то что обязательно на гостевые VM
внутри хоста QEMU+KVM
на Ubuntu 18.04 Server
обязательно нужно устанавливать агент если есть желание из хоста взаимодействовать с гостевыми VM
. Т.е. я могу получать характеристики контейнера виртуальной машины, добавлять устройства из консоли, редактировать контейнер виртуальной машины + взаимодействовать на уровне файловой системы: создавать, удалять, переименовывать, инсталлировать, деинсталлировать. Мне пока этого достаточно, на этом я прощаюсь, с уважением автор блога Олло Александр aka ekzorchik.