35 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Записки программиста

Записки программиста

Мне лично проще всего думать о KVM (Kernel-based Virtual Machine), как о таком уровне абстракции над технологиями хардверной виртуализации Intel VT-x и AMD-V. Берем машину с процессором, поддерживающим одну из этих технологий, ставим на эту машину Linux, в Linux’е устанавливаем KVM, в результате получаем возможность создавать виртуалки. Так примерно и работают облачные хостинги, например, Amazon Web Services. Наряду с KVM иногда также используется и Xen, но обсуждение этой технологии уже выходит за рамки данного поста. В отличие от технологий контейнерной виртуализации, например, того же Docker, KVM позволяет запускать в качестве гостевой системы любую ОС, но при этом имеет и большие накладные расходы на виртуализацию.

Примечание: Описанные ниже действия были проверены мной на Ubuntu Linux 14.04, но по идее будут во многом справедливы как для других версий Ubuntu, так и других дистрибутивов Linux. Все должно работать как на десктопе, так и на сервере, доступ к которому осуществляется по SSH.

Установка KVM

Проверяем, поддерживается ли Intel VT-x или AMD-V нашим процессором:

Если что-то нагреполось, значит поддерживается, и можно действовать дальше.

Что где принято хранить:

  • /var/lib/libvirt/boot/ — ISO-образы для установки гостевых систем;
  • /var/lib/libvirt/images/ — образы жестких дисков гостевых систем;
  • /var/log/libvirt/ — тут следует искать все логи;
  • /etc/libvirt/ — каталог с файлами конфигурации;

Теперь, когда KVM установлен, создадим нашу первую виртуалку.

Создание первой виртуалки

В качестве гостевой системы я выбрал FreeBSD. Качаем ISO-образ системы:

Управление виртуальными машинами в большинстве случаев производится при помощи утилиты virsh:

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

Смотрим список доступных сетей:

Просмотр информации о конкретной сети (с именем default):

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

Итак, теперь создаем виртуальную машину с 1 CPU, 1 Гб RAM и 32 Гб места на диске, подключенную к сети default:

Вы можете увидеть:

WARNING Unable to connect to graphical console: virt-viewer not
installed. Please install the ‘virt-viewer’ package.

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

Это нормально, так и должно быть.

Затем смотрим свойства виртуалки в формате XML:

Тут приводится наиболее полная информация. В том числе есть, к примеру, и MAC-адрес, который понадобятся нам далее. Пока что находим информацию о VNC. В моем случае:

С помощью любимого клиента (я лично пользуюсь Rammina) заходим по VNC, при необходимости используя SSH port forwarding. Попадаем прямо в инстялятор FreeBSD. Дальше все как обычно — Next, Next, Next, получаем установленную систему.

Основные команды

Давайте теперь рассмотрим основные команды для работы с KVM.

Получение списка всех виртуалок:

Получение информации о конкретной виртуалке:

Жестко прибить виртуалку (несмотря на название, это не удаление):

Запуск virsh в диалоговом режиме (все команды в диалоговом режиме — как описано выше):

Редактирование свойств виртуалки в XML, в том числе здесь можно изменить ограничение на количество памяти и тд:

Важно! Комментарии из отредактированного XML, к сожалению, удаляются.

Когда виртуалка остановлена, диск тоже можно ресайзить:

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

Резервное копирование и восстановление производятся довольно просто. Достаточно сохранить куда-то вывод dumpxml, а также образ диска, а потом восстановить их. На YouTube удалось найти видео с демонстрацией этого процесса, все и вправду несложно.

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

Интересный вопрос — как определить, какой IP-адрес получила виртуалка после загрузки? В KVM это делается хитро. Я в итоге написал такой скрипт на Python:

# virt-ip.py script
# (c) 2016 Aleksander Alekseev
# http://eax.me/

import sys
import re
import os
import subprocess
from xml . etree import ElementTree

def eprint ( str ) :
print ( str , file = sys . stderr )

if len ( sys . argv ) 2 :
eprint ( «USAGE: » + sys . argv [ 0 ] + » » )
eprint ( «Example: » + sys . argv [ 0 ] + » freebsd10″ )
sys . exit ( 1 )

if os . geteuid ( ) != 0 :
eprint ( «ERROR: you shold be root» )
eprint ( «Hint: run `sudo » + sys . argv [ 0 ] + » . `» ) ;
sys . exit ( 1 )

Читать еще:  Определяем какая играет музыка в видеоролике

if subprocess . call ( «which arping 2>&1 >/dev/null» , shell = True ) != 0 :
eprint ( «ERROR: arping not found» )
eprint ( «Hint: run `sudo apt-get install arping`» )
sys . exit ( 1 )

domain = sys . argv [ 1 ]

if not re . match ( «^[a-zA-Z0-9_-]*$» , domain ) :
eprint ( «ERROR: invalid characters in domain name» )
sys . exit ( 1 )

domout = subprocess . check_output ( «virsh dumpxml » +domain+ » || true» ,
shell = True )
domout = domout. decode ( ‘utf-8’ ) . strip ( )

if domout == «» :
# error message already printed by dumpxml
sys . exit ( 1 )

doc = ElementTree. fromstring ( domout )

# 1. list all network interfaces
# 2. run `arping` on every interface in parallel
# 3. grep replies
cmd = «(ifconfig | cut -d ‘ ‘ -f 1 | grep -E ‘.’ | » +
«xargs -P0 -I IFACE arping -i IFACE -c 1 <> 2>&1 | » +
«grep ‘bytes from’) || true»

for child in doc. iter ( ) :
if child. tag == «mac» :
macaddr = child. attrib [ «address» ]
macout = subprocess . check_output ( cmd . format ( macaddr ) ,
shell = True )
print ( macout. decode ( «utf-8» ) )

Скрипт работает как с default сетью, так и с bridged сетью, настройку которой мы рассмотрим далее. Однако на практике куда удобнее настроить KVM так, чтобы он всегда назначал гостевым системам одни и те же IP-адреса. Для этого правим настройки сети:

… примерно таким образом:

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

По умолчанию виртуальные машины могут ходить в интернет, а также к ним можно приконнектится из хост-системы. В общем и целом все выглядит так, словно гостевые системы находятся за NAT. На практике же часто бывает куда удобнее иметь bridged сеть. Как она настраивается на хост-системе ранее мы уже рассматривали в заметках Туториал по контейнеризации при помощи LXC и Контейнерная виртуализация при помощи OpenVZ.

После окончания настройки правим конфиг гостевой системы. Находим в нем что-то вроде:

… и заменяем на что-то вроде:

Перезагружаем гостевую систему и проверяем, что она получила IP по DHCP от роутера. Если же вы хотите, чтобы гостевая система имела статический IP-адрес, это настраивается как обычно внутри самой гостевой системы.

Программа virt-manager

Вас также может заинтересовать программа virt-manager:

Так выглядит ее главное окно:

Как видите, virt-manager представляет собой не только GUI для виртуалок, запущенных локально. С его помощью можно управлять виртуальными машинами, работающими и на других хостах, а также смотреть на красивые графички в реальном времени. Я лично нахожу особенно удобным в virt-manager то, что не нужно искать по конфигам, на каком порту крутится VNC конкретной гостевой системы. Просто находишь виртуалку в списке, делаешь двойной клик, и получаешь доступ к монитору.

Еще при помощи virt-manager очень удобно делать вещи, которые иначе потребовали бы трудоемкого редактирования XML-файлов и в некоторых случаях выполнения дополнительных команд. Например, переименование виртуальных машин, настройку CPU affinity и подобные вещи. Кстати, использование CPU affinity существенно снижает эффект шумных соседей и влияние виртуальных машин на хост-систему. По возможности используйте его всегда.

Если вы решите использовать KVM в качестве замены VirtualBox, примите во внимание, что хардверную виртуализацию они между собой поделить не смогут. Чтобы KVM заработал у вас на десктопе, вам не только придется остановить все виртуалки в VirtualBox и Vagrant, но и перезагрузить систему. Я лично нахожу KVM намного удобнее VirtualBox, как минимум, потому что он не требует выполнять команду sudo / sbin / rcvboxdrv setup после каждого обновления ядра, адекватно работает c Unity, и вообще позволяет спрятать все окошки.

Заключение

По традиции, немного ссылок по теме:

В целом, KVM произвел на меня исключительно положительное впечатление. Теперь я не понимаю, зачем все это время я мучился с Vagrant и VirtualBox, когда все уже есть в KVM и сделано куда лучше. Ну, почти. Кое-какие косяки все же имеются. Так, например, в htop гостевой системы вы можете видеть, что утилизируете CPU на 30%, хотя на хост-системе вы утилизируете все 100%. Однако мой опыт работы с виртуальными машинами свидетельствует о том, что такого рода проблемы и прочие шумные соседи возникают всегда, и еще один минорный баг в общем-то не делает в этом плане все сильно хуже.

А используете ли вы KVM и если да, то для чего?

Установка KVM в CentOS

При настройке KVM на сервере, нужно начать с проверки вашего процессора. Нужно узнать, поддерживает ли аппаратную виртуализацию CPU, установленный на вашем сервере. Из консоли сервера, выполните команду:

# cat /proc/cpuinfo | egrep «(vmx|svm)»

Читать еще:  ТОП-12 Лучших Проекторов для Дома

Если ваш процессор поддерживает технологию VT-x, у вас должен быть примерно такой вывод:

Если же команда ничего не выдала, но ваш процессор точно поддерживает виртуализацию, проверьте, вохможно данная опция отключена в BIOS сервера. Ищите параметры “Intel Virtualization Technology” или “SVM MODE”.

На моем сервере поддержка данной технологии включена, поэтому можно приступать к установке необходимых компонентов в CentOS через пакетный менеджер yum/dnf:

# yum install libvirt libvirt-python libguestfs-tools qemu-kvm virt-install –y

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

На сервер будет установлено большое количество пакетов, следите, чтобы у вас не возникло ошибок в процессе установки.

Теперь нужно добавить сервис libvirtd в автозагрузку и запустить его:

# systemctl enable libvirtd
# systemctl start libvirtd

Проверьте, загрузились ли модули ядра kvm_intel и kvm:

[root@localhost /]# lsmod | grep kvm

Если у вас ничего не выводится, перезагрузите сервер и проверьте повторно.

Как создавать виртуальные машины на Linux с помощью KVM

Виртуальная машина на основе ядра

В этом руководстве мы расскажем, как установить KVM и как его использовать, чтобы создать виртуальные машины с такими дистрибутивами как RHEL, CentOS 7 и Fedora 21, основанными на RedHat.

Что такое KVM?

KVM (Kernel-based Virtual Machine) – это решение для полной виртуализации для Linux на оборудовании Intel 64 и AMD 64, которое включено в основное ядро Linux, начиная с версии 2.6.20. Аппаратные средства работают быстро и стабильно даже при больших нагрузках.

Функции KVM

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

Гипервизор KVM поддерживает следующие функции:

  • Over-committing – с помощью этой функции можно обеспечить направление большего количества средств центрального процессора и памяти, чем доступно в системе.
  • Thin provisioning – функция позволяет выделить гибкое хранилище и оптимизирует доступное пространство для каждой гостевой виртуальной машины.
  • Disk I/O throttling – функция предоставляет возможность установить ограничение на запросы ввода-вывода диска, отправляемые с виртуальных машин на хост.
  • Automatic NUMA balancing – функция улучшает работу приложений на аппаратных решениях NUMA.
  • Virtual CPU hot add capability – данная функция предоставляет возможность увеличить процессорную память настолько, насколько это нужно работающей ВМ без простоев.

Подготовительная работа

Убедитесь, что Ваша система имеет расширение аппаратной виртуализации. Для хостов на базе Intel ЦП должен поддерживать расширение виртуализации [vmx] . Чтобы проверить наличие расширения, используйте следующую команду:

Для хостов на базе AMD ЦП поддерживает расширение виртуализации [svm] :

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

Вывод должен содержать kvm_intel для хостов на базе Intel и kvm_amd – на базе AMD.

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

Убедитесь, что Selinux в режиме Permissive.

Шаг 1: Установка KVM

Сначала мы установим пакеты qemu-kvm и qemu-img . Эти пакеты предоставляют KVM и image manager доступ на уровне пользователя.

Теперь у Вас есть минимум требований, чтобы установить виртуальную платформу на вашем хосте. Но есть ещё полезные приложения, которые помогают в администрировании платформой:

  • virt-manager (менеджер управления виртуальными машинами) предоставляет GUI-конструктор для управления виртуальными машинами.
  • libvirt-client предоставляет инструмент CL для управления вашей виртуальной средой. Такая утилита называется virsh.
  • С помощью команды virt-install , которую предоставляет программа virt-install, Вы можете создать виртуальную машину, используя CLI (интерфейс командной строки).
  • С помощью библиотеки libvirt сервер и хост могут взаимодействовать с гипервизорами и хост-системами.

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

Для пользователей RHEL/CentOS7 также есть дополнительные группы пакетов, которые можно установить, например: Virtualization Client, Virtualization Platform и Virtualization Tools

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

После того, как Вы перезапустили демона, проверьте его статус с помощью следующей команды:

Теперь давайте перейдем к следующему разделу и создадим виртуальную машину.

Шаг 2: Создание ВМ с помощью KVM

Так как мы установили несколько полезных приложений для управления виртуальными платформами и создания виртуальных машин, одно из них –virt-manager – нам сейчас понадобится.

Несмотря на то, что virt-manager является инструментом, основанным на графическом интерфейсе пользователя, из терминала мы можем запускать его так же, как и из GUI.

После того, как Вы запустите приложение, появится такое окно.

По умолчанию менеджер напрямую подключен к localhost . Но Вы можете использовать тот же инструмент, чтобы выбрать другой хост удаленно. Из вкладки File выберите Add Connection и появится следующее окно.

Читать еще:  Что такое ntlm аутентификация. Процедура аутентификации Windows. Сквозная проверка подлинности

Поставьте галочку на Connect to remote host и впишите название или IP (Hostname) удаленного сервера. Если Вам нужно устанавливать соединение с удаленным сервером каждый раз, когда запускается менеджер, то поставьте галочку на Auto Connect.

Давайте вернемся к localhost. Прежде чем создавать виртуальную машину, Вы должны решить, где будут храниться файлы. Другими словами, Вам необходимо создать том (виртуальный диск) для вашей виртуальной машины. Правой кнопкой мыши нажмите на localhost и выберите Details, а затем перейдите на вкладку Storage.

Затем нажмите кнопку New Volume (Новый том) и введите название вашего нового виртуального диска (тома). В графу Max Capacity (Максимальная ёмкость) введите требующийся вам объем диска.

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

Примечание: технология в области администрирования хранилищ называется thin provision (Тонкое обеспечение). Она используется для выделения только используемого объема хранилища, а не всего доступного объема. Например, Вы создали виртуальный диск размером 60 Гб, но используемого объема у Вас только 20 Гб. С помощью данной технологии жёсткий диск предоставит Вам только 20 Гб, а не 60. Другими словами, выделенный физический объем будет динамически распределяться в зависимости от фактического используемого объема.

Знак нового диска появится в списке.

Найти Ваш новый виртуальный диск Вы сможете по умолчанию с помощью команды /var/lib/libvirt/images .

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

Выберите метод установки для создания ВМ. Мы пока выберем Local install media, а позже обсудим оставшиеся методы.

Теперь мы должны выбрать, какой локальный носитель использовать. У нас есть два варианта:

  • Физический CDROM/DVD
  • ISO-образ

Давайте выберем ISO-образ и введем его путь.

Важно: к сожалению, для тех, кто использует RHEL или CentOS7, здесь есть баг. Он не даёт установить машину с использованием физического носителя CDROM/DVD. Опция просто будет серая:

И если Вы наведете курсор, то появится сообщение об ошибке: physical cdrom passthrough not supported with this hypervisor (Физический CDROM не поддерживает данный гипервайзер).

Больше информации можете узнать здесь.

Снова вопрос про хранилище. Используем виртуальный диск, который мы недавно создали. Он скоро появится.

На последнем шаге Вам необходимо дать название виртуальной машине.

Если Вы хотите изменить что-то в конфигурации или сделать небольшую адаптацию, поставьте галочку на Customize configuration before install. Затем нажмите на finish и подождите несколько секунд, пока не появится контрольная консоль для вашей гостевой ОС.

Заключение

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

  • Виртуализация
  • Linux
  • KVM
  • Virtual Machine
  • 590
  • 30
  • Поделиться

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

Для создания виртуальной машины можно воспользоваться графической утилитой Virtual Machine Manager. Найти её можно в меню Приложения — Системные — Менеджер виртуальных машин.

В меню Файл выберите Создать виртуальную машину. В открывшемся оке выберите метод, с помощью которого будет производиться установка операционной системы. В примере, установка производится из образа iso. Нажмите Вперед.

Для выбора образа нажмите Обзор и в открывшемся окне нажмите Выбрать файл. Найдите образ iso и откройте его, нажав на кнопку Открыть.

Выберите тип операционной системы — Linux. Версию — RHEL7. Нажмите Вперед.

Установите необходимое количество оперативной памяти и процессоров, которые будут доступны данной виртуальной машине. Минимально необходимые значения для РЕД ОС указаны на скриншоте ниже.

Выберите количество постоянной памяти, которое будет доступно виртуальной машине. Минимально рекомендуемым для РЕД ОС является 15 Гб.

Впишите название виртуальной машины в поле Название. Установите галку в пункте Проверить конфигурацию перед установкой. Выберите нужную вам сеть. Нажмите Готово.

Увеличение размера виртуального диска

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

virsh domblklist VMname

* в данном примере путь до диска — /data/kvm/vhdd/VMname-disk1.img.

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

virsh shutdown VMname

* или завершаем работу в самой операционной системе.

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

qemu-img resize /data/kvm/vhdd/VMname-disk1.img +100G

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

Мы должны увидеть:

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

qemu-img info /data/kvm/vhdd/VMname-disk1.img

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

virsh start VMname

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

virsh blockresize UBU /data/kvm/vhdd/VMname-disk1.img 200G

* где 200G — общий размер виртуального диска после расширения.

После необходимо поменять размер диска в самой операционной системе. Пример того, как это можно сделать можно прочитать в инструкции Добавление дискового пространства виртуальной машине в VMware (раздел «Настройка операционной системы»).

Ссылка на основную публикацию
Статьи c упоминанием слов:
Adblock
detector