Установка и настройка KVM на CentOS 7

Обновлено Обновлено: Опубликовано Опубликовано:

Тематические термины: KVM виртуализация, Linux, CentOS

Подготовка сервера

Проверяем наличие поддержки со стороны процессора:

cat /proc/cpuinfo | egrep "(vmx|svm)"

Если команда ничего не вернет, на сервере отсутствует поддержка виртуализации или она отключена в настройках БИОС. Сам KVM поставить на такой сервер можно, но при попытке ввести команду управления гипервизором мы получим ошибку «WARNING  KVM acceleration not available, using 'qemu'». В таком случае необходимо перезагрузить сервер, войти в БИОС, найти поддержку технологии виртуализации (Intel VT или AMD-V) и включить ее.

Создадим каталоги, в которых будем хранить все, что касается виртуализации (предлагаемые по умолчанию не удобные):

mkdir -p /kvm/{images,iso}

* каталог /kvm/images для виртуальных дисков; /kvm/iso — для iso-образов.

Установка и запуск

Установка выполняется из репозитория следующей командой:

yum install qemu-kvm libvirt virt-install

* где qemu-kvm — сам гипервизор; libvirt — библиотека управления виртуализацией; virt-install — утилита для управления виртуальными машинами.

Разрешаем автозапуск:

systemctl enable libvirtd

Запускаем KVM:

systemctl start libvirtd

Настройка сети

В данной инструкции рассмотрим использование сетевого моста.

Настраивая сетевой мост через удаленное подключение, внимательно проверяйте вводимые данные. В случае ошибки соединение будет прервано.

Устанавливаем пакет для работы с bridge:

yum install bridge-utils

Смотрим список сетевых интерфейсов и их настроек:

ip a

В моем примере были следующие данные:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: enp4s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:16:76:04:26:c6 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.24/24 brd 192.168.1.255 scope global enp4s0f0
       valid_lft forever preferred_lft forever
    inet6 fe80::216:76ff:fe04:26c6/64 scope link
       valid_lft forever preferred_lft forever
3: enp5s5: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
    link/ether 00:16:76:04:26:c7 brd ff:ff:ff:ff:ff:ff
4: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN qlen 1000
    link/ether 52:54:00:cd:86:98 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever
5: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN qlen 1000
    link/ether 52:54:00:cd:86:98 brd ff:ff:ff:ff:ff:ff

* из этого для нас важны enp4s0f0 — реальный сетевой интерфейс с настроенным IP-адресом 192.168.1.24, через который идет подключение сервера к локальной сети (из него мы будем делать мост); 00:16:76:04:26:c6 — mac-адрес реального ethernet адаптера; virbr0 — виртуальный сетевой адаптер.

Редактируем настройки реального адаптера:

vi /etc/sysconfig/network-scripts/ifcfg-enp4s0f0

Приводим его к виду:

ONBOOT=yes
BRIDGE=br0
TYPE=Ethernet
DEVICE=enp4s0f0
BOOTPROTO=none

Создаем интерфейс для сетевого моста:

vi /etc/sysconfig/network-scripts/ifcfg-br0

DEVICE=br0
TYPE=Bridge
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.1.24
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=8.8.8.8
DNS2=77.88.8.8

Перезапускаем сетевую службу:

systemctl restart network

Сетевые настройки должны измениться — в моем случае:

2: enp4s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP qlen 1000
    link/ether 00:16:76:04:26:c6 brd ff:ff:ff:ff:ff:ff
3: enp5s5: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
    link/ether 00:16:76:04:26:c7 brd ff:ff:ff:ff:ff:ff
4: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN qlen 1000
    link/ether 52:54:00:cd:86:98 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever
5: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN qlen 1000
    link/ether 52:54:00:cd:86:98 brd ff:ff:ff:ff:ff:ff
6: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
    link/ether 00:16:76:04:26:c6 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.24/24 brd 192.168.1.255 scope global br0
       valid_lft forever preferred_lft forever
    inet6 fe80::216:76ff:fe04:26c6/64 scope link
       valid_lft forever preferred_lft forever

Настаиваем перенаправления сетевого трафика:

vi /etc/sysctl.d/99-sysctl.conf

net.ipv4.ip_forward=1

Применяем настройки:

sysctl -p /etc/sysctl.d/99-sysctl.conf

Перезапускаем libvirtd:

systemctl restart libvirtd

Создание виртуальной машины

Смотрим доступные варианты гостевых операционных систем:

osinfo-query os

Для создания первой виртуальной машины вводим следующую команду:

virt-install -n FirstTest \
--autostart \
--noautoconsole \
--network=bridge:br0 \
--ram 1024 --arch=x86_64 \
--vcpus=1 --cpu host --check-cpu \
--disk path=/kvm/images/FirstTest-disk1.img,size=16 \
--cdrom /kvm/iso/CentOS-7-x86_64-Minimal-1611.iso \
--graphics vnc,listen=0.0.0.0,password=my_password \
--os-type linux --os-variant=rhel7 --boot cdrom,hd,menu=on

* где:

  • FirstTest — имя создаваемой машины;
  • autostart — виртуальная машина будет автоматически запускаться вместе с сервером KVM;
  • noautoconsole — после создания не подключается автоматически к консоли виртуальной машины;
  • network — тип сети (в нашем примере сетевой мост);
  • ram — объем оперативной памяти, который будет выделен;
  • vcpus — количество виртуальных процессоров;
  • disk — виртуальный диск: path — путь до диска; size — его объем;
  • cdrom — виртуальный привод с образом системы;
  • graphics — параметры подключения к виртуальной машины с помощью графической консоли (в данном примере используем vnc); listen — на какой адресе принимает запросы vnc (в нашем примере на всех); password — пароль для подключения при помощи vnc;
  • os-variant — гостевая операционная система (весь список мы получали командой osinfo-query os, в данном примере устанавливаем Reв Hat 7 / CentOS 7).

Дожидаемся создание виртуальной машины. И переходим к подключению по VNC.

Подключение к виртуальной машине

Для установки операционной системы скачиваем VNC-клиент на компьютер администратора, например, TightVNC и устанавливаем его.

На сервере смотрим, на каком порту слушает VNC созданной машины:

virsh vncdisplay FirstTest

в моем случае было:

:0

Это значит, что нужно к 5900 прибавить 0. Если результат команды будет :1 — 5900 + 1 = 5901 и так далее.

Открываем порт на брандмауэре:

firewall-cmd --permanent --add-port=5900-5905/tcp

firewall-cmd --reload

* в данном примере добавлено сразу 6 tcp-портов от 5900 до 5905.

Запускаем установленный TightVNC Viewer, в открывшемся окне вводим IP-адрес сервера KVM и порт, на котором слушает наша ВМ (в данном примере, 5900):

Пример подключения к виртуальной машине с помощью TightVNC

Нажимаем Connect. Программа запросит пароль — вводим тот, что указали при создании ВМ, (в данном примере, my_password). Мы подключимся к виртуальной машине, как будто, к ней подключен монитор или удаленная консоль KVM.

Устанавливаем операционную систему. Если это будет Windows, то проверяем корректность определения драйверов и, при наличии неустановленных устройств, выполняем установку драйверов KVM для гостевой Windows.

Базовые команды управления ВМ

1. Получить список созданных машин:

virsh list --all

2. Включить / перезагрузить / выключить.

а) включить виртуальную машину можно командой:

virsh start FirstTest

* где FirstTest — имя созданной машины.

б) перезагрузить:

virsh reboot FirstTest

* посылает команду операционной системе на корректную перезагрузку.

в) выключить корректно:

virsh shutdown FirstTest

* посылает команду операционной системе на корректное выключение.

г) выключить принудительно:

virsh destroy FirstTest

* грубо выключает ВМ. Может привести к потере данных. Способ стоит применять при полном зависании виртуалки.

д) приостановить:

virsh suspend FirstTest

Для возобновления работы вводим команду:

virsh resume FirstTest

е) отправить команду всем гостевым операционным системам:

for i in $(virsh list --name --state-shutoff); do virsh start $i; done

for i in $(virsh list --name --state-running); do virsh shutdown $i; done

* первыя команда запустит все ВМ, вторая — отправит команду на выключение.

3. Автоматический запуск.

Разрешаем автостарт для созданной ВМ:

virsh autostart FirstTest

Отключить автозапуск можно командой:

virsh autostart FirstTest --disable

4. Удаление виртуальной машины:

Удаляем виртуальную машину:

virsh undefine FirstTest

Удаляем виртуальный жесткий диск:

rm -f /kvm/images/FirstTest-disk1.img

* где /kvm/images — папка, где хранится диск; FirstTest-disk1.img — имя виртуальног диска для удаленной машины.

5. Редактирование конфигурации виртуальной машины:

Открыть редактор для изменения конфигурации:

virsh edit FirstTest

Также можно менять параметры из командной строки. Приведем несколько примеров для работы с виртуальной машиной FirstTest.

а) изменить количество процессоров:

virsh setvcpus FirstTest 2 --config --maximum

virsh setvcpus FirstTest 2 --config

б) изменить объем оперативной памяти:

virsh setmaxmem FirstTest 2G --config

virsh setmem FirstTest 2G --config

6. Работа со снапшотами

а) Создать снимок виртуальной машины можно командой:

virsh snapshot-create-as --domain FirstTest --name FirstTest_snapshot_2020-03-21

* где FirstTest — название виртуальной машины; FirstTest_snapshot_2020-03-21 — название для снапшота.

б) Список снапшотов можно посмотреть командой:

virsh snapshot-list --domain FirstTest

* данной командой мы просмотрим список всех снапшотов для виртуальной машины FirstTest.

в) Для применения снапшота, сначала мы должны остановить виртуальную машину. Для этого можно либо выполнить выключение в операционной системе или ввести команду:

virsh shutdown FirstTest

После вводим:

virsh snapshot-revert --domain FirstTest --snapshotname FirstTest_snapshot_2020-03-21 --running

* где FirstTest — имя виртуальной машины; FirstTest_snapshot_2020-03-21 — имя созданного снапшота.

г) Удалить снапшот можно так:

virsh snapshot-delete --domain FirstTest --snapshotname FirstTest_snapshot_2020-03-21

7. Клонирование виртуальных машин

Для примера, склонируем виртуальную машину FirstTest и создадим новую SecondTest.

Для начала, мы должны остановить виртуалку:

virsh suspend FirstTest

После можно клонировать:

virt-clone --original FirstTest --name SecondTest --file /kvm/images/SecondTest-disk1.img

* итого, мы склонируем виртуальную машину FirstTest. Новая машина будет иметь название SecondTest, а путь до диска будет /kvm/images/SecondTest-disk1.img.

Восстанавливаем работу FirstTest:

virsh resume FirstTest

Управление дисками

Отдельно рассмотрим процесс работы с виртуальными дисками.

Добавление диска

Создаем файл для нового диска:

qemu-img create -f raw /kvm/images/FirstTest-disk2.img 4G

* в данном примере мы создадим файл формата raw по полному пути /kvm/images/FirstTest-disk2.img размером 4 Гб.

Теперь подключим данный диск к виртуальной машине:

virsh attach-disk --persistent VMname /kvm/images/FirstTest-disk2.img vdb --cache none

* в данном примере мы подключили его к машине VMname в качестве диска vdb.

Меняем размер блочного устройства:

virsh blockresize VMname /kvm/images/FirstTest-disk2.img 4G

* где 4G — новый окончательный размер диска.

Готово. Подключаемся к виртуальной машине и проверяем, что у нас появился новый диск. Например, в Linux можно посмотреть командой:

lsblk

Пример ответа:

NAME                  MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0                    11:0    1 1024M  0 rom  
vda                   252:0    0   24G  0 disk 
-- vda1                252:1    0   24G  0 part 
  -- ubuntu--vg-root   253:0    0   23G  0 lvm  /
  -- ubuntu--vg-swap_1 253:1    0  980M  0 lvm  [SWAP]
vdb                   252:16   0    4G  0 disk 

Увеличение диска

Получаем список дисков для виртуальной машины:

virsh domblklist FirstTest

Останавливаем виртуальную машину:

virsh shutdown FirstTest

Увеличиваем размер диска:

qemu-img resize /kvm/images/FirstTest-disk1.img +100G

* данной командой мы расширим дисковое пространство виртуального диска /kvm/images/FirstTest-disk1.img на 100 Гигабайт.

Запускаем виртуальную машину:

virsh start FirstTest

Меняем размер блочного устройства:

virsh blockresize FirstTest /kvm/images/FirstTest-disk1.img 200G

* где 200G — новый окончательный размер диска.

Получаем информацию о виртуальном диске:

qemu-img info /kvm/images/FirstTest-disk1.img

После необходимо увеличить диск внутри операционной системы.

Управление через веб-интерфейс

Существуют различные веб-интерфейсы для управления гипервизором KVM. В данной инструкции мы рассмотрим oVirt.

Для его установки вводим команды:

yum install http://resources.ovirt.org/pub/yum-repo/ovirt-release41.rpm

yum install ovirt-engine

После разворачиваем и настраиваем портал:

engine-setup

* после запуска команды система задаст ряд вопросов, на все, кроме ввода пароля, можно ответить по умолчанию (просто нажать Enter).

После окончания установки в браузере вводим https://kvm/ovirt-engine/sso/, где kvm — имя сервера. В открывшемся окне вводим логин admin и пароль, который создали при выполнении команды engine-setup. После успешного входа можно управлять виртуальными машинами через веб-интерфейс.

Обновление базы операционный систем

Ранее мы использовали команду:

osinfo-query os

... для получения вариантов возможных операционных систем. Со временем данные список устаревает и его необходимо обновлять. Для этого переходим на страницу releases.pagure.org/libosinfo и копируем ссылку на самую последнюю базу:

Копируем ссылку на свежую версию базы osinfo

Используя скопированную ссылку, загружаем базу на сервер:

wget https://releases.pagure.org/libosinfo/osinfo-db-20210621.tar.xz

* в моем примере это версия 20210621.

Теперь импортируем изменения в систему:

osinfo-db-import --system osinfo-db-20210621.tar.xz

Готово.

# CentOS # Виртуализация # Серверы
Дмитрий Моск — частный мастер
Была ли полезна вам эта инструкция?

Да            Нет