baltun
Администратор
- Сообщения
- 12.282
- Реакции
- 3.082
- Баллы
- 1.833
Перед тем как перейти к процессу установки и настройки KVM в CentOS, напишу пару строк о самой технологии. KVM — модуль ядра Linux, который обеспечивает доступ к функциям аппаратной виртуализации на процессорах Intel и AMD. С помощью модуля ядра KVM, виртуальные машины работают как обычный пользовательский процесс.
Для эмуляции I/O аппаратного обеспечения, гипервизоре KVM используется QEMU — это программа для эмуляции аппаратного обеспечения различных платформ, которая может работать и без KVM, но использование аппаратной виртуализации значительно ускоряет работу гостевых систем, поэтому использовать ее без KVM не имеет смылса.
Для управления контейнерами в гипервизоре KVM используется libvirt API. Библиотека libvirt является интерфейсом для управления виртуальными возможностями Linux. Ее используют для работы такие утилиты как: virsh, virtinstall и virt-clone.
Системные требования
Главное условие для работы гипервизора KVM — это наличие у процессора поддержки аппаратной виртуализации. Все остальные технические характеристики зависят только от ваших потребностей. KVM может выделить гостевым системам больше процессоров и памяти, чем реально доступно на сервере. После запуска KVM контейнер используют необходимые ему ресурсы в пределах установленных ограничений. В это время другие виртульные машины используют свободные ресурсы другого контейнера. Оптимальное количество контейнеров, которые могут одновременно работать на одном физическом сервере подбирает опытным путем.
После установки KVM, виртуальные машины полностью резервируют весь выделенный для них объем ОЗУ. Для рационального использования ресурсов и лучшего уплотнения виртуальных машин, на хосте нужно включить модуль Kernel Same-page Merging. Ядро будет сканировать и автоматически освобождать память от идентичных страниц. Такой метод особенно эффективен для систем, на которых запущено множество однородных виртуальных машин.
Для динамического изменения объема оперативной памяти, выделенной виртуальной машине — использование balloon драйвера. Механизм требует поддержки со стороны ядра операционной системы. Для большинства дистрибутивов Linux поддержка virtio-balloon включена по умолчанию. Для Windows необходима ручная установка драйвера. В последних версиях KVM virtio-balloon включен по умолчанию.
Проверка поддержки VMX/SVM
В качестве платформы для настройки виртуализации KVM мы выбрали CentOS 7. Для полноценной работы KVM нужен процессор с поддержкой аппартаной виртуализации. В зависимости от производителя, CPU должен поддерживать Intel VMX или AMD SVM флаги. Для проверки на процессоре Intel и AMD достаточно выполнить команду:
Результат выполнения команды на процессоре с поддержкой Intel VT-x:
Результат выполнения команды на процессоре с поддержкой AMD-V:
Если вы уверены, что процессор поддерживает аппаратную виртуализацию, а команда выдала отрицательный результат. Убедитесь что в BIOS включена технология VT-x или AMD-V. Перегрузите ваш сервер чтобы войти в BIOS, в разделе «Processors Settings» поищите параметры Intel Virtualization Technology или SVM Mode и установите их в положение «Enabled».
Установка KVM в CentOS 7
Для настройки гипервизора KVM в CentOS 7 необходимо установить всего несколько пакетов, которые не входят в базовую установку системы. Используйте команду ниже чтобы выполнить установку недостающих пакетов:
Включаем автозапуск службы libvirtd:
Далее необходимо выполнить перезагрузку системы. Теперь проверьте загрузились ли модули ядра kvm и kvm_intel (только процессоры Intel). Для этого выполните команду:
В случае успеха, у вас результат выполнения команды должен быть аналогичен моему. Для проверки подключения к KVM выполните команду:
Cоздание хранилища
На официальном сайте Red Hat есть
Для надежного хранения данных рекомендуется использовать хотябы RAID 1 массив. Для удобства управления файловой системой я использовал lvm. Сделайте по моему примеру и выполните разметку диска:
Далее я опишу последовательность своих действия для создания хранилища образов гостевых систем на основе каталога.
Выполним команду для создания представления пула хранения данных:
Для примера я использовал каталог /images. Вам нужно указать свой путь к каталогу для хранения файлов образов гостевых систем.
Проверим есть ли в списке добавленный нами пул хранения данных:
Используем команду ниже для создания нового хранилища на основе каталога:
Запускаем хранилище:
Включите автозапуск для нашего хранилища данных:
Убедитесь, что хранилище настроено правильно:
Новое хранилище образов гостевых систем KVM создано и готово к использованию.
Сетевые настройки хоста
После установки KVM, виртуальные машины имеют доступ к виртальной сети хоста с диапазоном адресов 192.168.122.0/24, для доступа к внешней сети используется NAT. Чтобы обеспечить полноценный доступ виртуальных машин к внешней сети, на хосте необходимо создать сетевой интерфейс типа bridge. Сначала убедитесь, что на хосте установлен пакет bridge-utils:
Если вывод предыдущей команды пустой, выполните команду:
Для просмотра списка сетевых интерфейсов выполните команду:
После установки KVM в системе появился новый сетевой интерфейс virbr0. Сетевая карта enp1s0 подключена к моей локальной сети и использует адрес 10.0.1.10. Нужно отметить, что у вашего сетевого интерфейса может быть совсем другое название. Для того чтобы создать сетевой мост, откройте конфигурационный файл внешнего сетевого интерфейса:
Замените его содержимое на следующие параметры:
Название интерфейса и mac-адрес нужно заменить на свои. Теперь создаем сетевой интерфейс типа «bridge»:
Добавьте в него следующие строки:
Значения выделенные красным нужно изменить на свои. Применяем настройки:
Проверяем состояние подключения типа «bridge»:
Включаем транзит пакетов:
Перезапускаем службу libvirtd:
Создание виртуальной машины
Смотрим доступные варианты гостевых операционных систем:
Для создания первой виртуальной машины вводим следующую команду:
* где:
Подключение к виртуальной машине
Для дальнейшей установки операционной системы скачиваем VNC-клиент на компьютер администратора, например, TightVNC и устанавливаем его. На сервере смотрим, на каком порту слушает VNC созданной машины:
в моем случае было:
Это значит, что нужно к 5900 прибавить 0. Если результат команды будет :1 — 5900 + 1 = 5901 и так далее. Открываем порт на брандмауэре:
* в данном примере добавлено сразу 6 tcp-портов от 5900 до 5905.
Запускаем установленный TightVNC Viewer, в открывшемся окне вводим IP-адрес сервера.
Нажимаем Connect. Программа запросит пароль — вводим тот, что указали при создании ВМ, (в данном примере, my_password). Мы подключимся к виртуальной машине, как будто, к ней подключен монитор или удаленная консоль KVM.
Базовые команды управления ВМ
Получить список созданных машин:
Включить виртуальную машину:
* где FirstTest — имя созданной машины.
Выключить:
Управление через веб-интерфейс
Существуют различные веб-интерфейсы для управления гипервизором KVM. В данной инструкции мы рассмотрим oVirt.
Для его установки вводим команды:
После разворачиваем и настраиваем портал:
* после запуска команды система задаст ряд вопросов, на все, кроме ввода пароля, можно ответить по умолчанию (просто нажать Enter).
После окончания установки в браузере вводим
Для эмуляции I/O аппаратного обеспечения, гипервизоре KVM используется QEMU — это программа для эмуляции аппаратного обеспечения различных платформ, которая может работать и без KVM, но использование аппаратной виртуализации значительно ускоряет работу гостевых систем, поэтому использовать ее без KVM не имеет смылса.
Для управления контейнерами в гипервизоре KVM используется libvirt API. Библиотека libvirt является интерфейсом для управления виртуальными возможностями Linux. Ее используют для работы такие утилиты как: virsh, virtinstall и virt-clone.
Системные требования
Главное условие для работы гипервизора KVM — это наличие у процессора поддержки аппаратной виртуализации. Все остальные технические характеристики зависят только от ваших потребностей. KVM может выделить гостевым системам больше процессоров и памяти, чем реально доступно на сервере. После запуска KVM контейнер используют необходимые ему ресурсы в пределах установленных ограничений. В это время другие виртульные машины используют свободные ресурсы другого контейнера. Оптимальное количество контейнеров, которые могут одновременно работать на одном физическом сервере подбирает опытным путем.
После установки KVM, виртуальные машины полностью резервируют весь выделенный для них объем ОЗУ. Для рационального использования ресурсов и лучшего уплотнения виртуальных машин, на хосте нужно включить модуль Kernel Same-page Merging. Ядро будет сканировать и автоматически освобождать память от идентичных страниц. Такой метод особенно эффективен для систем, на которых запущено множество однородных виртуальных машин.
Для динамического изменения объема оперативной памяти, выделенной виртуальной машине — использование balloon драйвера. Механизм требует поддержки со стороны ядра операционной системы. Для большинства дистрибутивов Linux поддержка virtio-balloon включена по умолчанию. Для Windows необходима ручная установка драйвера. В последних версиях KVM virtio-balloon включен по умолчанию.
Проверка поддержки VMX/SVM
В качестве платформы для настройки виртуализации KVM мы выбрали CentOS 7. Для полноценной работы KVM нужен процессор с поддержкой аппартаной виртуализации. В зависимости от производителя, CPU должен поддерживать Intel VMX или AMD SVM флаги. Для проверки на процессоре Intel и AMD достаточно выполнить команду:
Код:
egrep '(vmx|svm)' /proc/cpuinfo
Результат выполнения команды на процессоре с поддержкой Intel VT-x:
Код:
egrep 'vmx' /proc/cpuinfo
flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse
sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology tsc_reliable nonstop_tsc
pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 sse4_2 popcnt lahf_lm tpr_shadow vnmi
flexpriority ept vpid
Результат выполнения команды на процессоре с поддержкой AMD-V:
Код:
egrep 'svm' /proc/cpuinfo
flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht
syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm 3dnowext 3dnow constant_tsc rep_good nonstop_tsc extd_apicid pni monitor
cx16 popcnt lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs skinit wdt
Если вы уверены, что процессор поддерживает аппаратную виртуализацию, а команда выдала отрицательный результат. Убедитесь что в BIOS включена технология VT-x или AMD-V. Перегрузите ваш сервер чтобы войти в BIOS, в разделе «Processors Settings» поищите параметры Intel Virtualization Technology или SVM Mode и установите их в положение «Enabled».
Установка KVM в CentOS 7
Для настройки гипервизора KVM в CentOS 7 необходимо установить всего несколько пакетов, которые не входят в базовую установку системы. Используйте команду ниже чтобы выполнить установку недостающих пакетов:
Код:
yum install qemu-kvm libvirt libvirt-python libguestfs-tools virt-install
Включаем автозапуск службы libvirtd:
Код:
systemctl enable libvirtd && systemctl start libvirtd
Далее необходимо выполнить перезагрузку системы. Теперь проверьте загрузились ли модули ядра kvm и kvm_intel (только процессоры Intel). Для этого выполните команду:
Код:
lsmod | grep kvm
kvm_intel 162153 0
kvm 525259 1 kvm_intel
В случае успеха, у вас результат выполнения команды должен быть аналогичен моему. Для проверки подключения к KVM выполните команду:
Код:
virsh sysinfo
Cоздание хранилища
На официальном сайте Red Hat есть
У вас нет разрешения на просмотр ссылки, пожалуйста Вход или Регистрация
по настройке различных видов хранилиш. Я расскажу о использовании самого простого вида хранилища, когда под виртуальный жесткий диск создается отдельный файл .img, который хранится на локальном диске. По умолчанию образы диска хранятся в каталоге /var/lib/libvirt/images, вы можете выбрать любой другой каталог по своему усмотрению. По каталог хранения образов я выделил отдельный раздел, который смонтирован в системе как /images.Для надежного хранения данных рекомендуется использовать хотябы RAID 1 массив. Для удобства управления файловой системой я использовал lvm. Сделайте по моему примеру и выполните разметку диска:
Код:
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 298.1G 0 disk
└─sda1 8:1 0 298.1G 0 part
├─storage-root 253:0 0 28G 0 lvm /
├─storage-swap 253:1 0 3.7G 0 lvm [SWAP]
└─storage-images 253:2 0 266.4G 0 lvm /images
Далее я опишу последовательность своих действия для создания хранилища образов гостевых систем на основе каталога.
Выполним команду для создания представления пула хранения данных:
Код:
virsh pool-define-as images dir - - - - "/images"
Pool images defined
Для примера я использовал каталог /images. Вам нужно указать свой путь к каталогу для хранения файлов образов гостевых систем.
Проверим есть ли в списке добавленный нами пул хранения данных:
Код:
virsh pool-list --all
Name State Autostart
-------------------------------------------
images inactive no
Используем команду ниже для создания нового хранилища на основе каталога:
Код:
virsh pool-build images
Pool images built
# ls -la /images
total 24
drwx------. 3 root root 4096 Apr 11 09:02 .
dr-xr-xr-x. 19 root root 4096 Apr 11 10:43 ..
drwx------. 2 root root 16384 Apr 11 09:02 lost+found
# virsh pool-list --all
Name State Autostart
-------------------------------------------
images inactive no
Запускаем хранилище:
Код:
virsh pool-start images
Pool images started
# virsh pool-list --all
Name State Autostart
-------------------------------------------
images active no
Включите автозапуск для нашего хранилища данных:
Код:
virsh pool-autostart images
Pool images marked as autostarted
# virsh pool-list --all
Name State Autostart
-------------------------------------------
images active yes
Убедитесь, что хранилище настроено правильно:
Код:
# virsh pool-info images
Name: images
UUID: 144a8729-032d-45d1-be67-a377df3904fa
State: running
Persistent: yes
Autostart: yes
Capacity: 262.11 GiB
Allocation: 60.02 MiB
Available: 262.05 GiB
# ls -la /images
total 24
drwx------. 3 root root 4096 Apr 11 09:02 .
dr-xr-xr-x. 19 root root 4096 Apr 11 10:43 ..
drwx------. 2 root root 16384 Apr 11 09:02 lost+found
Новое хранилище образов гостевых систем KVM создано и готово к использованию.
Сетевые настройки хоста
После установки KVM, виртуальные машины имеют доступ к виртальной сети хоста с диапазоном адресов 192.168.122.0/24, для доступа к внешней сети используется NAT. Чтобы обеспечить полноценный доступ виртуальных машин к внешней сети, на хосте необходимо создать сетевой интерфейс типа bridge. Сначала убедитесь, что на хосте установлен пакет bridge-utils:
Код:
rpm -qa | grep bridge-utils
Если вывод предыдущей команды пустой, выполните команду:
Код:
yum -y install bridge-utils
Для просмотра списка сетевых интерфейсов выполните команду:
Код:
# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
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: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 48:5b:39:ae:6d:7d brd ff:ff:ff:ff:ff:ff
inet 10.0.1.10/26 brd 10.0.1.63 scope global enp1s0
valid_lft forever preferred_lft forever
inet6 fe80::4a5b:39ff:feae:6d7d/64 scope link
valid_lft forever preferred_lft forever
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN
link/ether 00:00:00:00:00:00 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
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN qlen 500
link/ether 52:54:00:40:7c:54 brd ff:ff:ff:ff:ff:ff
После установки KVM в системе появился новый сетевой интерфейс virbr0. Сетевая карта enp1s0 подключена к моей локальной сети и использует адрес 10.0.1.10. Нужно отметить, что у вашего сетевого интерфейса может быть совсем другое название. Для того чтобы создать сетевой мост, откройте конфигурационный файл внешнего сетевого интерфейса:
Код:
nano /etc/sysconfig/network-scripts/ifcfg-enp1s0
Замените его содержимое на следующие параметры:
Код:
DEVICE="enp1s0"
ONBOOT=yes
HWADDR="00:00:00:00:00:00"
BRIDGE=br0
Название интерфейса и mac-адрес нужно заменить на свои. Теперь создаем сетевой интерфейс типа «bridge»:
Код:
nano /etc/sysconfig/network-scripts/ifcfg-br0
Добавьте в него следующие строки:
Код:
DEVICE="br0"
TYPE=BRIDGE
ONBOOT=yes
BOOTPROTO=static
IPADDR="10.0.1.10"
NETMASK="255.255.255.192"
GATEWAY="10.0.1.1"
DNS1="8.8.8.8"
DNS2="8.8.4.4"
Значения выделенные красным нужно изменить на свои. Применяем настройки:
Код:
service network restart
Проверяем состояние подключения типа «bridge»:
Код:
# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.485b39ae6d7d no enp1s0
virbr0 8000.525400b593c3 yes virbr0-nic
Включаем транзит пакетов:
Код:
echo "net.ipv4.ip_forward = 1"|tee /etc/sysctl.d/99-ipforward.conf
sysctl -p /etc/sysctl.d/99-ipforward.conf
Перезапускаем службу libvirtd:
Код:
service libvirtd reload
Создание виртуальной машины
Смотрим доступные варианты гостевых операционных систем:
Код:
virt-install --os-variant list
Для создания первой виртуальной машины вводим следующую команду:
Код:
virt-install -n FirstTest \
--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 — имя создаваемой машины;
- noautoconsole — после создания не подключается автоматически к консоли виртуальной машины;
- network — тип сети (в нашем примере сетевой мост);
- ram — объем оперативной памяти, который будет выделен;
- vcpus — количество виртуальных процессоров;
- disk — виртуальный диск: path — путь до диска; size — его объем;
- cdrom — виртуальный привод с образом системы;
- graphics — параметры подключения к виртуальной машины с помощью графической консоли (в данном примере используем vnc); listen — на какой адресе принимает запросы vnc (в нашем примере на всех); password — пароль для подключения при помощи vnc;
- os-variant — гостевая операционная система (весь список мы получали командой virt-install --os-variant list, в данном примере устанавливаем Reв Hat 7 / CentOS 7).
Код:
virsh autostart FirstTest
Подключение к виртуальной машине
Для дальнейшей установки операционной системы скачиваем VNC-клиент на компьютер администратора, например, TightVNC и устанавливаем его. На сервере смотрим, на каком порту слушает VNC созданной машины:
Код:
virsh vncdisplay FirstTest
в моем случае было:
Код:
:0
Это значит, что нужно к 5900 прибавить 0. Если результат команды будет :1 — 5900 + 1 = 5901 и так далее. Открываем порт на брандмауэре:
Код:
firewall-cmd --permanent --add-port=5900-5905/tcp
* в данном примере добавлено сразу 6 tcp-портов от 5900 до 5905.
Запускаем установленный TightVNC Viewer, в открывшемся окне вводим IP-адрес сервера.
Нажимаем Connect. Программа запросит пароль — вводим тот, что указали при создании ВМ, (в данном примере, my_password). Мы подключимся к виртуальной машине, как будто, к ней подключен монитор или удаленная консоль KVM.
Базовые команды управления ВМ
Получить список созданных машин:
Код:
virsh list --all
Включить виртуальную машину:
Код:
virsh start FirstTest
* где FirstTest — имя созданной машины.
Выключить:
Код:
virsh shutdown FirstTest
Управление через веб-интерфейс
Существуют различные веб-интерфейсы для управления гипервизором KVM. В данной инструкции мы рассмотрим oVirt.
Для его установки вводим команды:
Код:
yum install http://resources.ovirt.org/pub/yum-repo/ovirt-release41.rpm
yum install ovirt-engine
После разворачиваем и настраиваем портал:
Код:
engine-setup
* после запуска команды система задаст ряд вопросов, на все, кроме ввода пароля, можно ответить по умолчанию (просто нажать Enter).
После окончания установки в браузере вводим
У вас нет разрешения на просмотр ссылки, пожалуйста Вход или Регистрация
, где kvm — имя сервера. В открывшемся окне вводим логин admin и пароль, который создали при выполнении команды engine-setup. После успешного входа можно управлять виртуальными машинами через веб-интерфейс. На этом процесс настройки KVM в CentOS 7 закончен.
Последнее редактирование: