Проверка поддержки гипервизора

Проверяем, что сервер поддерживает технологии виртуализации:

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

В ответ должны получить что-то наподобие:

flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid dca sse4_1 sse4_2 popcnt aes lahf_lm epb tpr_shadow vnmi flexpriority ept vpid dtherm ida arat

В противном случае, заходим в БИОС, находим опцию для включения технологии виртуализации (имеет разные названия, например, Intel Virtualization Technology или Virtualization) и включаем ее — задаем значение Enable .

Также проверить совместимость можно командой:

* если команда вернет ошибку «kvm-ok command not found» , установите соответствующий пакет: apt-get install cpu-checker .

Если видим:

INFO: /dev/kvm exists
KVM acceleration can be used

значит поддержка со стороны аппаратной части есть.

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

Для нашего удобства, создадим каталог, в котором будем хранить данные для KVM:

mkdir -p /kvm/{vhdd,iso}

* будет создано два каталога: /kvm/vhdd (для виртуальных жестких дисков) и /kvm/iso (для iso-образов).

Настроим время:

\cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime

* данная команда задает зону в соответствии с московским временем.

ntpdate ru.pool.ntp.org

* выполняем синхронизацию с сервером времени.

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

Устанавливаем KVM и необходимые утилиты управления.

а) Ubuntu до версии 18.10

apt-get install qemu-kvm libvirt-bin virtinst libosinfo-bin

б) Ubuntu после 18.10:

apt-get install qemu-kvm libvirt-daemon-system libvirt-bin virtinst libosinfo-bin

* где qemu-kvm — гипервизор; libvirt-bin — библиотека управления гипервизором; virtinst — утилита управления виртуальными машинами; libosinfo-bin — утилита для просмотра списка вариантов операционных систем, которые могут быть в качестве гостевых.

Настроим автоматический запуск сервиса:

systemctl enable libvirtd

Запустим libvirtd:

systemctl start libvirtd

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

Виртуальные машины могут работать за NAT (в качестве которого выступает сервер KVM) или получать IP-адреса из локальной сети — для этого необходимо настроить сетевой мост. Мы настроим последний.

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

Устанавливаем bridge-utils:

apt-get install bridge-utils

а) настройка сети в старых версиях Ubuntu (/etc/network/interfaces).

Открываем конфигурационный файл для настройки сетевых интерфейсов:

vi /etc/network/interfaces

И приведем его к виду:

#iface eth0 inet static
# address 192.168.1.24
# netmask 255.255.255.0
# gateway 192.168.1.1
# dns-nameservers 192.168.1.1 192.168.1.2

Auto br0
iface br0 inet static
address 192.168.1.24
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 192.168.1.1 192.168.1.2
bridge_ports eth0
bridge_fd 9
bridge_hello 2
bridge_maxage 12
bridge_stp off

* где все, что закомментировано — старые настройки моей сети; br0 — название интерфейса создаваемого моста; eth0 — существующий сетевой интерфейс, через который будет работать мост.

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

systemctl restart networking

б) настройка сети в новых версиях Ubuntu (netplan).

vi /etc/netplan/01-netcfg.yaml

* в зависимости от версии системы, конфигурационной файл yaml может иметь другое название.

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

network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: false
dhcp6: false
wakeonlan: true

Bridges:
br0:
macaddress: 2c:6d:45:c3:55:a7
interfaces:
- eth0
addresses:
- 192.168.1.24/24
gateway4: 192.168.1.1
mtu: 1500
nameservers:
addresses:
- 192.168.1.1
- 192.168.1.2
parameters:
stp: true
forward-delay: 4
dhcp4: false
dhcp6: false

* в данном примере мы создаем виртуальный бридж-интерфейс br0 ; в качестве физического интерфейса используем eth0 .

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

Настаиваем перенаправления сетевого трафика (чтобы виртуальные машины с сетевым интерфейсом NAT могли выходить в интернет):

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

Добавляем строку:

net.ipv4.ip_forward=1

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

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

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

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

virt-install -n VM1 \
--autostart \
--noautoconsole \
--network=bridge:br0 \
--ram 2048 --arch=x86_64 \
--vcpus=2 --cpu host --check-cpu \
--disk path=/kvm/vhdd/VM1-disk1.img,size=16 \
--cdrom /kvm/iso/ubuntu-18.04.3-server-amd64.iso \
--graphics vnc,listen=0.0.0.0,password=vnc_password \
--os-type linux --os-variant=ubuntu18.04 --boot cdrom,hd,menu=on

  • VM1 — имя создаваемой машины;
  • autostart — разрешить виртуальной машине автоматически запускаться вместе с сервером KVM;
  • noautoconsole — не подключается к консоли виртуальной машины;
  • network — тип сети. В данном примере мы создаем виртуальную машину с интерфейсом типа «сетевой мост». Для создания внутреннего интерфейса с типом NAT вводим --network=default,model=virtio ;
  • ram — объем оперативной памяти;
  • vcpus — количество виртуальных процессоров;
  • disk — виртуальный диск: path — путь до диска; size — его объем;
  • cdrom — виртуальный привод с образом системы;
  • graphics — параметры подключения к виртуальной машины с помощью графической консоли (в данном примере используем vnc); listen — на какой адресе принимает запросы vnc (в нашем примере на всех); password — пароль для подключения при помощи vnc;
  • os-variant — гостевая операционная система (весь список мы получали командой osinfo-query os , в данном примере устанавливаем Ubuntu 18.04).

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

На компьютер, с которого планируем работать с виртуальными машинами, скачиваем VNC-клиент, например, TightVNC и устанавливаем его.

На сервере вводим:

virsh vncdisplay VM1

команда покажет, на каком порту работает VNC для машины VM1. У меня было:

* :1 значит, что нужно к 5900 прибавить 1 — 5900 + 1 = 5901.

Запускаем TightVNC Viewer, который мы установили и вводим данные для подключения:

Кликаем по Connect . На запрос пароля вводим тот, что указали при создании ВМ, (vnc_password ). Мы подключимся к виртуальной машине удаленной консолью.

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

И находим строку:



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

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

Примеры команд, которые могут пригодиться при работе с виртуальными машинами.

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

virsh list --all

2. Включить виртуальную машину:

virsh start VMname

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

3. Выключить виртуальную машину:

ubuntu-vm-builder — пакет, разработанный компанией Canonical для упрощения создания новых виртуальных машин.

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

apt-get install ubuntu-vm-builder

Эту заметку я пишу для того, чтобы продемонстрировать пошаговую установку и настройку виртуальной машины в Linux на базе KVM. Ранее я уже писал про виртуализацию, где использовал замечательный .

Сейчас передо мной встал вопрос аренды хорошего сервера с большим объёмом оперативной памяти и объёмным жестким диском. Но запускать проекты прямо на хост-машине не хочется, поэтому буду разграничивать их по отдельным небольшим виртуальным серверам с ОС Linux или docker-контейнерам (о них расскажу в другой статье).

Все современные облачные хостинги работают по такому же принципу, т.е. хостер на хорошем железе поднимает кучу виртуальных серверов, которые мы привыкли называть VPS/VDS, и раздаёт их пользователям, либо автоматизирует этот процесс (привет, DigitalOcean).

KVM (kernel-based virtual machine) это программное обеспечения для Linux, использующее аппаратные средства x86-совместимых процессоров для работы с технологией виртуализации Intel VT/AMD SVM.

Установка KVM

Все махинации по созданию виртуальной машины я буду проводить на ОС Ubuntu 16.04.1 LTS. Чтобы проверить поддерживает ли ваш процессов аппаратную виртуализацию на базе Intel VT/AMD SVM, выполняем:

Grep -E "(vmx|svm)" /proc/cpuinfo

Если терминал непустой, то значит всё в порядке и KVM можно устанавливать. Ubuntu официально поддерживает только гипервизор KVM (входит в состав ядра Linux) и советует использовать библиотеку libvirt в качестве инструмента по управлению им, что мы и будем делать дальше.

Проверить поддержку аппаратной виртуализации в Ubuntu также можно через команду:

В случае успеха, вы увидите что-то вроде этого:

INFO: /dev/kvm exists KVM acceleration can be used

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

Sudo apt-get install qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils

Если у вас есть доступ к графической оболочке системы, то можно установить GUI менеджер libvirt:

Sudo apt-get install virt-manager

Пользоваться virt-manager достаточно просто (не сложнее VirtualBox), поэтому в этой заметке речь пойдёт про консольный вариант установки и настройки виртуального сервера.

Установка и настройка виртуального сервера

В консольном варианте установки, настройки и управлением системой, незаменимым инструментом является утилита virsh (надстройка над библиотекой libvirt). У неё большое количество опций и параметров, подробное описание можно получить так:

Man virsh

или вызвать стандартный "help":

Virsh help

Я всегда придерживаюсь следующих правил при работе с виртуальными серверами:

  1. Храню iso образы ОС в каталоге /var/lib/libvirt/boot
  2. Храню образы виртуальных машин в каталоге /var/lib/libvirt/images
  3. Явно задаю каждой новой виртуальной машине свой статичный IP адрес через DHCP сервер гипервизора.

Приступим к установке первой виртуалки (64-битной серверной убунте 16.04 LTS):

Cd /var/lib/libvirt/boot sudo wget http://releases.ubuntu.com/16.04/ubuntu-16.04.1-desktop-amd64.iso

Скачав образ запускаем установку:

Sudo virt-install \ --virt-type=kvm \ --name ubuntu1604\ --ram 1024 \ --vcpus=1 \ --os-variant=ubuntu16.04 \ --hvm \ --cdrom=/var/lib/libvirt/boot/ubuntu-16.04.1-server-amd64.iso \ --network network=default,model=virtio \ --graphics vnc \ --disk path=/var/lib/libvirt/images/ubuntu1604.img,size=20,bus=virtio

Переводя все эти параметры на "человеческий язык", то получается, что мы создаём виртуальную машину с ОС Ubuntu 16.04, 1024 МБ ОЗУ, 1 процессором, стандартной сетевой картой (виртуальная машина будет ходить в интернет как-будто из-за NAT), 20 ГБ HDD.

Стоит обратить внимание на параметр --os-variant , он указывает гипервизору под какую именно ОС следует адаптировать настройки.
Список доступных вариантов ОС можно получить, выполнив команду:

Osinfo-query os

Если такой утилиты нет в вашей системе, то устанавливаем:

Sudo apt-get install libosinfo-bin

После запуска установки, в консоли появится вот такая надпись:

Domain installation still in progress. You can reconnect to the console to complete the installation process.

Это нормальная ситуация, продолжать установку мы будем через VNC.
Смотрим на каком порту он был поднят у нашей виртуалки (в соседнем терминале, например):

Virsh dumpxml ubuntu1604 ... ...

Порт 5900, на локальном адресе 127.0.0.1. Чтобы подключиться к VNC, необходимо использовать Port Forwarding через ssh. Перед тем как это сделать, убедитесь, что tcp forwarding разрешён у демона ssh. Для этого идём в настройки sshd:

Cat /etc/ssh/sshd_config | grep AllowTcpForwarding

Если ничего не нашлось или вы видите:

AllowTcpForwarding no

То правим конфиг на

AllowTcpForwarding yes

и перезагружаем sshd.

Настройка Port forwarding

Выполняем команду на локальной машине:

Ssh -fN -l login -L 127.0.0.1:5900:localhost:5900 server_ip

Здесь мы настроили ssh port forwarding с локального порта 5900 на серверный порт 5900. Теперь уже можно подключиться к VNC, используя любой VNC-клиент. Я предпочитаю UltraVNC из-за простоты и удобства.

После успешного подключения, на экране отобразится стандартное окно приветствия начала установки Ubuntu:

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

Ifconfig

Запоминаем и идём на хост машину. Вытаскиваем mac-адрес "сетевой" карты виртуалки:

Virsh dumpxml ubuntu1604 | grep "mac address"

Запоминаем наш mac адрес:

Редактируем сетевые настройки гипервизора:

Sudo virsh net-edit default

Ищем DHCP, и добавляем вот это:

Должно получиться что-то вроде этого:

Для того, чтобы настройки вступили в силу, необходимо перезагрузить DHCP сервер гипервизора:

Sudo virsh net-destroy default sudo virsh net-start default sudo service libvirt-bin restart

После этого перегружаем виртуальную машину, теперь она всегда будет иметь заданный ей IP адрес - 192.168.122.131.

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

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

Ssh 192.168.122.131

Машина готова к бою.

Virsh: список команд

Чтобы посмотреть запущенные виртуальные хосты (все доступные можно получить добавив --all):

Sudo virsh list

Перезагрузить хост можно:

Sudo virsh reboot $VM_NAME

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

Sudo virsh stop $VM_NAME

Выполнить halt:

Sudo virsh destroy $VM_NAME

Sudo virsh start $VM_NAME

Отключение:

Sudo virsh shutdown $VM_NAME

Добавить в автозапуск:

Sudo virsh autostart $VM_NAME

Очень часто требуется склонировать систему, чтобы в будущем использовать её как каркас для других виртуальных ОС, для этого используют утилиту virt-clone.

Virt-clone --help

Она клонирует существующую виртуалку и изменяет host-sensitive данные, например, mac address. Пароли, файлы и прочая user-specific информация в клоне остаётся прежней. Если на клонируемой виртуалке IP адрес был прописан вручную, то могут возникнуть проблемы с доступом по SSH на клон из-за конфликта (2 хоста с одинаковым IP).

Помимо установки виртуалки через VNC, также возможен вариант с X11Forwarding через утилиту virt-manager. В Windows, например, для этого можно использовать Xming и PuTTY.

В жизни сисадмина однажды настает момент, когда приходится с нуля разворачивать инфраструктуру предприятия либо переделывать уже имеющуюся, перешедшую по наследству. В этой статье я расскажу о том, как правильно развернуть гипервизор на основе Linux KVM и libvirt c поддержкой LVM (логических групп).

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

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

Системные администраторы, работающие вплотную с виртуализацией на предприятии, мастера и виртуозы своего дела, поделились на два лагеря. Одни - приверженцы высокотехнологичной, но безумно дорогой VMware для Windows. Другие - любители open source и бесплатных решений на основе Linux VM. Можно долго перечислять преимущества VMware, но здесь мы остановимся на виртуализации, основанной на Linux VM.

Технологии виртуализации и требования к железу

Сейчас есть две популярные технологии виртуализации: Intel VT и AMD-V. В Intel VT (от Intel Virtualization Technology) реализована виртуализация режима реальной адресации; соответствующая аппаратная виртуализация ввода-вывода называется VT-d. Часто эта технология обозначается аббревиатурой VMX (Virtual Machine eXtension). В AMD создали свои расширения виртуализации и первоначально называли их AMD Secure Virtual Machine (SVM). Когда технология добралась до рынка, она стала называться AMD Virtualization (сокращенно AMD-V).

Перед тем как вводить аппаратное обеспечение в эксплуатацию, убедись, что оборудование поддерживает одну из этих двух технологий (посмотреть можно в характеристиках на сайте производителя). Если поддержка виртуализации имеется, ее необходимо включить в BIOS перед развертыванием гипервизора.

Среди других требований гипервизоров - поддержка аппаратного RAID (1, 5, 10), которая повышает отказоустойчивость гипервизора при выходе жестких дисков из строя. Если поддержки аппаратного RAID нет, то можно использовать программный на крайний случай. Но RAID - это мастхэв!

Решение, описанное в этой статье, несет на себе три виртуальные машины и успешно работает на минимальных требованиях: Core 2 Quad Q6600 / 8 Гбайт DDR2 PC6400 / 2 × 250 Гбайт HDD SATA (хардверный RAID 1).

Установка и настройка гипервизора

Я покажу, как настраивать гипервизор, на примере Debian Linux 9.6.0 - Х64-86. Ты можешь использовать любой дистрибутив Linux, который тебе по душе.

Когда ты определишься с выбором железа и его наконец-то привезут, придет время ставить гипервизор. При установке ОС все делаем, как обычно, за исключением разметки дисков. Неопытные администраторы часто выбирают опцию «Автоматически разбить все дисковое пространство без использования LVM». Тогда все данные будут записаны на один том, что нехорошо по нескольким причинам. Во-первых, если жесткий диск выйдет из строя, ты потеряешь все данные. Во-вторых, изменение файловой системы доставит массу хлопот.

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

Logical Volume Manager

Менеджер логических томов (LVM) - это подсистема, доступная в Linux и OS/2, построенная поверх Device Mapper. Ее задача - представление разных областей с одного жесткого диска или областей с нескольких жестких дисков в виде одного логического тома. LVM создает из физических томов (PV - Phisical Volumes) логическую группу томов (VG - Volumes Group). Она, в свою очередь, состоит из логических томов (LV - Logical Volume).

Сейчас во всех дистрибутивах Linux с ядром 2.6 и выше есть поддержка LVM2. Для использования LVM2 на ОС с ядром 2.4 надо устанавливать патч.

После того как система обнаружила жесткие накопители, запустится менеджер разбивки жестких дисков. Выбираем пункт Guided - use entire disk and set up LVM.


Теперь выбираем диск, на который будет установлена наша группа томов.



Система предложит варианты разметки носителя. Выбираем «Записать все файлы на один раздел» и идем дальше.




После сохранения изменений мы получим одну логическую группу и два тома в ней. Первый - это корневой раздел, а второй - это файл подкачки. Тут многие зададут вопрос: а почему не выбрать разметку вручную и не создать LVM самому?

Я отвечу просто: при создании логической группы VG загрузочный раздел boot не пишется в VG, а создается отдельным разделом с файловой системой ext2. Если этого не учесть, то загрузочный том окажется в логической группе. Это обречет тебя на мучения и страдания при восстановлении загрузочного тома. Именно поэтому загрузочный раздел отправляется на том без LVM.



Переходим к конфигурации логической группы для гипервизора. Выбираем пункт «Конфигурация менеджера логических томов».



Система оповестит о том, что все изменения будут записаны на диск. Соглашаемся.



Создадим новую группу - к примеру, назовем ее vg_sata .



INFO

В серверах используются носители SATA, SSD, SAS, SCSI, NVMe. Хорошим тоном при создании логической группы будет указывать не имя хоста, а тип носителей, которые используются в группе. Советую логическую группу назвать так: vg_sata , vg_ssd , vg_nvme и так далее. Это поможет понять, из каких носителей построена логическая группа.




Создаем наш первый логический том. Это будет том для корневого раздела операционной системы. Выбираем пункт «Создать логический том».



Выбираем группу для нового логического тома. У нас она всего одна.



Присваиваем имя логическому тому. Правильнее всего при назначении имени будет использовать префикс в виде названия логической группы - например, vg_sata_root , vg_ssd_root и так далее.



Указываем объем для нового логического тома. Советую выделить под корень 10 Гбайт, но можно и меньше, благо логический том всегда можно расширить.



По аналогии с примером выше создаем следующие логические тома:

  • vg_sata_home - 20 Гбайт под каталоги пользователей;
  • vg_sata_opt - 10 Гбайт для установки прикладного ПО;
  • vg_sata_var - 10 Гбайт для часто меняющихся данных, к примеру логов системы и других программ;
  • vg_sata_tmp - 5 Гбайт для временных данных, если объем временных данных велик, можно сделать и больше. В нашем примере этот раздел не создавался за ненадобностью;
  • vg_sata_swap - равен объему оперативной памяти. Это раздел для свопа, и создаем мы его для подстраховки - на случай, если закончится оперативная память на гипервизоре.

После создания всех томов завершаем работу менеджера.



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



Создаем одноименный раздел под каждый логический том.



Сохраняем и записываем проделанные изменения.



После сохранения изменений разметки диска начнут ставиться базовые компоненты системы, а затем будет предложено выбрать и установить дополнительные компоненты системы. Из всех компонентов нам понадобится ssh-server и стандартные системные утилиты.



После установки будет сформирован и записан на диск загрузчик GRUB. Устанавливаем его на тот физический диск, где сохранен загрузочный раздел, то есть /dev/sda .




Теперь ждем, пока закончится запись загрузчика на диск, и после оповещения перезагружаем гипервизор.





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

$ sudo apt-get install -y sudo htop screen net-tools dnsutils bind9utils sysstat telnet traceroute tcpdump wget curl gcc rsync

Настраиваем SSH по вкусу. Советую сразу сделать авторизацию по ключам. Перезапускаем и проверяем работоспособность службы.

$ sudo nano /etc/ssh/sshd_config $ sudo systemctl restart sshd; sudo systemctl status sshd

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

$ sudo pvscan $ sudo lvs

Устанавливаем компоненты виртуализации и утилиты для создания сетевого моста на интерфейсе гипервизора.

$ sudo apt-get update; apt-get upgrade -y $ sudo apt install qemu-kvm libvirt-bin libvirt-dev libvirt-daemon-system libvirt-clients virtinst bridge-utils

После установки настраиваем сетевой мост на гипервизоре. Комментируем настройки сетевого интерфейса и задаем новые:

$ sudo nano /etc/network/interfaces

Содержимое будет примерно таким:

Auto br0 iface br0 inet static address 192.168.1.61 netmask 255.255.255.192 gateway 192.168.1.1 broadcast 192.168.0.61 dns-nameserver 127.0.0.1 dns-search сайт bridge_ports enp2s0 bridge_stp off bridge_waitport 0 bridge_fd 0

Добавляем нашего пользователя, под которым будем работать с гипервизором, в группы libvirt и kvm (для RHEL группа называется qemu).

$ sudo gpasswd -a iryzhevtsev kvm $ sudo gpasswd -a iryzhevtsev libvirt

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

$ sudo virsh pool-list $ sudo virsh pool-define-as vg_sata logical --target /dev/vg_sata $ sudo virsh pool-start vg_sata; sudo virsh pool-autostart vg_sata $ sudo virsh pool-list

INFO

Для нормальной работы группы LVM с QEMU-KVM требуется сначала активировать логическую группу через консоль virsh .

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

$ sudo wget https://mirror.yandex.ru/debian-cd/9.5.0/amd64/iso-cd/debian-9.5.0-amd64-netinst.iso $ sudo mv debian-9.5.0-amd64-netinst.iso /var/lib/libvirt/images/; ls -al /var/lib/libvirt/images/

Чтобы подключаться к виртуальным машинам по VNC, отредактируем файл /etc/libvirt/libvirtd.conf:

$ sudo grep "listen_addr = " /etc/libvirt/libvirtd.conf

Раскомментируем и изменим строчку listen_addr = "0.0.0.0" . Сохраняем файл, перезагружаем гипервизор и проверяем, все ли службы запустились и работают.

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «сайт», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», увеличит личную накопительную скидку и позволит накапливать профессиональный рейтинг Xakep Score!

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

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

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

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

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

1: lo: 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

inet6::1/128 scope host
valid_lft forever preferred_lft forever
2: enp4s0f0: mtu 1500 qdisc pfifo_fast state UP qlen 1000

inet 192.168.1.24/24 brd 192.168.1.255 scope global enp4s0f0
valid_lft forever preferred_lft forever

valid_lft forever preferred_lft forever
3: enp5s5:

4: virbr0:


valid_lft forever preferred_lft forever
5: virbr0-nic:
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: 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: 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: 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: 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: 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

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

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

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

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 — гостевая операционная система (весь список мы получали командой osinfo-query os , в данном примере устанавливаем Reв Hat 7 / CentOS 7).

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

virsh autostart FirstTest

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

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

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

virsh vncdisplay FirstTest

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

Это значит, что нужно к 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):

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

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

Ранее я уже писал об установке Qemu-KVM в Debian . Но, на мой взгляд, информация получилась неполной. Плюс я не учёл некоторые нюансы. Потому предлагаю вашему вниманию обновлённую статью по установке виртуальной машины Qemu-KVM. Старую статью, естественно, удалю.

Думаю, объяснять что такое виртуальная машина , не стоит. Вы наверняка это знаете (раз читаете эту статью). Если нет - . Мы же остановимся непосредсвенно на сабже. Qemu-KVM - это проект по объединению двух замечтальнейшийх (на мой взгляд) технологий полной виртуализации. Qemu - это своего рода "эмулятор компьютера", который поддерживает великое множество аппаратных архитектур. В нём можно запустить практически любую ОС для любого устройства (к примеру я запускал старые версии Mac OS X , который для PowerPC ). Недостатком Qemu является его медлительность вследствии отсутствия аппратного ускорения. И тут на помощь приходит другой проект - KVM . Или Kernel Virtual Machine. KVM - это технология ядра Linux, которая позволяет обеспечить аппаратное ускорение при полной виртуализации. Недостатком KVM является поддержка только архитектуры x86

Почему Qemu-KVM? Для Linux это самый рекомендуемый проект виртуализации. Он работает быстрее, чем VirtualBox и VMware Player (по моим тестам), KVM - это родная для Линукса технология. Плюс, если вы обладатель хорошего игрового компьютера с двумя видеокартами, вы можете установить в Qemu-KVM Windows , пробросить в неё одну из видеокарт, и забыть о перезагрузке в другую ОС. Захотели поиграть - запустили виртуалку с виндой и играете. Производительность будет 95% от производительности установленной на "железо" винды. Но это просто шикарно, на мой взгляд. Об этом я напишу отдельную статью. Будет интересно:)

А теперь опишу план наших действий. Во первых, установку я буду проводить на примере Debian 8.2 GNOME 64 bit , хотя, особых различий в других графических окружениях не будет. Во-вторых - я буду описывать работу с KVM только в графическом режиме (мы ведь не на сервер будет его ставить). Поэтому никаких терминалов, скриптов и так далее, как обычно поступают в случае серверной виртуализации. В третьих - советую вам дополнительно прочитать документацию к Qemu и KVM (ссылки дам в конце статьи). Вам это очень пригодится, если вы хотите по-максимуму использовать весь потенциал этой связки. Ну чтож, план наших действий ясен. Теперь этапы действий:

  • установка qemu-kvm;
  • установка графического менеджера и дополнительных утилит;
  • настройка сетевого моста;
  • создание хранилища для виртуальных машин;
  • установка гостевой системы.
Для начала проверим, поддерживает ли ваш компьютер аппаратную виртуализацию. Для этого в терминале выполняем команду:

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

В выводе команды должны присутствовать либо vmx , либо svm . Если их нет - проверьте включена ли виртуализация в BIOS (ищите пункты Intel VT-i или аналогичный для AMD ). Если ничего нет - значит не повезло.

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

sudo apt install qemu-kvm bridge-utils libvirt-bin virt-manager

Добавляем себя в группу libvirt:

sudo adduser $USER libvirt

Теперь настроим сеть. Для того чтобы все виртауальные машины могли выходить в сеть и связываться друг с другом, нужно создать сетевой мост и виртаульные сетевые карты для каждой виртуалки (tap-устройства ). Так как виртуальные машины мы будем устанавливать из графического интерфейса, то создавать вручную tap"ы не нужно. Virt Manager сделает это за нас при каждом запуске. Нам нужно только настроить мост. Для начала включим маршрутизацию в ядре:

sudo nano /etc/sysctl.conf

Ищем строку net.ipv4_forward=0 и меняем её значение на 1 . Сохраняем и:

sudo sysctl -p

Далее я буду предполагать следующее: 1) на вашем компьютере есть одна сетевая карта, получающая ip-адрес от роутера. 2) вы выходите в интернет через 3G-модем, и сетевая карта у вас свободна. Этот вариант предполагает побольше ручной работы, но он проверен неоднократно (у самого так на одной из машин). Итак, открываем файл interfaces:

sudo nano /etc/network/interfaces

Его содержимое по умолчанию такое:



auto lo
iface lo inet loopback

Меняем его содержимое. Для первого варианта:

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet manual

auto br0
iface br0 inet static
address 192.168.0.2
gateway 192.168.0.1
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
bridge_ports eth0
bridge_stp off
bridge_maxwait 0
bridge_fd 0

Для второго варианта:

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

auto ppp0
iface ppp0 inet wvdial

auto eth0
iface eth0 inet manual

auto br0
iface br0 inet static
address 192.168.0.2
gateway 192.168.0.1
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
bridge_ports eth0
bridge_stp off
bridge_maxwait 0
bridge_fd 0
up route del default br0

Примечание: если вам не нужно автоматическое подключение Интернета через модем после старта системы, уберите из конфига строки auto ppp0 и
iface ppp0 inet wvdial . В противном случае, убедитесь что при запуске системы, модем вставлен в USB-порт.

Сохраняем. Теперь для варианта с модемом, нужно установить программу дозвона wvdial :

sudo apt install wvdial

Правим конфиг (обратите внимание: в качестве примера используется 3G-модем Beeline . Примеры конфигов для других модемов вы без труда найдёте в интернете):

sudo nano /etc/wvdial.conf


Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Init3 = AT+CGDCONT=1,"IP","home.beeline.ru"
Stupid Mode = 1
ISDN = 0
Modem Type = USB Modem
New PPPD = yes
Phone = *99#
Modem = /dev/ttyACM0
Username = beeline
Password = beeline
Baud = 9600
Country = Russia
Auto Reconnect = on
Auto DNS = off
Idle Seconds = 0

Сохраняем. Теперь модем будет включаться сразу после загрузки системы. Строка up route del default br0 удаляет маршрут по умолчанию через мост. Если этого не сделать, вы не сможете соединиться с Интернетом, так как трафик будет идти по мосту, а не через 3G-модем.

Последним этапом нам нужно сказать фаерволлу , чтобы он пропускал в сеть трафик от наших виртуалок и обратно. Для этого можно пойти двумя путями: написать скрипт с несколькими правилами для iptables , который будет запускаться вместе с системой, или ввести эти правила вручную и сохранить их. Я воспользуюсь первым вариантом. Для второго вам нужно будет установить пакет iptables-persistent и просто поочерёдно вводить правила (с использованием sudo). Итак. создаём скрипт (в любом текстовом редакторе). Вставляем туда следующее содержимое:

#!/bin/sh

# Определяем выходной интерфейс для которого будет применяться замена адресов (NAT)
iptables -v -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

# Пересылаем все пакеты, пришедшие на модем из глобальной сети (0.0.0.0/0) в локальную сеть (192.168.0.0/24)
iptables -v -A FORWARD -i ppp0 -o br0 -s 0.0.0.0/0 -d 192.168.0.0/24 -j ACCEPT

# Пересылаем все пакеты, пришедшие из локальной сети (192.168.0.0/24) в глобальную (0.0.0.0/0)
iptables -v -A FORWARD -i br0 -o ppp0 -s 192.168.0.0/24 -d 0.0.0.0/0 -j ACCEPT

Сохраняем его как gateway.sh и даём права на выполнение (либо в свойствах файла, либо в терминале командой chmod +x gateway.sh ). Теперь вы можете либо запускать его вручную, после того как загрузилась система, либо добавить в автозагрузку. Для этого переместите скрипт в ~/.config/autostart (в файловом менеджере включите показ скрытых файлов, и вы увидите каталог .config в домашней директории).

Теперь всё готово для установки виртуальной машины. Из меню приложений запускаем Virt Manager (менеджер виртуальных машин):

Кликаем правой кнопкой на строке localhost и выбираем Детали . Переходим на вкладку Хранилище . Нам нужно указать каталог (или раздел диска/диск) для хранения виртуальных машин.

В левом нижнем углу жмём на плюсик (Добавить пул ), указывам тип хранилища и путь к нему.

На вкладке Сетевые интерфейсы , можете проверить, всё ли работает.

Теперь нажимаем Файл - New virtual machine . Указываем путь к образу диска, тип виртуальной машины. Далее указываем количество оперативной памяти для неё и количество ядер процессора. Далее указываем наше хранилище и нажимаем Новый том . Указываем название, тип оставляем qcow2 , и размер. Это будет виртуальный жёсткий диск. Если планируете устанавливать систему с графической оболочкой и кучей программ, дайте места побольше (гигов 50). На последней вкладке ставим галочку на Изменить настройки перед запуском , проверяем что в качестве сетевого устройства выбран наш мост, пишем любое название для виртуалки и жмём Завершить . Перед вами откроется окно параметров этой виртуальной машины.





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

Далее на вкладку Сеть (следующая), и также указываем vitio . На вкладке Дисплей укажите Spice , а на вкладке Видео - QXL . Обычно эта связка обеспечивает максимальную производительность отрисовки графики, но, если хотите, можете поэксперементировать. Учтите, что для гостевых систем Windows, требуется отдельная установка QXL-драйвера (в самой Windows).


Теперь когда всё готово, в левом верхнем углу жмём Начать установку . И ставим систему как обычно, за одним исключением: как только установщик начнёт автоматически настраивать сеть, нажмите Отмена , и выберите Настроить сеть вручную . Укажите для виртуалки желаемый IP-адрес (в нашем случае 192.168.0.3 ), маску подсети (255.255.255.0 ), шлюз (шлюзом будет адрес хоста, тоесть 192.168.0.2 ) и DNS-сервер (здесь просто укажите Гугловский 8.8.8.8 ). И всё. Дальше ничего делать не нужно. Ставьте систему и настраивайте. В общем-то, всё. Описанные действия - это способ заменить, скажем, VirtualBox на более лучшую альтернативу. Прочитав документацию, вы поймёте, насколько широки возможности Qemu-KVM. Я намеренно не стал описывать здесь дополнительные консольные параметры и методы запуска виртуальных машин через терминал, так как это далеко не всегда нужно на домашней машине. Об этом я напишу отдельную статью, по настройке домашнего многофункционального сервера (который также сможет выступать в качестве сервера виртуальных машин). Для тех, кто по каким-то причинам не понял написанное, или остались непонятные моменты - предлагаю посмотреть ролик, в котором я уже не опишу, а покажу, как всё это добро устанавливать и настраивать. Если у вас есть предложения или дополнения к статье - пишите в комментариях.



Эта статья также доступна на следующих языках: Тайский

  • Next

    Огромное Вам СПАСИБО за очень полезную информацию в статье. Очень понятно все изложено. Чувствуется, что проделана большая работа по анализу работы магазина eBay

    • Спасибо вам и другим постоянным читателям моего блога. Без вас у меня не было бы достаточной мотивации, чтобы посвящать много времени ведению этого сайта. У меня мозги так устроены: люблю копнуть вглубь, систематизировать разрозненные данные, пробовать то, что раньше до меня никто не делал, либо не смотрел под таким углом зрения. Жаль, что только нашим соотечественникам из-за кризиса в России отнюдь не до шоппинга на eBay. Покупают на Алиэкспрессе из Китая, так как там в разы дешевле товары (часто в ущерб качеству). Но онлайн-аукционы eBay, Amazon, ETSY легко дадут китайцам фору по ассортименту брендовых вещей, винтажных вещей, ручной работы и разных этнических товаров.

      • Next

        В ваших статьях ценно именно ваше личное отношение и анализ темы. Вы этот блог не бросайте, я сюда часто заглядываю. Нас таких много должно быть. Мне на эл. почту пришло недавно предложение о том, что научат торговать на Амазоне и eBay. И я вспомнила про ваши подробные статьи об этих торг. площ. Перечитала все заново и сделала вывод, что курсы- это лохотрон. Сама на eBay еще ничего не покупала. Я не из России , а из Казахстана (г. Алматы). Но нам тоже лишних трат пока не надо. Желаю вам удачи и берегите себя в азиатских краях.

  • Еще приятно, что попытки eBay по руссификации интерфейса для пользователей из России и стран СНГ, начали приносить плоды. Ведь подавляющая часть граждан стран бывшего СССР не сильна познаниями иностранных языков. Английский язык знают не более 5% населения. Среди молодежи — побольше. Поэтому хотя бы интерфейс на русском языке — это большая помощь для онлайн-шоппинга на этой торговой площадке. Ебей не пошел по пути китайского собрата Алиэкспресс, где совершается машинный (очень корявый и непонятный, местами вызывающий смех) перевод описания товаров. Надеюсь, что на более продвинутом этапе развития искусственного интеллекта станет реальностью качественный машинный перевод с любого языка на любой за считанные доли секунды. Пока имеем вот что (профиль одного из продавцов на ебей с русским интерфейсом, но англоязычным описанием):
    https://uploads.disquscdn.com/images/7a52c9a89108b922159a4fad35de0ab0bee0c8804b9731f56d8a1dc659655d60.png