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



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 и партиций делать ЗАРАНЕЕ!



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





Для подключения 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



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
     Оптимизация. Паравиртуальная аппаратура.
     Оптимизация. Проброс физического железа в виртуалку
     Виртуализация жестких дисков. Прямой проброс, толстое выделение, тонкие диски.


Популярность: 8, Last-modified: Sat, 26 Aug 2023 04:45:28 GMT