У меня для боевых проектов и тестовых проектов используются физические сервера где в роли гипервизора виртуальных машин установлена связка Debian 10 + Proxmox
, и обязательно для развернутых, разворачиваемых виртуальный машин я устанавливаю компоненты Guest Agent
которые обеспечивают выполнение команд на VM
и обмен информацией между VM
и хостом Proxmox.
Подключаемся по SSH
к примеру, с хоста Debian 10 + Proxmox 6.4-13
(у меня на тестовом сервере такая версия) к развернутой виртуальной машины с осью Ubuntu 22.04 Server
для установки QEMU Guest Agent:
ekzorchik@srv-us2204a:~$ sudo rm -Rf /var/lib/apt/lists ekzorchik@srv-us2204a:~$ sudo apt-get update ekzorchik@srv-us2204a:~$ dpkg -l | grep qemu-guest-agent ekzorchik@srv-us2204a:~$ apt-cache show qemu-guest-agent | grep Version Version: 1:6.2+dfsg-2ubuntu6.14 Version: 1:6.2+dfsg-2ubuntu6.11 Version: 1:6.2+dfsg-2ubuntu6 ekzorchik@srv-us2204a:~$ sudo apt-get install -y qemu-guest-agent ekzorchik@srv-us2204a:~$ dpkg -l | grep qemu-guest-agent ii qemu-guest-agent 1:6.2+dfsg-2ubuntu6.14 amd64 Guest-side qemu-system agent ekzorchik@srv-us2204a:~$
Чтобы агент заработал можно либо отправить систему в перезагрузку, либо если нужно начать с ней работать прямо сейчас, то вручную запустить сервис qemu-guest-agent:
ekzorchik@srv-us2204a:~$ systemctl status qemu-guest-agent ○ qemu-guest-agent.service - QEMU Guest Agent Loaded: loaded (/lib/systemd/system/qemu-guest-agent.service; static) Active: inactive (dead) ekzorchik@srv-us2204a:~$ sudo systemctl enable qemu-guest-agent Synchronizing state of qemu-guest-agent.service with SysV service script with /lib/systemd/systemd-sysv-install. Executing: /lib/systemd/systemd-sysv-install enable qemu-guest-agent The unit files have no installation config (WantedBy=, RequiredBy=, Also=, Alias= settings in the [Install] section, and DefaultInstance= for template units). This means they are not meant to be enabled using systemctl. Possible reasons for having this kind of units are: • A unit may be statically enabled by being symlinked from another unit's .wants/ or .requires/ directory. • A unit's purpose may be to act as a helper for some other unit which has a requirement dependency on it. • A unit may be started when needed via activation (socket, path, timer, D-Bus, udev, scripted systemctl call, ...). • In case of template units, the unit is meant to be enabled with some instance name specified. ekzorchik@srv-us2204a:~$ sudo systemctl start qemu-guest-agent ekzorchik@srv-us2204a:~$ systemctl status qemu-guest-agent ● qemu-guest-agent.service - QEMU Guest Agent Loaded: loaded (/lib/systemd/system/qemu-guest-agent.service; static) Active: active (running) since Tue 2023-10-03 08:44:56 MSK; 2s ago Main PID: 48242 (qemu-ga) Tasks: 2 (limit: 4571) Memory: 380.0K CPU: 4ms CGroup: /system.slice/qemu-guest-agent.service └─48242 /usr/sbin/qemu-ga Oct 03 08:44:56 srv-us2204a systemd[1]: Started QEMU Guest Agent. ekzorchik@srv-us2204a:~$
После чего если обратиться к URL
адресу хоста: https://IP&DNS:8006 - user&pass - (Server View) Datacenter - srv-proxmox
– зайти в виртуальную машину (к примеру у меня VM ID: 406 (srv-us2204b) - Summary
, то в поле IPs
я благодаря агенту увижу IP
адрес виртуальной машины:
Т.е. когда в системе установлен агент
https://IP&DNS:8006 - user&pass - (Server View) Datacenter - srv-proxmox - VM ID 406 - Options -
QEMU Guest Agent: Enabled
и запущен можно с хостовой системы запрашивать информацию по работающей виртуальной машине:
ekzorchik@srv-proxmox:~$ sudo qm guest cmd 406 ls 400 Parameter verification failed. command: value 'ls' does not have a value in the enumeration 'fsfreeze-freeze, fsfreeze-status, fsfreeze-thaw, fstrim, get-fsinfo, get-host-name, get-memory-block-info, get-memory-blocks, get-osinfo, get-time, get-timezone, get-users, get-vcpus, info, network-get-interfaces, ping, shutdown, suspend-disk, suspend-hybrid, suspend-ram' qm guest cmd <vmid> <command> ekzorchik@srv-proxmox:~$ sudo qm guest cmd 406 get-osinfo { "id" : "ubuntu", "kernel-release" : "5.15.0-70-generic", "kernel-version" : "#77-Ubuntu SMP Tue Mar 21 14:02:37 UTC 2023", "machine" : "x86_64", "name" : "Ubuntu", "pretty-name" : "Ubuntu 22.04.3 LTS", "version" : "22.04.3 LTS (Jammy Jellyfish)", "version-id" : "22.04" } ekzorchik@srv-proxmox:~$
Узнать информацию через QEMU Guest Agent
с хоста можно и так, к примеру, IP-Аddress:
Синтаксис: qm guest cmd vmid network-get-interfaces
ekzorchik@srv-proxmox:~$ sudo qm guest cmd 406 network-get-interfaces | grep ip-address "ip-addresses" : [ "ip-address" : "127.0.0.1", "ip-address-type" : "ipv4", "ip-address" : "::1", "ip-address-type" : "ipv6", "ip-addresses" : [ "ip-address" : "172.33.33.132", "ip-address-type" : "ipv4", "ip-address" : "fe80::c066:5aff:fe09:4924", "ip-address-type" : "ipv6", ekzorchik@srv-proxmox:~$
а вот когда QEMU Guest Agent
не установлен или не запущен получение информации с виртуальной машины становится не возможным:
ekzorchik@srv-proxmox:~$ sudo qm guest cmd 406 get-osinfo QEMU guest agent is not running ekzorchik@srv-proxmox:~$
Итого, если вы используете виртуализацию, то обязательно нужно в развернутые/разворачиваемые системы устанавливать QEMU Guest Agent
, даже с хоста для VM
отправить через WEB
интерфейс команду на выключение станет возможным, и не нужно будет заходить внутрь системе и делать shutdown.
Я к примеру, подключаюсь через OpenVPN
к домашней инфраструктуре и с телефона через приложение Proxmox (1.0.0-beta13 (343) A Proxmox VE client)
включаю или выключаю системы и все благодаря установленным агента на местах.
Итого: Я составил себе пошаговую заметку как устанавливать QEMU Guest Agent
, как его вручную запустить не перезагружаю систему.
На заметку: Вообще лучше сделать Playbook
и уже после разворачивания виртуальной машины производить установку приложение и последующий их запуск или же в момент, когда система разворачивается по сети применяется настроечный скрипт.
На этом пока все, с уважением автор блога Олло Александр aka ekzorchik.