Как корректно завершать работу виртуальных машин kvm при завершении работы хоста?

$ docker run --rm --name some-postgres -d postgres
cb2ddbb0f4f715077ebc1bfc2dc7151e5a6d07cd374c28be1db6d6ad77b9b16a

$ docker run -it --rm --link some-postgres:postgres postgres psql -h postgres -U postgres
psql (10.4 (Debian 10.4-2.pgdg90+1))
Type "help" for help.

postgres=#

Вы забыли-U postgres

1
15.03.2020, 05:34
2 ответа

Странный способ управления ВМ. Хороший способ --использовать systemd для автоматического запуска и остановки ВМ. Например:

/etc/systemd/system/qemu@.service

[Unit]
Description=QEMU virtual machine

[Service]
Environment="type=system-x86_64" "haltcmd=kill -INT $MAINPID"
EnvironmentFile=/etc/conf.d/qemu.d/%i
ExecStart=/usr/bin/qemu-${type} -name %i -nographic $args
ExecStop=/bin/sh -c ${haltcmd}
TimeoutStopSec=30
KillMode=none

[Install]
WantedBy=multi-user.target

... И, конечно же, конфигурация (s )для запуска ВМ:

/etc/conf.d/qemu.d/one

type="system-x86_64"

args="-enable-kvm -m 512 -hda /dev/vg0/vm1 -net nic,macaddr=DE:AD:BE:EF:E0:00 \
 -net tap,ifname=tap0 -serial telnet:localhost:7000,server,nowait,nodelay \
 -monitor telnet:localhost:7100,server,nowait,nodelay -vnc :0"

haltcmd="echo 'system_powerdown' | nc localhost 7100" # or netcat/ncat

# You can use other ways to shut down your VM correctly
#haltcmd="ssh powermanager@vm1 sudo poweroff"

...и еще одна конфигурация ВМ:

/etc/conf.d/qemu.d/two

args="-enable-kvm -m 512 -hda /srv/kvm/vm2.img -net nic,macaddr=DE:AD:BE:EF:E0:01 \
 -net tap,ifname=tap1 -serial telnet:localhost:7001,server,nowait,nodelay \
 -monitor telnet:localhost:7101,server,nowait,nodelay -vnc :1"

haltcmd="echo 'system_powerdown' | nc localhost 7101"

И так далее. Спасибо участникам ArchWiki за эту статью .

3
28.04.2021, 23:20

Черновик исходного сообщения и ответ @Oxyd полезны, когда вам нужно управлять каждой виртуальной машиной по отдельности.

Однако, если требуется выключить/запустить все виртуальные машины , можно использовать гостевые системы libvirt, как указано в документации Libvirt .

  • Отредактируйте файл /etc/conf.d/libvirt-guestsили /etc/sysconfig/libvirt-guestsдля CentOS, затем установите ON_SHUTDOWN=shutdownиSHUTDOWN_TIMEOUT=0
  • Я думаю, нужно также подключить услугу libvirt-guests, например systemctl enable libvirt-guestsиsystemctl start libvirt-guests
1
24.10.2021, 08:42

Теги

Похожие вопросы