KVM в CentOS 7

Для доступа к виртуальным машинам, которые предлагаются через KVM, вы используете libvirtd. Libvirtd - это процесс, который находится между уровнем виртуализации и приложением, которое администратор использует для доступа к виртуальным машинам. 

Параметры управления виртуальной машиной настраиваются через файл /etc/libvirt/libvirtd.conf.

Если у вас возникают проблемы с доступом к виртуальным машинам, libvirtd является основным подозреваемым, и вы должны по крайней мере убедиться, что он работает, с помощью команды systemctl status -l libvirtd.

Несколько служебных программ могут быть использованы поверх libvirtd. Диспетчер виртуальных машин (предлагается через двоичный файл virt-manager) - это широко используемый графический интерфейс пользователя (GUI) для управления KVM. Кроме того, команда virsh доступна в качестве интерфейса командной строки для управления виртуальными машинами KVM.

Установка пакетов KVM

Наиболее удобный способ сделать это - использовать yum groupinstall "Virtualization Host". Эта команда устанавливает все необходимое для настройки среды хоста виртуализации. Выполните команду сейчас.

Еще одним важным фактором является доступность хранилища. Когда вы устанавливаете виртуальную машину, она должна создать виртуальный диск. Этот виртуальный диск по умолчанию хранится в файле образа в каталоге /var/lib/libvirt/images. Убедитесь, что у вас достаточно свободного дискового пространства в разделе, где вы хотите установить виртуальные машины, прежде чем начинать установку.

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

1. Войдите под рутом. Введите lsmod | grep kvm. Этой командой вы ищете модуль kvm и kvm_intel (kvm_amd, если вы используете платформу AMD). Если эти модули в данный момент не загружены, введите modprobe -r kvm для их загрузки.

2. Введите systemctl status libvirtd. Эта команда проверяет, запущена ли служба libvirtd. Если это так, то всё отлично. Если нет, введите systemctl start libvirtd, чтобы запустить службу.

3. Введите df -h, чтобы проверить объем доступного дискового пространства.

Немного о KVM Host Networking

После установки KVM на сервере сеть также существенно меняется. На хосте создан виртуальный мост virbr0. Этот виртуальный мост работает как встроенный коммутатор и используется для подключения одного или нескольких физических сетевых интерфейсов хоста к различным виртуальным машинам.

Во время связи по сети виртуальная машина отправляет пакеты через свой внутренний (виртуальный) сетевой интерфейс, который обычно имеет имя eth0. На уровне гипервизора (хоста, где установлен KVM) эта сеть представлена интерфейсом vnet. Первая виртуальная машина, которая запускается, получает интерфейс vnet0, вторая машина, которая запускается, получает vnet1 и так далее.

Эти интерфейсы vnet в свою очередь подключаются к виртуальному мосту. Сам виртуальный мост подключен к физическому сетевому интерфейсу вашего хоста. Чтобы получить обзор конфигурации виртуальной сети, вы можете использовать команду brctl show. Эта команда показывает имя моста, уникальный идентификатор, который был назначен мосту, индикатор, который показывает, был ли включен протокол STP (Spanning Tree Protocol), и все интерфейсы, которые подключены к мосту.

Обратите внимание, что в CentOS 7 есть два разных способа управления сетевыми мостами. При установке CentOS в качестве хоста KVM автоматически создается мостовой интерфейс с именем virbr0. Кроме того, вы можете настроить мост вручную, используя утилиты мостового соединения, которые доступны в утилитах NetworkManager nmtui и nmcli. Чтобы упростить настройку конфигурации виртуальной сети, рекомендуется установить мост при настройке сервера в качестве хоста KVM.

Создание моста (br0)

Чтобы NIC на хосте работал в режиме моста, нужно установить пакет bridge-utils:
yum install -y bridge-utils

Первым делом узнаем название физического интерфейса. В моём случае это em4:
[root@localhost ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    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: em1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
    link/ether a4:ba:db:33:b9:f3 brd ff:ff:ff:ff:ff:ff
3: em2: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
    link/ether a4:ba:db:33:b9:f5 brd ff:ff:ff:ff:ff:ff
4: em3: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
    link/ether a4:ba:db:33:b9:f7 brd ff:ff:ff:ff:ff:ff
5: em4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master br0 state UP group default qlen 1000
    link/ether a4:ba:db:33:b9:f9 brd ff:ff:ff:ff:ff:ff
6: p1p1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
    link/ether 00:10:18:6d:89:c4 brd ff:ff:ff:ff:ff:ff
7: p1p2: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
    link/ether 00:10:18:6d:89:c6 brd ff:ff:ff:ff:ff:ff
9: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 52:54:00:d9:b2:41 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
10: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN group default qlen 1000
    link/ether 52:54:00:d9:b2:41 brd ff:ff:ff:ff:ff:ff
2017: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether a4:ba:db:33:b9:f9 brd ff:ff:ff:ff:ff:ff
    inet 172.16.100.149/24 brd 172.16.100.255 scope global noprefixroute br0
       valid_lft forever preferred_lft forever
    inet6 fe80::fc54:ff:fee8:1d6d/64 scope link
       valid_lft forever preferred_lft forever

Затем открываем файл физического интерфейса:
vi /etc/sysconfig/network-scripts/ifcfg-em4

Удаляем всё содержимое и вписываем туда:
ONBOOT=yes
BRIDGE=br0
TYPE=Ethernet
DEVICE=em4
BOOTPROTO=none

Теперь создаем интерфейс br0:
vi /etc/sysconfig/network-scripts/ifcfg-br0

Вписываем туда это содержимое:
DEVICE=br0
TYPE=Bridge
ONBOOT=yes
BOOTPROTO=static
IPADDR=172.16.100.149
NETMASK=255.255.255.0
GATEWAY=172.16.100.10
DNS1=8.8.8.8
DNS2=77.88.8.8

Вместо моей адресации впишите ту, которая была на физическом интерфейсе, в моей случае это em4.

Перезапускаем сеть:
systemctl restart network

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

Теперь появился сетевой интерфейс br0 и он работает в режиме моста. Соответственно ему теперь назначена IP-адресация, которая была на em4:
[root@localhost ~]# ip a | grep br0
5: em4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master br0 state UP group default qlen 1000
9: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
10: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN group default qlen 1000
2017: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    inet 172.16.100.149/24 brd 172.16.100.255 scope global noprefixroute br0
[root@localhost ~]#

С настройкой моста закончили, теперь установим дополнительные пакеты для работы с KVM, если вы хотите управлять виртуальными машинами из Windows.

Установка дополнительных пакетов

Установим virt-manager и дополнительные пакеты, благодаря которым можно управлять виртуальными машинами в графической среде прямо из ssh-сессии:
yum install -y virt-manager xorg-x11-xauth liberation-sans-fonts qemu-kvm

Далее:

Установим SSH-клиент PuTTy с оф. сайта:
https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html

Установим VcXsrv (порт сервера X11 для Windows):
http://sourceforge.net/projects/vcxsrv/files/latest/download?source=typ_redirect

Возможно потребуется установить Visual C++ Redistributable for Visual Studio 2015 (64-bit):
http://download.microsoft.com/download/9/3/F/93FCF1E7-E6A4-478B-96E7-D4B285925B00/vc_redist.x64.exe

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

Настройка дополнительных параметров SSH на хосте KVM

Открываем файл конфигурации sshd:
vi /etc/ssh/sshd_config

Найдите строки ниже и приведите их в этот вид:
X11FORWARDING YES
X11DISPLAYOFFSET 10
X11USELOCALHOST YES

Перезапустите sshd:
systemctl restart sshd

Настройка PuTTy и VcXsrv 

Запускаем PuTTy, вводим IP-адрес хоста KVM и имя сессии. После этого слева раскрываем SSH, выбираем X11 и ставим галочку напротив "Enable X11 forwarding" как на скриншоте ниже:


И наконец настроим VcXsrv

После установки жмём и запускаем "Пуск - VcXsrv - VcXsrv.exe", после чего в трее появится значок "X"





Последовательность запуска virt-manager следующая:

  1. Сначала запускаете VcXsrv
  2. Затем запускаете PuTTy и подключаетесь к хосту по SSH
  3. После входа в консоль просто введите virt-manager & (вместе со знаком &, чтобы увидеть, запущен ли до этого процесс virt-manager) и откроется окно Virtual Machine Manager

Поздравляю! Теперь вы можете создавать и управлять виртуальными машинами  sunglasses

Установка и управление виртуальными машинами

1. Введите virt-manager &, чтобы запустить диспетчер виртуальных машин (Virtual Machine Manager).

2. В диспетчере виртуальных машин нажмите Create a New Virtual Machine. Откроется окно шага 1 из 5 мастера создания новой виртуальной машины.


3. На шаге 2 из 5 мастера необходимо указать источник, где находится установочный диск, а также версию операционной системы и операционной системы, которые вы хотите установить.


4. Далее необходимо указать объем оперативной памяти, которую вы хотите выделить для виртуальной машины, а также количество ядер ЦП. Конечно, вам нужно иметь как минимум ресурсы, которые вы выделяете на хост-машине. Для минимальной установки используйте 512 МБ ОЗУ и 1 ЦП.


5. Теперь введите свойства виртуального диска, который вы хотите создать. Для базовой установки рекомендуется минимум 2 ГБ.


6. На данный момент вы ввели все свойства, которые будут использоваться для виртуальной машины.
Теперь вы можете нажать Finish, чтобы записать настройки виртуальной машины на диск и начать процедуру установки.

В этой процедуре вы определили настройки виртуального оборудования, которые будет использовать ваша виртуальная машина. Теперь можно начать установку.
Сами настройки виртуальной машины были записаны в файл конфигурации XML, который хранится в каталоге /etc/libvirt/qemu.
Поскольку настройки виртуального оборудования легко доступны в файле конфигурации, у вас может возникнуть желание изменить их также из файла. Это не то, что вы должны делать. Чтобы изменить настройки виртуального оборудования, вы можете использовать свойства виртуальной машины в диспетчере виртуальных машин или использовать команду virsh edit <vmname>. Это связано с тем, что доступ к настройкам виртуальной машины упрощен через libvirtd, потому что после того как вы внесли изменения, происходит проверка синтаксиса и если он будет неправильный, то вы не сможете сохранить конфигурацию, а прямой доступ к конфигурации может испортить вашу виртуальную машину.

Использование виртуальных машин KVM

После установки виртуальной машины KVM существует несколько способов доступа к ней, включая следующие:
  • SSH
  • Через диспетчер виртуальных машин (команда virt-manager &)
  • Через GNOME Boxes
  • Использование virt-viewer
  • Через сторонние утилиты.
Из перечисленных методов доступ к виртуальным машинам через диспетчер виртуальных машин является наиболее простым способом их использования. Диспетчер виртуальных машин показывает обзор всех доступных виртуальных машин, и вам просто нужно получить доступ к окну виртуальных машин, чтобы использовать их.


Утилита virt-viewer похожа на Virtual Machine Manager. Он был разработан для предоставления пользователям доступа к виртуальной машине без предоставления возможности изменения настроек виртуальной машины.

Утилита GNOME Boxes является дополнением к интерфейсу GNOME 3, который используется на серверах, на которых установлен графический интерфейс. Он был разработан как утилита для конечных пользователей, которая упрощает использование и доступ к виртуальным машинам.

Доступ к виртуальным машинам из консоли хоста

1. Войдите в виртуальную машину и убедитесь, что у вас есть права root.

2. Введите grubby --update-kernel=ALL --args="console=ttyS0". Использование команды grubby позволяет изменить конфигурацию загрузчика GRUB2 без необходимости просматривать файлы конфигурации GRUB2.
В качестве альтернативы вы можете отредактировать файл /etc/default/grub и добавить аргумент console=ttyS0 в строку, которая указывает используемые аргументы ядра. Если вы изменяете файл grub.conf, используйте grub2-mkconfig -o /boot/grub2/grub.cfg, чтобы записать изменения в основной файл конфигурации загрузчика.

3. Перезагрузите виртуальную машину, используя команду reboot.

4. На хосте KVM используйте команду virsh console your_server.example.com для подключения к виртуальной машине. Теперь вы получите доступ к консоли VM, как показано ниже. Нажмите Ctrl +], чтобы выйти из сеанса консоли virsh. Обратите внимание, что имя виртуальной машины, к которой вы подключаетесь, должно совпадать с именем виртуальной машины, как вы можете увидеть это с помощью команды virsh list.

[root@lab ~]# virsh console sander-vm1
Connected to domain sander-vm1
Escape character is ^]
CentOS Linux 7 (Core)
Kernel 3.10.0-123.el7.x86_64 on an x86_64
server2 login:

Управление свойствами виртуальной машины в графической среде

Как администратору, вам иногда придется менять свойства виртуальной машины. Самый простой способ сделать это - через диспетчер виртуальных машин. Для доступа к свойствам в диспетчере виртуальных машин сначала необходимо открыть виртуальную машину. ВМ не должна быть запущена. Открыв его, щелкните значок, который выглядит как лампа, чтобы открыть интерфейс, показанный на скриншоте.


Как видите, у вас есть много вариантов, доступных в интерфейсе свойств Virtual Machine Manager. Многие из них говорят сами за себя. Вот некоторые из наиболее распространенных задач настройки, к которым вы можете получить доступ через этот интерфейс:
  • Чтобы добавить новое оборудование, нажмите кнопку Add Hardware в левой нижней части окна. Это открывает интерфейс, из которого вы можете выбрать аппаратное устройство для добавления, а также его дополнительные свойства.
  • Выберите параметр Performance, чтобы отобразить графики производительности использования виртуальных машин.
  • Выберите параметр Memory, чтобы увеличить или уменьшить размер памяти, выделенной для виртуальной машины.
  • Нажмите Boot Options, чтобы включить автозапуск. Это запустит виртуальную машину при загрузке хоста.
  • Также в интерфейсе параметров загрузки вы найдете порядок загрузки устройств (Boot Device Order). Выберите этот параметр, чтобы указать порядок, в котором устройства в вашей виртуальной машине будут использоваться для загрузки.

Управление виртуальными машинами из консоли

CentOS предлагает универсальный интерфейс командной строки для управления виртуальными машинами непосредственно из командной строки. Вы можете запустить команду virsh с множеством различных аргументов для выполнения определенных задач. Вы также можете просто набрать virsh, чтобы открыть интерфейс командной строки, из которого вы можете сразу ввести определенные команды. Таблица показывает некоторые из наиболее распространенных команд virsh.

Команда

Описание

 list

Подключается к виртуальной машине напрямую с консоли хост-сервера KVM
 list --all 

Показывает все виртуальные машины, включая машины, которые в данный момент не активны
 help

Предоставляет список всех параметров, которые можно использовать с командой virsh
 shutdown <vmname> 

Отключает ВМ правильно
 destroy <vmname>

Останавливает виртуальную машину, как при отключении питания на реальном сервере
 edit <vmname> 

Открывает интерфейс vi, который позволяет редактировать файл конфигурации XML, принадлежащий определенной виртуальной машине
 console <vmname> 

Подключается к виртуальной машине напрямую с консоли хост-сервера KVM
 start <vmname> 

Запуск ВМ
 reboot <vmname> 

Перезагрузка ВМ

При использовании команд virsh вам часто приходится указывать имя виртуальной машины. Альтернативой является использование идентификатора виртуальной машины. Чтобы получить обзор идентификаторов виртуальных машин, используйте virsh list. Вы увидите идентификаторы в списке для всех виртуальных машин, которые в данный момент активны
[root@lab ~]# virsh list
Id Name                  State
-----------------------------------------------
3 dan-vm1               running
4 dan-vm2              running
6 sander-vm1           running
7 sander-vm2          running
8 sander-ipa            running
10 vm1-rhel6-svv     running
12 vm2-rhel6-svv     running
16 sander-server1     running
18 dan-ipa                running

Узнать IP-адреса гостевой виртуальной машины KVM

Получить список сетей
[root@kvm network-scripts]# virsh net-list
 Name                 State      Autostart     Persistent
----------------------------------------------------------
 default              active     yes           yes

Посмотреть адреса, выданные машинам этой сетью
[root@kvm network-scripts]# virsh net-dhcp-leases --network default
 Expiry Time          MAC address        Protocol  IP address                Hostname        Client ID or DUID
-------------------------------------------------------------------------------------------------------------------
 2020-02-20 10:28:20  52:54:00:d2:7d:a4  ipv4      192.168.122.169/24        -               -

Мониторинг активности ВМ с помощью top

В Linux вы можете использовать утилиту top для мониторинга активности процессов. Виртуальная машина похожа на любой другой процесс с точки зрения хоста, на котором она работает. Это означает, что виртуальные машины используют ресурсы, как и любые другие процессы. В утилите top для отображения такой активности используется интересный параметр; параметр st в строке загрузки ЦП указывает процент времени ЦП, которое было «украдено» у гипервизора виртуальными машинами. Сама виртуальная машина на хосте гипервизора отображается как один отдельный процесс сверху.

Таким образом, использование top на хосте позволяет увидеть, насколько занята виртуальная машина связана с другими процессами, запущенными на этом компьютере. Вы не можете видеть, что происходит внутри виртуальной машины, используя top с хоста, но вам придется делать это, используя соответствующие инструменты внутри виртуальной машины. На скриншоте показан вывод команды top хоста KVM, на котором запущены разные виртуальные машины. Каждая из виртуальных машин отображается как процесс qemu-kvm.

Итоги

В этой статье вы узнали, как работать с виртуальными машинами в Linux. Вы узнали о виртуализации и о том, как настроить хост-сервер KVM.
Вы также узнали, как установить виртуальную машину и как ей управлять, используя графическую утилиту, такую как Virtual Machine Manager или интерфейс командной строки virsh.

Комментариев 2

  1. Офлайн
    Илья
    Илья 17 января 2020 09:13
    + +2 -
    Большое спасибо! Все получилось.
    Изначально делал по книге Red Hat RHCSA-RHCE 7.
    Но там не описано как открывать virt-manager из по putty и  windows.

  2. Офлайн
    yatakoi 17 января 2020 09:14
    + +1 -
    Цитата: Илья
    Большое спасибо! Все получилось.
    Изначально делал по книге Red Hat RHCSA-RHCE 7.
    Но там не описано как открывать virt-manager из по putty и  windows.



    Не за что. Рад, что помог )

Добавить комментарий