https://winitpro.ru/index.php/category/virtualization/kvm/
Установка и запуск KVM
Управление CLI virsh, virt-install
Управление GUI virt-manager, cockpit
Управление сетями в KVM
egrep --color=auto 'vmx|svm|0xc0f' /proc/cpuinfo # наличие аппаратной поддержки виртуализации в BIOS
lsmod | grep kvm # загружены модули kvm, { kvm_intel | kvm_amd }
# проинсталлировать клиентский софт для управления виртуализацией
dnf install qemu-kvm qemu-kvm-tools qemu-tools libguestfs-tools
dnf install virt-manager cockpit libvirt libvirt-client virt-install
systemctl enable libvirtd ; systemctl start libvirtd
# назначение директории для хранения VM
rm -irf /var/lib/libvirt/images/
ln -s /vz/disk/ /var/lib/libvirt/images
touch /etc/libvirt/hooks/qemu
service libvirtd restart
Первоначально libvirt был узкоспециалированным API для управления
XEN-виртуализацией, и лишь потом был расширен до универсального CLI. Поэтому
он использует нечеловеческую терминологию XEN, к которой придется привыкнуть
domain - виртуалка, VM, инстанс
destroy - stop, останов
define - create, создать описание
undefine - delete, remove, удаление
Проще всего создать VM используя графический клиент к LIBVIRT
virt-manager
# создание VM с VNC-консолью
sudo virt-install --name vm-1 \
--location ~/iso/redos-MUROM-7.3.2-live.iso \
--memory=1024 --vcpus=1 --arch=x86_64 \
--network=bridge:br0 \
--graphics vnc,listen=10.164.102.197,password=12345678 \
--disk path=/vz/disk/test-centos.img,size=16 \
--extra-args="console=tty0 console=ttyS0,115200n8 serial"
# создание VM с KickStart-инсталляцией OS
virt-install --name vm-2 --location ~/iso/redos196.iso \
--network default --initrd-inject /home/moshkow/anaconda-ks.cfg \
--memory=1024 --vcpus=1 \
--disk path=/vz/disk/vm-1.img,size=16 \
--extra-args "inst.ks=file:/anaconda-ks.cfg inst.text console=ttyS0"
###### важные фрагменты anaconda-ks.cfg ##########
text
%packages
@^server-minimal
%end
# ignoredisk --only-use=vda ### потому что sda
network --hostname=vm-1.localdomain
reboot
##################################################
virsh list --all # список всех доменов в т.ч. остановленных
virsh vncdisplay vm-1 # посмотреть VNC-порт назначенный для VM (+5900)
virsh start vm-2
virsh console vm-2 # подключиться к текстовой консоли VM
virsh suspend vm-2
virsh resume vm-2
virsh reboot vm-2
virsh shutdown vm-2
virsh destroy vm-2 # выключить VM
virsh undefine vm-2 # удалить описание VM
virsh undefine vm-4 --remove-all-storage
virsh autostart vm-1
virsh snapshot-create vm-1
virsh snapshot-create-as vm-1 snapshot.1
virsh snapshot-list vm-1 [ --tree ]
virsh snapshot-revert vm-1 --snapshotname 1689251821
virsh snapshot-delete vm-1 --snapshotname 1689251469
Получение информации о VM
virsh vcpuinfo vm-2 # о процессорах VM
virsh domid vm-2 # идентификатор VM по UUID
virsh domuuid vm-2 # UUID VM
virsh dominfo vm-2 # сведения о VM
virsh domstate vm-2 # статус и состояние VM
virsh dominfo vm-2 # все настройки VM
virsh domifaddr vm-1 # mac и IP в ЖМ
virsh domiflist vm-1 # список сетевух VM
virsh dumpxml vm-2 # XML-конфиг VM
virsh setvcpus vm-2 6 --config # задать количество vCPU
virsh setvcpus vm-2 6 --config --maximum # переназначить MAX-количество vCPU
virsh setmem vm-2 4G --config # задать RAM
virsh setmaxmem vm-2 6G --config # с переназначением MAX-memory
virsh edit vm-2 # через редактирование XML-конфига VM
virsh dumpxml vm-2 > /root/test.xml # тот же EDIT но по шагам
vi /root/test.xml
virsh shutdown vm-2
virsh define /root/test.xml
virsh start vm-2
virsh vol-create-from # копирование диска
qemu-img create -f qcow2 -o size=20G /vz/disk/vm-2-disk2.img
virsh attach-disk vm-2 /vz/disk/vm-2-disk2.img vdb --type disk --persistent
virsh shutdown vm-2 ; virsh start vm-2
qemu-img info /vz/disk/vm-2-disk2.img # свойства диска
virtual_size = официальный размер диска
disk_size = реально занятое место (потому что он тонкий)
qemu-img resize /vz/disk/vm-2-disk2.img +10G # увеличить на 10Гб
# для распознания добавленных дисков выполнить в VM
cat /sys/class/scsi_host/host*/proc_name # список и типы сторадж-адаптеров
echo "- - -" > /sys/class/scsi_host/host0/scan # SCSI рескан адаптера host0
# не забываем после расширения диска расширить PV, VG, LV и fs
pvresize /dev/vda # после ресайза PV волгруппа проресайзится автоматически
lvextend -L +10G /dev/VGname/lvol1
fdisk /dev/vda # в случае жестких партиций их размер изменяют вручную
xfs_growfs /dev/VGE/lvol1 # расширение XFS
resize2fs /dev/sda2 # расширение EXT*
Уменьшение/ужимание диска
qemu-img convert -O qcow2 /старый_образ /новый_образ
# уменьшение размера диска (вы уже в курсе, что операционка с уменьшенного диска не загрузится?)
qemu-img resize /путь_до_диска -5G # NB!!! ресайз FS и партиций делать ЗАРАНЕЕ!
Добавление сетевой платы к VM
brctl show
virsh attach-interface vm-2 --type network --source default --persistent
virsh attach-interface vm-2 --type bridge --source br0 --persistent
virsh detach-interface vm-2 --mac '52:54:00:3b:6e:3f' --type bridge --persistent # удаление интерфейса из VM
* УПРАВЛЕНИЕ СЕТЯМИ В KVM *
Для подключения VM в физическую сеть.
Надо настройки IP из eth0 передать бриджу br0
а сам eth0 сцепить с бриджом eth0
# Runtime-настройки, не переживут ребута:
ip link add br0 type bridge
ip link show type bridge
ip link set eth1 up
ip link set eth1 master br0
ip link show master br0
ip address add dev br0 192.168.0.90/24
ip addr show br0
###########################################
bridged-network.xml:
<network>
<name>bridged-network</name>
<forward mode="bridge" />
<bridge name="br0" />
</network>
virsh net-define bridged-network.xml
virsh net-start bridged-network
virsh net-autostart bridged-network
virsh net-destroy bridged-network # остановка
virsh net-undefine bridged-network # и полное удаление
Для подключения VM использовать ключ
--network network=bridged-network
Persistent Bridged Network
cp /etc/sysconfig/network-scripts/ifcfg-eth1 /etc/sysconfig/network-scripts/ifcfg-br0
# и отредактировать ifcfg-eth1 и ifcfg-br0
/etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE="eth1"
ONBOOT="yes"
BRIDGE=br0
/etc/sysconfig/network-scripts/ifcfg-br0
DEVICE="br0" #### !!!
TYPE=BRIDGE #### !!!
ONBOOT=yes
BOOTPROTO=static
IPADDR="IP_адрес_сервера"
NETMASK="255.255.255.0"
GATEWAY="Основной_шлюз"
DNS1="77.88.8.8"
service network restart
brctl show
# активировать роутинг с виртуальных машин в локальную сеть (без NAT)
echo -e "net.ipv4.ip_forward=1" >> /etc/sysctl.conf && sysctl -p
service libvirtd restart
При создании VM для подключения в сеть использовать ключ
--network=bridge:br0 # в физическую бриджовую
--network default # в дефолтную сетку с DHCP и NAT
--network none # не создавать сетевого интерфейса
brctl show
ip a show dev virbr0
virsh net-list # список сетей
ls -l /etc/libvirt/qemu/networks/
virsh net-info default
virsh net-edit default
virsh net-dumpxml default | grep 'uuid|mac' > ~/net-network2.xml # дамп конфигурации сетки
vi ~/net-network2.xml # отредактировать name, bridge name, address, range, nat
# создание сети по XML-описанию, virbr1 будет создан автоматически
virsh net-create ~/net-network2.xml # создание новой сетки
virsh net-define ~/net-network2.xml # создание или модификация свойств сетки
virsh net-edit network2
virsh net-start network2 # стартовать функционал сетки
virsh net-autostart network2 # назначить автостарт при загрузке
0. С помощью ssh-keygen обеспечить беспарольный ssh-вход root'ом между хостами
host1:/root/.ssh/id_dsa*
host2:/root/.ssh/authorized_keys
1. Обеспечить синхронность сетевых настроек и названия свитча
2. Доступность и/или одинаковость названия стораджа на host1 и host2
в случае lvol-диска - на хост2 одноименный lvol должен быть создан заранее
# --live - живая миграция + полное копированием диска
host1# virsh migrate --live Vm1 qemu+ssh://root@host2/system --copy-storage-all
# с инкрементальным копированием только изменений диска
host1# virsh migrate --live Vm1 qemu+ssh://root@host2/system --copy-storage-inc
# живая миграция когда диск доступен с обоих хостов (SAN LVM или NFS)
host1# virsh migrate --live Vm1 qemu+ssh://root@host2/system
# миграция с остановкой VM
host1# virsh migrate Vm1 qemu+ssh://root@host2/system
virsh status migrate # посмотреть статус миграции
virsh migrate_cancell # прервать миграцию
* ТЕХНОЛОГИЧЕСКИЕ ПРИНЦИПЫ ВИРТУАЛИЗАЦИИ *
Виртуальная машина как исполнитель программного кода.
Процессорные команды обращения к аппаратуре.
Управление выполнением в процессоре.
CPU: Перехват "ключевых" команд. Паравиртуализация, софтверная виртуализация, аппаратная поддержка виртуализации CPU.
CPU: Многопроцессорность. Co-scheduling: независимый, жесткий, мягкий.
Memory: виртуальная память процесса, подгрузка данных из RAM, TLB, таблица размещения виртуальной памяти процесса.
Memory: софтверная трансляция таблиц, аппаратная поддержка виртуализации памяти.
Оптимизация. Hyperthreading.
Оптимизация. NUMA
Оптимизация. Паравиртуальная аппаратура.
Оптимизация. Проброс физического железа в виртуалку
Виртуализация жестких дисков. Прямой проброс, толстое выделение, тонкие диски.
Популярность: 1, Last-modified: Sat, 26 Aug 2023 04:45:28 GmT