bolt Valebyte VPS від $4/міс — NVMe, запуск за 60 секунд.

Отримати VPS arrow_forward

KVM віртуалізація: Як використовувати легко та швидко!

calendar_month October 04, 2025 schedule 10 хв. читання visibility 732 переглядів
person
Valebyte Team
KVM віртуалізація: Як використовувати легко та швидко!
summarize

TL;DR

  • KVM — встроенная в ядро Linux технология для запуска виртуальных машин с высокой производительностью.
  • На Ubuntu/Debian установите пакеты qemu-kvm, libvirt-daemon-system, bridge-utils и virtinst.
  • Перед началом работы обязательно убедитесь, что ваш процессор поддерживает аппаратную виртуализацию.
  • Используйте демон libvirtd и утилиты libvirt-clients для централизованного управления ресурсами ВМ.
  • Пакет bridge-utils позволяет создавать сетевые мосты для связи виртуальных машин с внешней сетью.

Як використовувати KVM віртуалізацію? Повний посібник

Віртуалізація KVM (Kernel-based Virtual Machine) – це потужна технологія віртуалізації, вбудована безпосередньо в ядро Linux. Вона дозволяє створювати та запускати декілька віртуальних машин (ВМ) на одному фізичному сервері, що значно підвищує ефективність використання ресурсів і знижує витрати. Цей посібник, написаний досвідченим системним адміністратором, проведе вас через усі етапи налаштування та використання KVM, починаючи з установки і закінчуючи оптимізацією продуктивності. Ми детально розглянемо установку необхідних пакетів, створення та налаштування віртуальних машин, управління ними, а також усунення поширених проблем. Незалежно від того, чи є ви новачком у віртуалізації, чи досвідченим користувачем, цей посібник надасть вам всі необхідні знання та практичні навички для успішного використання KVM.

Зміст

Встановлюємо KVM та необхідні пакети

Как использовать KVM виртуализацию? - Установка пакетов KVM на Ubuntu/Debian/CentOS/RHEL. Показаны команды менеджера пакетов для каждой ОС.
Першим кроком є установка необхідних пакетів KVM. Процес установки трохи відрізняється в залежності від використовуваного дистрибутива Linux. Розглянемо приклади для Ubuntu/Debian і CentOS/RHEL. Установка на Ubuntu/Debian Для установки KVM і пов'язаних з ним інструментів на Ubuntu або Debian, виконайте наступні команди в терміналі:
sudo apt update
sudo apt install -y qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virtinst
* qemu-kvm: Основний пакет для емуляції KVM. * libvirt-daemon-system: Демон libvirtd, що управляє віртуальними машинами. * libvirt-clients: Клієнтські інструменти для управління libvirtd. * bridge-utils: Утиліти для створення мережевих мостів. * virtinst: Інструменти для створення віртуальних машин з командного рядка. Після установки необхідно перевірити, чи підтримується віртуалізація на вашому процесорі. Виконайте наступну команду:
egrep -c '(vmx|svm)' /proc/cpuinfo
Якщо вивід команди більше 0, значить віртуалізація підтримується. Далі, додайте свого користувача в групу libvirt, щоб отримати доступ до управління віртуальними машинами без використання sudo:
sudo usermod -a -G libvirt $USER
newgrp libvirt
Тепер перевірте статус служби libvirtd:
systemctl status libvirtd
Ви повинні побачити, що служба запущена і активна. Якщо ні, запустіть її:
sudo systemctl start libvirtd
sudo systemctl enable libvirtd
Установка на CentOS/RHEL Для установки KVM на CentOS або RHEL, виконайте наступні команди:
sudo yum install -y qemu-kvm libvirt virt-install bridge-utils
* qemu-kvm: Основний пакет для емуляції KVM. * libvirt: Пакет, що містить демона libvirtd і клієнтські інструменти. * virt-install: Інструменти для створення віртуальних машин з командного рядка. * bridge-utils: Утиліти для створення мережевих мостів. Перевірка підтримки віртуалізації на процесорі аналогічна Ubuntu/Debian:
egrep -c '(vmx|svm)' /proc/cpuinfo
Додайте свого користувача в групу libvirt:
sudo usermod -a -G libvirt $USER
newgrp libvirt
Перевірте статус служби libvirtd:
sudo systemctl status libvirtd
Якщо служба не запущена, запустіть і включіть її:
sudo systemctl start libvirtd
sudo systemctl enable libvirtd
**Порада:** Переконайтеся, що в BIOS вашого сервера включена віртуалізація (Intel VT-x або AMD-V). Без цього KVM не зможе працювати. **Попередження:** Неправильне налаштування мережевих мостів може призвести до втрати мережевого підключення на хост-системі. Будьте уважні при налаштуванні мережі!

Віртуалізація дозволяє ефективно використовувати обчислювальні ресурси, знижуючи потребу у фізичних серверах і спрощуючи управління інфраструктурою.

Дмитро Іванов, системний архітектор
Тепер, коли KVM встановлений і налаштований, перейдемо до створення першої віртуальної машини.

Потрібен потужний KVM-сервер?

Розгорніть свій KVM-сервер миттєво з нашими VPS-планами. Отримайте повний контроль та гнучкість. — від €4.49/міс.

Вибрати VPS-план →
rocket_launch Швидкий вибір

Шукаєте сервер, який просто працює?

Valebyte VPS — NVMe, підтримка 24/7, розгортання за 60 секунд.

Переглянути тарифи VPS arrow_forward

Створюємо першу віртуальну машину

Как использовать KVM виртуализацию? - Скриншот графического интерфейса virt-manager или создание ВМ из командной строки.
Існує кілька способів створення віртуальної машини KVM: за допомогою графічного інтерфейсу (virt-manager) або з командного рядка (virt-install). Розглянемо обидва варіанти. Створення VM за допомогою virt-manager Virt-manager – це графічний інструмент для управління віртуальними машинами. Якщо він ще не встановлений, встановіть його:
sudo apt install -y virt-manager   # Ubuntu/Debian
sudo yum install -y virt-manager   # CentOS/RHEL
Запустіть virt-manager:
virt-manager
У головному вікні натисніть кнопку "Створити нову віртуальну машину". Дотримуйтесь інструкцій майстра. Вам потрібно буде вказати:
  • Ім'я віртуальної машини.
  • Спосіб установки операційної системи (ISO-образ, мережева установка, і т.д.).
  • Обсяг виділеної оперативної пам'яті та кількість віртуальних процесорів.
  • Розмір диска віртуальної машини.
  • Мережеві налаштування.
**Приклад:** Створення віртуальної машини Ubuntu 20.04 з ISO-образу. Створення VM за допомогою virt-install Virt-install – це утиліта командного рядка для створення віртуальних машин. Вона надає більше гнучкості та можливостей для автоматизації. Створення віртуальної машини CentOS 7 з ISO-образу:
virt-install \
--name=centos7-vm \
--ram=2048 \
--vcpus=2 \
--os-variant=centos7.0 \
--cdrom=/path/to/CentOS-7-x86_64-DVD-2009.iso \
--disk path=/var/lib/libvirt/images/centos7-vm.img,size=20 \
--network bridge=virbr0,model=virtio \
--graphics vnc,listen=0.0.0.0 --noautoconsole
Розберемо параметри команди:
  • --name: Ім'я віртуальної машини (centos7-vm).
  • --ram: Обсяг виділеної оперативної пам'яті в МБ (2048).
  • --vcpus: Кількість віртуальних процесорів (2).
  • --os-variant: Варіант операційної системи (centos7.0). Вкажіть найбільш відповідний варіант для вашої ОС. Список доступних варіантів можна отримати командою osinfo-query os.
  • --cdrom: Шлях до ISO-образу інсталяційного диска (/path/to/CentOS-7-x86_64-DVD-2009.iso). Замініть на свій шлях.
  • --disk: Параметри диска віртуальної машини. path – шлях до файлу образу диска (/var/lib/libvirt/images/centos7-vm.img), size – розмір диска в ГБ (20).
  • --network: Налаштування мережі. bridge=virbr0 – підключення до мережевого мосту virbr0 (за замовчуванням), model=virtio – використання драйвера virtio для мережевої карти (забезпечує кращу продуктивність).
  • --graphics: Налаштування графічного інтерфейсу. vnc,listen=0.0.0.0 – використання VNC для підключення до віртуальної машини. listen=0.0.0.0 означає, що VNC сервер буде слухати на всіх IP-адресах. --noautoconsole відключає автоматичне підключення до консолі.
Після виконання команди почнеться процес встановлення операційної системи. Ви можете підключитися до віртуальної машини через VNC-клієнт, вказавши IP-адресу хост-системи та порт VNC (за замовчуванням 5900). Якщо ви використовуєте firewall, переконайтеся, що порт VNC відкрито.
sudo firewall-cmd --permanent --add-port=5900/tcp
sudo firewall-cmd --reload
**Порада:** Використовуйте драйвери virtio для дисків і мережевих карт у віртуальних машинах. Вони забезпечують значно кращу продуктивність у порівнянні з емульованими драйверами. **Попередження:** Виділення занадто великої кількості ресурсів віртуальній машині може призвести до зниження продуктивності хост-системи.

Правильне планування ресурсів – ключ до успішної віртуалізації. Враховуйте потреби як хост-системи, так і віртуальних машин.

Олена Смірнова, DevOps інженер
Тепер, коли ви створили віртуальну машину, перейдемо до управління ними.

Управління віртуальними машинами

Управління віртуальними машинами KVM здійснюється за допомогою утиліти virsh (command-line interface for libvirt). Вона надає широкий набір команд для виконання різних операцій. Основні команди virsh * **Список віртуальних машин:**
virsh list --all
Ця команда відображає список всіх віртуальних машин, включаючи запущені та вимкнені. * **Запуск віртуальної машини:**
virsh start centos7-vm
Замініть centos7-vm на ім'я вашої віртуальної машини. * **Зупинка віртуальної машини:**
virsh shutdown centos7-vm
Ця команда відправляє сигнал ACPI shutdown у віртуальну машину, що дозволяє їй коректно завершити роботу. * **Примусова зупинка віртуальної машини:**
virsh destroy centos7-vm
Ця команда негайно завершує роботу віртуальної машини, що може призвести до втрати даних. Використовуйте її тільки в крайньому випадку. * **Перезавантаження віртуальної машини:**
virsh reboot centos7-vm
* **Підключення до консолі віртуальної машини:**
virsh console centos7-vm
Ця команда дозволяє підключитися до текстової консолі віртуальної машини. Для виходу з консолі натисніть Ctrl+]. * **Отримання інформації про віртуальну машину:**
virsh dominfo centos7-vm
Ця команда відображає детальну інформацію про віртуальну машину, включаючи ім'я, ID, стан, використання CPU та пам'яті. * **Редагування конфігурації віртуальної машини:**
virsh edit centos7-vm
Ця команда відкриває конфігураційний файл віртуальної машини в текстовому редакторі. Зміна конфігурації може вплинути на роботу віртуальної машини, тому будьте обережні. **Приклад конфігураційного файлу віртуальної машини (centos7-vm.xml):**
<domain type='kvm' id='1'>
  <name>centos7-vm</name>
  <uuid>9690f123-58c4-4b1e-b917-7b76474930a4</uuid>
  <memory unit='KiB'>2097152</memory>
  <currentMemory unit='KiB'>2097152</currentMemory>
  <vcpu placement='static'>2</vcpu>
  <os>
    <type arch='x86_64' machine='pc-i440fx-rhel7.6.0'>hvm</type>
    <boot dev='cdrom'/>
    <boot dev='hd'/>
  </os>
  <features>
    <acpi/>
    <apic/>
    <vmport state='off'/>
  </features>
  <cpu mode='host-model' check='partial'>
    <model fallback='allow'/>
  </cpu>
  <clock offset='utc'/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>destroy</on_crash>
  <devices>
    <emulator>/usr/bin/qemu-kvm</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/var/lib/libvirt/images/centos7-vm.img'/>
      <target dev='vda' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </disk>
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source file='/path/to/CentOS-7-x86_64-DVD-2009.iso'/>
      <target dev='hdc' bus='ide'/>
      <readonly/>
      <address type='drive' controller='0' bus='1' target='0' unit='0'/>
    </disk>
    <interface type='bridge'>
      <mac address='52:54:00:7f:b8:e9'/>
      <source bridge='virbr0'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
    <serial type='pty'>
      <target port='0'/>
    </serial>
    <console type='pty'>
      <target type='serial' port='0'/>
    </console>
    <input type='tablet' bus='usb'/>
    <input type='mouse' bus='ps2'/>
    <graphics type='vnc' port='5900' autoport='no' listen='0.0.0.0'>
      <listen type='address' address='0.0.0.0'/>
    </graphics>
    <sound model='ich6'/>
    </video>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </video>
    <memballoon model='virtio'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
    </memballoon>
  </devices>
</domain>
Замініть /path/to/CentOS-7-x86_64-DVD-2009.iso на актуальний шлях до вашого ISO-образу. **Порада:** Створюйте резервні копії конфігураційних файлів віртуальних машин перед внесенням змін. **Попередження:** Неправильне налаштування конфігурації віртуальної машини може призвести до її непрацездатності.

Автоматизація задач управління віртуальними машинами дозволяє значно знизити адміністративні витрати та підвищити надійність інфраструктури.

Red Hat KVM Documentation
Тепер розглянемо налаштування мережі для віртуальних машин.

Мережі та підключення до VM

Налаштування мережі є важливим аспектом віртуалізації. KVM підтримує різні варіанти мережевих конфігурацій, включаючи мережеві мости (bridged networking) та NAT (Network Address Translation). Мережевий міст (Bridged Networking) Мережевий міст дозволяє віртуальній машині безпосередньо підключатися до фізичної мережі. Віртуальна машина отримує IP-адресу з тієї ж підмережі, що й хост-система. За замовчуванням, libvirt створює мережевий міст virbr0 з NAT. Для використання мережевого мосту необхідно створити bridge-інтерфейс на хост-системі та призначити йому IP-адресу фізичного інтерфейсу. **Приклад налаштування мережевого мосту на Ubuntu/Debian:** Припустимо, у вас є мережевий інтерфейс enp0s3 з IP-адресою 192.168.1.100. Створіть файл /etc/network/interfaces.d/br0.cfg:
auto br0
iface br0 inet static
    address 192.168.1.100
    netmask 255.255.255.0
    gateway 192.168.1.1
    bridge_ports enp0s3
    bridge_stp off
    bridge_fd 0
    bridge_maxwait 0
Розберемо параметри:
  • auto br0: Вмикає інтерфейс br0 під час завантаження системи.
  • iface br0 inet static: Вказує, що інтерфейс br0 використовує статичну IP-адресу.
  • address: IP-адреса інтерфейсу br0 (192.168.1.100).
  • netmask: Маска підмережі (255.255.255.0).
  • gateway: IP-адреса шлюзу (192.168.1.1).
  • bridge_ports enp0s3: Вказує, що інтерфейс enp0s3 є членом мосту br0.
  • bridge_stp off: Вимикає протокол STP (Spanning Tree Protocol).
  • bridge_fd 0: Встановлює час пересилання (forward delay) в 0 секунд.
  • bridge_maxwait 0: Встановлює максимальний час очікування перед активацією мосту в 0 секунд.
Потім відредагуйте файл /etc/network/interfaces, закоментувавши або видаливши налаштування для інтерфейсу enp0s3:
#auto enp0s3
#iface enp0s3 inet static
#    address 192.168.1.100
#    netmask 255.255.255.0
#    gateway 192.168.1.1
Перезавантажте мережеві інтерфейси:
sudo ifdown enp0s3
sudo ifup br0
Тепер віртуальні машини, підключені до мосту br0, будуть отримувати IP-адреси з тієї ж підмережі, що й хост-система. **Приклад налаштування мережевого мосту на CentOS/RHEL:** Створіть файл /etc/sysconfig/network-scripts/ifcfg-br0:
DEVICE=br0
TYPE=Bridge
BOOTPROTO=static
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
ONBOOT=yes
Відредагуйте файл /etc/sysconfig/network-scripts/ifcfg-enp0s3 (замініть enp0s3 на ім'я вашого фізичного інтерфейсу):
DEVICE=enp0s3
TYPE=Ethernet
BOOTPROTO=none
ONBOOT=yes
BRIDGE=br0
Перезапустіть мережеву службу:
sudo systemctl restart network
NAT (Network Address Translation) NAT дозволяє віртуальним машинам отримувати доступ до інтернету через IP-адресу хост-системи. Віртуальні машини отримують IP-адреси з приватної підмережі, створеної libvirt (за замовчуванням 192.168.122.0/24). Для використання NAT достатньо підключити віртуальну машину до мережевого мосту virbr0 (за замовчуванням). Libvirt автоматично налаштовує NAT та маршрутизацію. **Перевірка мережевого підключення:** Всередині віртуальної машини виконайте команду:
ping 8.8.8.8
Якщо пінг проходить успішно, значить віртуальна машина має доступ до інтернету. **Порада:** Використовуйте DNSmasq для автоматичного призначення IP-адрес віртуальним машинам у мережі NAT. **Попередження:** Неправильне налаштування маршрутизації може призвести до недоступності віртуальних машин ззовні.

Правильне налаштування мережі – запорука стабільної та безпечної роботи віртуальної інфраструктури.

Ubuntu KVM Documentation
Тепер перейдемо до оптимізації продуктивності KVM.
rocket_launch Швидкий вибір

Шукаєте сервер, який просто працює?

Valebyte VPS — NVMe, підтримка 24/7, розгортання за 60 секунд.

Переглянути тарифи VPS arrow_forward

Оптимізація продуктивності KVM

Оптимізація продуктивності KVM – важливий етап, що дозволяє отримати максимальну віддачу від віртуалізації. Існує кілька способів покращити продуктивність віртуальних машин. Використання драйверів VirtIO VirtIO – це набір драйверів віртуалізації, розроблених для покращення продуктивності віртуальних машин. Вони забезпечують прямий зв'язок між віртуальною машиною та хост-системою, мінімізуючи накладні витрати на емуляцію. Переконайтеся, що при створенні віртуальної машини ви використовуєте драйвери VirtIO для дисків та мережевих карт. У більшості дистрибутивів Linux драйвери VirtIO встановлюються за замовчуванням. Якщо це не так, встановіть їх вручну:
sudo apt install -y virtio-blk virtio-net  # Ubuntu/Debian
sudo yum install -y virtio-win            # CentOS/RHEL (для Windows VM)
Виділення ресурсів CPU та пам'яті Правильне виділення ресурсів CPU та пам'яті відіграє важливу роль у продуктивності віртуальних машин. Виділіть достатню кількість ресурсів для кожної віртуальної машини, але не перестарайтеся, щоб не знизити продуктивність хост-системи. * **CPU:** Виділіть кожній віртуальній машині стільки віртуальних процесорів, скільки їй необхідно для виконання завдань. Почніть з невеликої кількості та збільште, якщо це необхідно. * **Пам'ять:** Виділіть кожній віртуальній машині достатньо оперативної пам'яті, щоб вона могла працювати без використання swap. Уникайте виділення занадто великого обсягу пам'яті, оскільки це може призвести до зниження продуктивності хост-системи. Ви можете змінити кількість виділених ресурсів CPU та пам'яті за допомогою команди virsh edit або в графічному інтерфейсі virt-manager. Використання KVM-clock KVM-clock – це віртуальне джерело часу, розроблене для підвищення точності часу у віртуальних машинах. Він забезпечує більш стабільну та точну синхронізацію часу в порівнянні з емульованими джерелами часу. Щоб увімкнути KVM-clock, додайте наступні рядки в конфігураційний файл віртуальної машини (за допомогою virsh edit):
<clock offset='utc'>
    <timer name='kvmclock' present='yes'/>
</clock>
**При

Масштабуйте KVM без зусиль у хмарі

Потрібна ще більша гнучкість? Наші хмарні інстанси ідеально підходять для масштабування KVM-віртуалізації.

Почати з хмари →
support_agent
Valebyte Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.