В последнее время часто приходится поднимать на centos 7 хост виртуализации на базе технологии qemu-kvm. Ничего сложного, но есть некоторые моменты, которые забываются, поэтому опишу их тут, чтобы в будущем было где подглядывать.
Подготовка.
Для того чтобы в виртуалках нормально работала сеть необходимо сковырнуть NetworkManager — иначе сеть в виртуальные машины не попадет
# systemctl stop NetworkManager.service
# systemctl disable NetworkManager.service
Установка.
yum install qemu-kvm libvirt
systemctl start libvirtd
systemctl enable libvirtd
# lsmod | grep kvm
kvm_intel 55432 0
kvm 346318 1 kvm_intel
virsh sysinfo
#выдают XML как и должен
yum install seabios
#необходимо чтобы появился нужный bios
chmod 666 /dev/kvm
#по умолчанию встают неправильные права
Создание хранилища.
Хранилища могут быть разными. Сейчас меня интересует самый простой вариант — папка в файловой системе сервера.
# mkdir /home/vm
# virsh pool-define-as guest_images_dir dir - - - - "/home/vm"
Пул guest_images_dir определён
virsh pool-list --all
#Хранилище создано но не запущено
virsh pool-build guest_images_dir
virsh pool-start guest_images_dir
virsh pool-autostart guest_images_dir
#проверить
virsh pool-info guest_images_dir
Настройка сети.
Есть много вариантов настройки, но у меня пока используется только бридж. Идея в том, что необходимо создать виртуальный бридж интерфейс, перенести настройки ip из физического интерфейса в новый виртуальный. В физический интерфейс добавить MASTER=br0 (SLAVE=br0 если участвуют больше одного интерфейса)
DEVICE="br0"
ONBOOT="yes"
TYPE="Bridge"
BOOTPROTO="static"
IPADDR=XXX.XXX.XXX.XXX
GATEWAY=XXX.XXX.XXX.XXX
DNS1="XXX.XXX.XXX.XXX"
DNS2="XXX.XXX.XXX.XXX"
MTU="1500"
NETMASK="255.255.255.0"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="yes"
NAME="System br0"
DEVICE="eth0"
BOOTPROTO="none"
HOSTNAME="hostname"
HWADDR="XX:XX:XX:XX:XX:XX"
MTU="1500"
ONBOOT="yes"
TYPE="Ethernet"
NAME="System eth0"
MASTER=br0
BRIDGE="br0"
проверить и поправить iptables (если используется)
brctl show
iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT
service iptables save
systemctl restart iptables