Налаштування QEMU KVM та управління libvirt повний курс

Віртуалізація Linux: Гіпервізори QEMU, KVM, інструменти керування libvirt та контейнери LXC

Вступ

Віртуалізація є наріжним каменем сучасної інфраструктури, забезпечуючи ефективне використання ресурсів, ізоляцію робочих навантажень та гнучкі стратегії розгортання. Цей вичерпний посібник охоплює технології віртуалізації Linux: QEMU/KVM для повної віртуалізації, libvirt для керування ВМ та LXC для легковагової контейнеризації.

Ми дослідимо архітектури гіпервізорів, створення та керування віртуальними машинами, конфігурації сховища, налаштування мережі, живу міграцію та ізоляцію контейнерів. Кожен розділ включає практичні приклади, архітектурні діаграми та кращі практики для продакшн середовищ.

Серія Linux Administration

📚 Переглянути повний посібник Linux Administration - Опануйте всі 7 частин з нашим комплексним шляхом навчання.

Це Частина VI нашого комплексного 7-частинного посібника з адміністрування Linux:

  1. ← Частина I: Файлова система та управління процесами
  2. Частина II: Аутентифікація користувачів та LDAP
  3. Частина III: Фаєрвол UFW та мережі
  4. Частина IV: systemd та SSH Hardening
  5. Частина V: Поштовий сервер Postfix
  6. Частина VI: Віртуалізація QEMU KVM ← Ви тут
  7. Частина VII: Сховище LVM та RAID

Основи віртуалізації

Типи віртуалізації та архітектура

   Containerization   

   Paravirtualization   

   Full Virtualization   

  Physical Hardware  

  CPU, RAM, Disk, Network  

  Hypervisor KVM  

  QEMU Emulator  

  Guest OS 1  

  Unmodified  

  Guest OS 2  

  Unmodified  

  Xen Hypervisor  

  Modified Guest  

  Aware of hypervisor  

  Shared Kernel  

  Container 1  

  Container 2  

Технології віртуалізації:

  1. Повна віртуалізація (KVM/QEMU):

    • Повна емуляція обладнання
    • Гостьова ОС працює без модифікацій
    • Апаратна віртуалізація (Intel VT-x, AMD-V)
    • QEMU забезпечує емуляцію пристроїв
    • KVM забезпечує прискорення на рівні ядра
  2. Паравіртуалізація (Xen):

    • Гостьова ОС модифікована для взаємодії з гіпервізором
    • Пряма комунікація з обладнанням
    • Краща продуктивність ніж повна емуляція
    • Потребує модифікацій гостьової ОС
  3. Контейнеризація (LXC/Docker):

    • Віртуалізація на рівні ОС
    • Спільне ядро хоста
    • Легковагова та швидкий запуск
    • Ізоляція процесів та ресурсів

Архітектура QEMU та KVM

Стек QEMU/KVM

   Linux Kernel   

   User Space   

   Guest VM   

  Guest Application  

  Guest OS  

  Linux/Windows  

  VirtIO Drivers  

  Paravirtualized devices  

  QEMU Process  

  Device emulation  

  libvirt Daemon  

  VM management  

  KVM Module  

  Virtualization support  

  Device Drivers  

  Physical Hardware  

  CPU, RAM, Disk, NIC  

Ключові компоненти:

  • KVM (Kernel-based Virtual Machine): Модуль ядра Linux, що забезпечує віртуалізацію CPU та пам'яті (документація KVM: https://www.linux-kvm.org/page/Documents)
  • QEMU (Quick Emulator): Програма користувацького простору для емуляції апаратних пристроїв (документація QEMU: https://www.qemu.org/docs/master/)
  • VirtIO: Паравіртуалізовані драйвери пристроїв для оптимальної продуктивності
  • libvirt: API та демон для керування віртуалізацією

Встановлення KVM та QEMU

Системні вимоги та встановлення

Перевірка підтримки віртуалізації CPU:

# Перевірка на Intel VT-x або AMD-V
egrep -c '(vmx|svm)' /proc/cpuinfo

# Ненульовий вивід означає підтримку віртуалізації

# Перевірка доступності KVM
lsmod | grep kvm

# Очікуваний вивід:
# kvm_intel (Intel) або kvm_amd (AMD)
# kvm

Встановлення KVM та QEMU:

# Оновлення списку пакетів
sudo apt update

# Встановлення QEMU, KVM та утиліт (документація qemu-img: https://www.qemu.org/docs/master/tools/qemu-img.html)
sudo apt install qemu-kvm qemu-system qemu-utils

# Встановлення додаткових інструментів
sudo apt install libvirt-daemon-system libvirt-clients bridge-utils

# Додавання користувача до необхідних груп
sudo usermod -aG kvm $USER
sudo usermod -aG libvirt $USER

# Перезавантаження або повторний вхід для застосування змін груп
newgrp kvm
newgrp libvirt

# Перевірка встановлення
virsh --version
qemu-system-x86_64 --version

# Перевірка прискорення KVM
kvm-ok
# Очікується: "KVM acceleration can be used"

Створення віртуальних машин з QEMU

Формати образів дисків

   Disk Image Formats   

  Raw Format  

  Pre-allocated  

  Best performance  

  QCOW2 Format  

  Thin provisioned  

  Snapshots, compression  

  VDI Format  

  VirtualBox  

  VMDK Format  

  VMware  

  Physical Storage  

Створення образів дисків:

# Створення образу QCOW2 (рекомендується для більшості випадків)
qemu-img create -f qcow2 ubuntu-vm.qcow2 60G

# Створення raw образу (краща продуктивність, без функцій)
qemu-img create -f raw ubuntu-vm.raw 60G

# Перегляд інформації про образ
qemu-img info ubuntu-vm.qcow2

# Конвертація між форматами
qemu-img convert -f raw -O qcow2 source.raw destination.qcow2

# Зміна розміру образу
qemu-img resize ubuntu-vm.qcow2 +20G

# Створення образу зі знімками
qemu-img create -f qcow2 -o backing_file=base-image.qcow2 snapshot1.qcow2

Створення та запуск віртуальних машин

Базове створення ВМ:

# Завантаження Ubuntu ISO (приклад)
wget https://releases.ubuntu.com/22.04/ubuntu-22.04.3-live-server-amd64.iso

# Створення образу диска
qemu-img create -f qcow2 ubuntu-server.qcow2 40G

# Завантаження ВМ з ISO (встановлення)
qemu-system-x86_64 \
  -enable-kvm \
  -m 4G \
  -cpu host \
  -smp cores=2,threads=1 \
  -cdrom ubuntu-22.04.3-live-server-amd64.iso \
  -drive file=ubuntu-server.qcow2,format=qcow2 \
  -boot d \
  -vnc :1

# Завантаження встановленої ВМ
qemu-system-x86_64 \
  -enable-kvm \
  -m 4G \
  -cpu host \
  -smp cores=2,threads=1 \
  -drive file=ubuntu-server.qcow2,format=qcow2,if=virtio \
  -net nic,model=virtio \
  -net user,hostfwd=tcp::2222-:22 \
  -display sdl

Пояснення опцій команди QEMU:

  • -enable-kvm: Використання прискорення KVM
  • -m 4G: Виділення 4ГБ оперативної пам'яті
  • -cpu host: Використання моделі CPU хоста (найкраща продуктивність)
  • -smp cores=2,threads=1: 2 ядра CPU
  • -drive file=...,if=virtio: VirtIO диск (паравіртуалізований)
  • -net nic,model=virtio: VirtIO мережева карта
  • -net user,hostfwd=tcp::2222-:22: Переадресація портів (хост:2222 → гість:22)
  • -vnc :1: VNC сервер на дисплеї :1 (порт 5901)
  • -display sdl: Використання графічного дисплею SDL

Розширені конфігурації ВМ:

# ВМ з кількома дисками
qemu-system-x86_64 \
  -enable-kvm \
  -m 8G \
  -cpu host \
  -smp 4 \
  -drive file=system.qcow2,format=qcow2,if=virtio \
  -drive file=data.qcow2,format=qcow2,if=virtio \
  -net nic,model=virtio \
  -net bridge,br=br0

# ВМ з проброшенням USB
qemu-system-x86_64 \
  -enable-kvm \
  -m 4G \
  -usb \
  -device usb-host,vendorid=0x1234,productid=0x5678

# ВМ з проброшенням PCI (GPU)
qemu-system-x86_64 \
  -enable-kvm \
  -m 8G \
  -device vfio-pci,host=01:00.0

Керування ВМ за допомогою libvirt та virsh

Архітектура libvirt

   Hypervisors   

   libvirt Daemon   

   Management Layer   

  Administrator  

  virt-manager GUI  

  virsh CLI  

  libvirt API  

  Python, Go, etc  

  libvirtd  

  Storage Pools  

  Virtual Networks  

  QEMU/KVM  

  LXC  

  Xen  

Встановлення libvirt та virt-manager:

# Встановлення повного стеку віртуалізації (документація libvirt: https://libvirt.org/docs.html)
sudo apt install virt-manager libvirt-daemon-system libvirt-clients bridge-utils

# Запуск та увімкнення libvirt
sudo systemctl start libvirtd
sudo systemctl enable libvirtd

# Перевірка статусу
sudo systemctl status libvirtd

# Додавання користувача до групи libvirt
sudo usermod -aG libvirt $USER

Створення ВМ за допомогою virt-install

Базове створення ВМ:

# Створення Ubuntu ВМ (документація virt-install: https://manpages.ubuntu.com/manpages/focal/man1/virt-install.1.html)
virt-install \
  --name ubuntu-server \
  --memory 4096 \
  --vcpus 2 \
  --disk size=40,format=qcow2,path=/var/lib/libvirt/images/ubuntu-server.qcow2 \
  --cdrom ~/Downloads/ubuntu-22.04.3-live-server-amd64.iso \
  --os-variant ubuntu22.04 \
  --network bridge=virbr0 \
  --graphics vnc,listen=0.0.0.0 \
  --noautoconsole

# Підключення до консолі ВМ
virt-viewer ubuntu-server

# Або використання VNC
# VNC порт = 5900 + номер дисплея (перевірте за допомогою: virsh vncdisplay ubuntu-server)

Розширене створення ВМ:

# ВМ з конкретною моделлю CPU та функціями
virt-install \
  --name production-server \
  --memory 8192 \
  --vcpus 4,maxvcpus=8,cores=2,threads=2,sockets=1 \
  --cpu host-passthrough,cache.mode=passthrough \
  --disk path=/var/lib/libvirt/images/production.qcow2,size=100,format=qcow2,bus=virtio,cache=writeback \
  --disk path=/var/lib/libvirt/images/production-data.qcow2,size=200,format=qcow2,bus=virtio \
  --network bridge=br0,model=virtio \
  --graphics spice,listen=0.0.0.0,port=5901 \
  --video qxl \
  --os-variant ubuntu22.04 \
  --import

# Імпорт існуючого диска (пропуск встановлення)
virt-install \
  --name imported-vm \
  --memory 2048 \
  --vcpus 1 \
  --disk path=/path/to/existing-disk.qcow2,format=qcow2 \
  --import \
  --os-variant ubuntu22.04 \
  --network bridge=virbr0

Керування ВМ за допомогою virsh

Керування життєвим циклом ВМ:

# Список всіх ВМ
virsh list --all

# Запуск ВМ
virsh start ubuntu-server

# Коректне вимкнення ВМ
virsh shutdown ubuntu-server

# Примусова зупинка ВМ
virsh destroy ubuntu-server

# Перезавантаження ВМ
virsh reboot ubuntu-server

# Призупинення ВМ
virsh suspend ubuntu-server

# Відновлення призупиненої ВМ
virsh resume ubuntu-server

# Автозапуск ВМ при завантаженні
virsh autostart ubuntu-server
virsh autostart ubuntu-server --disable

# Видалення ВМ (зберігає диски)
virsh undefine ubuntu-server

# Видалення ВМ та всього сховища
virsh undefine ubuntu-server --remove-all-storage

Конфігурація та інформація про ВМ:

# Перегляд інформації про ВМ
virsh dominfo ubuntu-server

# Перегляд конфігурації ВМ (XML)
virsh dumpxml ubuntu-server > ubuntu-server.xml

# Редагування конфігурації ВМ
virsh edit ubuntu-server

# Перегляд консолі ВМ
virsh console ubuntu-server

# Перегляд VNC дисплея
virsh vncdisplay ubuntu-server

# Зняття скріншоту ВМ
virsh screenshot ubuntu-server screenshot.ppm

Керування ресурсами:

# Перегляд поточної пам'яті
virsh dominfo ubuntu-server | grep memory

# Встановлення пам'яті (потребує вимкнення ВМ)
virsh setmem ubuntu-server 4G --config

# Встановлення максимальної пам'яті
virsh setmaxmem ubuntu-server 8G --config

# Зміна кількості vCPU (онлайн)
virsh setvcpus ubuntu-server 4 --live

# Постійне встановлення кількості vCPU
virsh setvcpus ubuntu-server 4 --config

# Перегляд статистики CPU
virsh cpu-stats ubuntu-server

# Перегляд статистики пам'яті
virsh dommemstat ubuntu-server

Віртуальна мережа

Архітектура мережі

   Virtual Machines   

   Host System   

  Internet  

  Physical NIC  

  eth0  

  Linux Bridge  

  br0  

  NAT Network  

  virbr0  

  VM1 vNIC  

  VM2 vNIC  

  VM3 vNIC  

Режими мережі:

  1. NAT (Network Address Translation): За замовчуванням, ВМ використовують спільний IP хоста
  2. Bridged: ВМ з'являються у фізичній мережі
  3. Host-only: ВМ спілкуються тільки з хостом
  4. Isolated: ВМ спілкуються тільки між собою

Налаштування мережі bridge:

# Встановлення утиліт bridge
sudo apt install bridge-utils

# Створення конфігурації bridge
sudo vim /etc/netplan/01-netcfg.yaml

# Конфігурація:
network:
  version: 2
  ethernets:
    eth0:
      dhcp4: no
  bridges:
    br0:
      interfaces: [eth0]
      dhcp4: yes

# Застосування конфігурації
sudo netplan apply

# Перевірка bridge
brctl show
ip addr show br0

# Створення ВМ з мережею bridge
virt-install \
  --name bridged-vm \
  --memory 2048 \
  --vcpus 1 \
  --disk size=20 \
  --network bridge=br0 \
  --os-variant ubuntu22.04 \
  --cdrom ubuntu.iso

Керування віртуальними мережами:

# Список мереж
virsh net-list --all

# Перегляд деталей мережі
virsh net-info default
virsh net-dumpxml default

# Створення нової мережі
cat > isolated-network.xml <<EOF
<network>
  <name>isolated</name>
  <bridge name='virbr1'/>
  <ip address='192.168.100.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.100.100' end='192.168.100.200'/>
    </dhcp>
  </ip>
</network>
EOF

virsh net-define isolated-network.xml
virsh net-start isolated
virsh net-autostart isolated

# Видалення мережі
virsh net-destroy isolated
virsh net-undefine isolated

Керування сховищем віртуальних машин

Пули сховищ

Створення та керування пулами сховищ:

# Список пулів сховищ
virsh pool-list --all

# Перегляд деталей пула
virsh pool-info default
virsh pool-dumpxml default

# Створення пула на основі директорії
mkdir -p /mnt/vm-storage

virsh pool-define-as vmpool dir --target /mnt/vm-storage
virsh pool-start vmpool
virsh pool-autostart vmpool

# Створення пула на основі LVM
virsh pool-define-as lvm-pool logical --source-name vg-vms --target /dev/vg-vms
virsh pool-start lvm-pool

# Список томів в пулі
virsh vol-list vmpool

# Створення тому
virsh vol-create-as vmpool data-disk.qcow2 50G --format qcow2

Підключення та відключення дисків:

# Підключення диска до працюючої ВМ
virsh attach-disk ubuntu-server \
  /var/lib/libvirt/images/data.qcow2 \
  vdb \
  --targetbus virtio \
  --persistent

# Відключення диска
virsh detach-disk ubuntu-server vdb --persistent

# Підключення CD-ROM
virsh attach-disk ubuntu-server \
  /path/to/cdrom.iso \
  hdc \
  --type cdrom \
  --mode readonly

# Зміна носія CD-ROM
virsh change-media ubuntu-server hdc /path/to/new.iso

Знімки дисків:

# Створення знімка (документація virsh: https://libvirt.org/manpages/virsh.html)
virsh snapshot-create-as ubuntu-server \
  snapshot1 \
  "Pre-upgrade snapshot" \
  --disk-only \
  --atomic

# Список знімків
virsh snapshot-list ubuntu-server

# Перегляд інформації про знімок
virsh snapshot-info ubuntu-server snapshot1

# Відновлення до знімка
virsh snapshot-revert ubuntu-server snapshot1

# Видалення знімка
virsh snapshot-delete ubuntu-server snapshot1

Жива міграція

Архітектура міграції

   Destination Host   

   Source Host   

  Shared  

  Transfer  

  Running VM  

  Memory state  

  Shared Storage  

  Live Migration  

  Memory + CPU state  

  Running VM  

  Resumed  

  Shared Storage  

Міграція ВМ між хостами:

# Передумови:
# - Спільне сховище (NFS, iSCSI тощо)
# - Однакова версія libvirt на обох хостах
# - SSH доступ між хостами
# - Сумісні моделі CPU

# Жива міграція ВМ
virsh migrate --live ubuntu-server \
  qemu+ssh://destination-host/system \
  --persistent \
  --verbose

# Офлайн міграція
virsh migrate ubuntu-server \
  qemu+ssh://destination-host/system \
  --offline \
  --persistent

# Міграція з власними параметрами
virsh migrate --live ubuntu-server \
  qemu+ssh://destination-host/system \
  --persistent \
  --undefinesource \
  --copy-storage-all \
  --verbose \
  --bandwidth 1000

Контейнери LXC

Архітектура контейнерів

   Containers   

   Control Groups   

  CPU Limits  

  Memory Limits  

  I/O Limits  

   Kernel Namespaces   

  PID Namespace  

  Network Namespace  

  Mount Namespace  

  User Namespace  

  Physical Hardware  

  Linux Kernel  

  Shared by all containers  

  Container 1  

  Ubuntu  

  Container 2  

  Debian  

  Container 3  

  Alpine  

Встановлення LXC:

# Встановлення LXC
sudo apt install lxc lxc-templates

# Перевірка конфігурації LXC
lxc-checkconfig

# Список доступних шаблонів
ls /usr/share/lxc/templates/

Створення та керування контейнерами:

# Створення Ubuntu контейнера
sudo lxc-create -n container1 -t ubuntu

# Створення з конкретним релізом
sudo lxc-create -n ubuntu2204 -t ubuntu -- -r jammy

# Створення Debian контейнера
sudo lxc-create -n debian-container -t debian

# Створення Alpine контейнера (легковаговий)
sudo lxc-create -n alpine-container -t alpine

# Список контейнерів
sudo lxc-ls -f

# Запуск контейнера
sudo lxc-start -n container1

# Підключення до консолі контейнера
sudo lxc-attach -n container1

# Виконання команди в контейнері
sudo lxc-attach -n container1 -- apt update

# Зупинка контейнера
sudo lxc-stop -n container1

# Видалення контейнера
sudo lxc-destroy -n container1

Конфігурація контейнера:

# Перегляд конфігурації контейнера
cat /var/lib/lxc/container1/config

# Редагування конфігурації контейнера
sudo vim /var/lib/lxc/container1/config

# Приклад конфігурації:
lxc.net.0.type = veth
lxc.net.0.link = lxcbr0
lxc.net.0.flags = up
lxc.net.0.hwaddr = 00:16:3e:xx:xx:xx

# Обмеження ресурсів
lxc.cgroup2.memory.max = 512M
lxc.cgroup2.cpu.max = 50000 100000  # 50% одного CPU

# Клонування контейнера
sudo lxc-copy -n container1 -N container2

# Знімок контейнера
sudo lxc-snapshot -n container1

# Список знімків
sudo lxc-snapshot -n container1 -L

# Відновлення знімка
sudo lxc-snapshot -n container1 -r snap0

Кращі практики для продакшн середовищ

  1. Виділення ресурсів:

    • Не перевитрачайте CPU та пам'ять
    • Моніторте використання ресурсів хоста
    • Використовуйте обмеження ресурсів (cgroups)
    • Плануйте пікові навантаження
  2. Сховище:

    • Використовуйте QCOW2 для гнучкості, raw для продуктивності
    • Впроваджуйте регулярні резервні копії
    • Використовуйте LVM або ZFS для розширених функцій
    • Моніторте продуктивність дискового вводу/виводу
  3. Мережа:

    • Використовуйте драйвери VirtIO для найкращої продуктивності
    • Впроваджуйте ізоляцію мережі
    • Налаштовуйте відповідні правила брандмауера
    • Моніторте пропускну здатність мережі
  4. Безпека:

    • Тримайте гіпервізор оновленим
    • Використовуйте SELinux або AppArmor
    • Ізолюйте мережу керування
    • Впроваджуйте контроль доступу
    • Регулярні аудити безпеки
  5. Висока доступність:

    • Використовуйте спільне сховище для живої міграції
    • Впроваджуйте автоматичне відновлення після збоїв
    • Регулярне тестування резервного копіювання та відновлення після аварій
    • Моніторте здоров'я ВМ

Усунення несправностей

KVM не працює:

# Перевірка підтримки віртуалізації CPU
egrep -c '(vmx|svm)' /proc/cpuinfo

# Перевірка завантаження модулів KVM
lsmod | grep kvm

# Завантаження модулів KVM
sudo modprobe kvm
sudo modprobe kvm_intel  # або kvm_amd

# Перевірка вкладеної віртуалізації
cat /sys/module/kvm_intel/parameters/nested

ВМ не запускається:

# Перевірка стану ВМ
virsh domstate ubuntu-server

# Перегляд логів помилок
virsh dominfo ubuntu-server
sudo journalctl -u libvirtd -f

# Валідація XML конфігурації
virt-xml-validate /etc/libvirt/qemu/ubuntu-server.xml

# Перевірка доступності ресурсів
virsh nodeinfo
free -h
df -h /var/lib/libvirt/images/

Проблеми з мережею:

# Перевірка віртуальних мереж
virsh net-list --all
virsh net-info default

# Перезапуск мережі
virsh net-destroy default
virsh net-start default

# Перевірка bridge
brctl show
ip addr show virbr0

# Перевірка правил iptables
sudo iptables -L -n -v -t nat

Проблеми з контейнерами:

# Перевірка стану контейнера
sudo lxc-info -n container1

# Перегляд логів контейнера
sudo lxc-console -n container1 -t 0

# Перевірка конфігурації cgroup
cat /sys/fs/cgroup/lxc/container1/memory.limit_in_bytes

# Перевірка мережі
sudo lxc-attach -n container1 -- ip addr

Висновок

Віртуалізація Linux надає потужні опції для ізоляції робочих навантажень та керування ресурсами. QEMU/KVM пропонує повну віртуалізацію з апаратним прискоренням, libvirt забезпечує комплексні інструменти керування, а LXC надає легковагову контейнеризацію.

Обирайте відповідні технології: QEMU/KVM для запуску різних операційних систем з повною ізоляцією, libvirt для централізованого керування ВМ, та LXC для легковагових контейнерів додатків. Впроваджуйте належне виділення ресурсів, заходи безпеки, стратегії резервного копіювання та моніторинг для продакшн середовищ.


Часті запитання

П: Яка різниця між KVM та QEMU?

KVM (Kernel-based Virtual Machine) - це модуль ядра Linux, що забезпечує підтримку апаратної віртуалізації через Intel VT-x або AMD-V. QEMU - це емулятор користувацького простору, що використовує KVM для прискорення. Разом QEMU/KVM забезпечує повну віртуалізацію з продуктивністю близькою до нативної. KVM обробляє віртуалізацію CPU/пам'яті, QEMU емулює пристрої та I/O.

П: Як libvirt спрощує керування ВМ?

Libvirt надає уніфікований API для керування ВМ через гіпервізори як KVM, Xen та VirtualBox. Включає інструмент командного рядка virsh, GUI virt-manager та конфігурацію на основі XML. Переваги включають консистентний інтерфейс керування, абстракцію мережі/сховища, підтримку живої міграції та інтеграцію з інструментами оркестрації як OpenStack.

П: Яка різниця між ВМ та контейнерами?

ВМ запускають повні операційні системи з окремими ядрами через гіпервізори, забезпечуючи сильну ізоляцію але вищі накладні витрати. Контейнери спільно використовують ядро хоста, використовуючи namespaces та cgroups для ізоляції з мінімальними накладними витратами. Використовуйте ВМ для запуску різних ОС або сильних меж безпеки, контейнери для ізоляції додатків та швидкого розгортання.

П: Як створити ВМ через virt-install?

Використовуйте virt-install з ISO або мережевим джерелом установки: "virt-install --name myvm --memory 2048 --vcpus 2 --disk size=20 --cdrom /path/to/ubuntu.iso --network bridge=virbr0". Для мережевої установки використовуйте "--location" замість "--cdrom". Додайте "--graphics none --console" для безголовної установки. Це створює ВМ з вказаними ресурсами.

П: Що таке LXC контейнери і коли їх використовувати?

LXC (Linux Containers) забезпечує віртуалізацію на рівні ОС через cgroups та namespaces ядра. Контейнери завантажуються як ВМ, але спільно використовують ядро хоста, пропонуючи легковагову ізоляцію. Використовуйте LXC для запуску кількох дистрибутивів Linux на одному ядрі, середовищ розробки або ізоляції додатків без накладних витрат ВМ. Docker будується на концепціях LXC.

П: Як CPU pinning покращує продуктивність ВМ?

CPU pinning призначає конкретні фізичні ядра CPU для ВМ, запобігаючи накладним витратам планування CPU та thrashing кешу. Налаштуйте через virsh vcpupin або в domain XML з vcpu placement='static' та секціями cputune. Переваги включають консистентну продуктивність, зменшену затримку та краще використання кешу CPU для робочих навантажень, чутливих до затримки.

П: Що таке жива міграція і як це працює?

Жива міграція переміщує запущені ВМ між хостами без простою. KVM копіює сторінки пам'яті поки ВМ працює, потім робить коротку паузу для передачі фінального стану. Вимагає спільного сховища (NFS/iSCSI), сумісних функцій CPU та мережевого з'єднання. Використовуйте virsh migrate для міграцій. Критично важливо для обслуговування без переривання сервісу.