Как установить kvm на ubuntu 18.04

Плюсы и минусы KVM

Проект KVM (Kernel-based Virtual Machine) в этом году празднует десятилетие. Официально он включен в ядро с версии 2.6.20, выложенное на kernel.org 4 февраля 2007 года. Изначально разрабатывался компанией Qumranet, выкупленной Red Hat в 2008 году. После сделки KVM и библиотека управления виртуализацией oVirt стала основой платформы виртуализации RHEV, поэтому Red Hat на сегодня ключевой разработчик KVM.

Технология предоставляет полную виртуализацию на аппаратном уровне. Поэтому, в отличие от популярных LXC и OpenVZ, KVM может запускать в принципе любую ОС, не только Linux (Windows, FreeBSD…), и Linux, отличающийся от конфигурации основной системы. Если нужна виртуальная машина, не совпадающая параметрами с основным хостом, то выбора особо нет. Включение в ядро было большим прорывом. Теперь поддержка виртуализации в ОС не требовала установки гипервизора (как Xen) и могла быть реализована в любом дистрибутиве, включая настольный. Из коробки доступен VNC, дающий возможность управлять виртуальным сервером с момента загрузки (то есть когда еще не работает SSH), как будто из локальной консоли. Проект активно сотрудничает с другим подобным решением QEMU, задействованы некоторые утилиты и общий формат файла образа Qcow2.

Минусы, конечно, тоже есть. Куда же без них. Главный — процессор должен иметь аппаратную поддержку виртуализации Intel VT-x или AMD-V. Проверить их наличие можно вручную или при помощи утилит:

Также о поддержке технологий говорят флаги в CPU:

В зависимости от производителя процессора будет загружен свой модуль ядра (kvm-amd.ko либо kvm-intel.ko).

Проверяем поддержку KVM

Накладные расходы чуть выше, чем при использовании LXC и OpenVZ. Причин тому две.

KVM-контейнер запускает свою копию ядра и окружения, и под них требуется память. LXC и OpenVZ же используют ядро и системные вызовы сервера. Поэтому при одинаковых характеристиках на хостинге у них совершенно разные возможности. При создании KVM-контейнера под него сразу резервируются все ресурсы согласно установкам. Это хорошо видно в htop. Стоит добавить ОЗУ в KVM, как сразу на это значение увеличивается объем занятой памяти. Выйти за лимиты VM не может, они устанавливаются жестко. В этом даже и плюс, можно сразу рассчитать будущую нагрузку на своем сервере, а ресурсы никто не позаимствует.

И VM работают относительно стабильно в плане производительности. В то время как при OpenVZ-виртуализации ресурсы выделяются динамически по мере надобности и каждый виртуальный сервер использует ровно столько ресурсов, сколько ему сейчас нужно. Незанятые ресурсы остаются свободными. Поэтому он и популярен у хостеров, ведь можно всегда напихать чуть больше VM, и именно поэтому виртуальные машины, созданные с запасом, могут работать то быстрее, то медленнее. Иногда оптимизация VM под OpenVZ — настоящая мука: непонятно, почему сервер стал работать по-другому — из-за новых настроек или внешних факторов.

Администрировать KVM сложнее, так как прозрачный доступ к файлам, процессам, консолям и сети контейнеров отсутствует, это приходится настраивать самостоятельно. Перестройка параметров VM в KVM (CPU, RAM, HDD) не очень удобна и требует дополнительных действий, включающих перезагрузку ОС. В том же OpenVZ это можно сделать на лету. Сам проект не предлагает удобных графических инструментов для управления виртуальными машинами, только утилиту virsh, реализующую все необходимые функции. Но, поискав в Сети, можно найти несколько интерфейсов, хотя для индивидуального использования одной или нескольких VM их обычно ставить нет смысла. К тому же много open source проектов, активно развивавшихся во время большого интереса к виртуальным машинам, сегодня стали коммерческими, хотя некоторые по-прежнему предлагают обрезанную free-версию. В репозитории пакетов есть virt-manager, предлагающий графический интерфейс для управления KVM и другими типами VM, поддерживающими virtlib, как установленных локально, так и удаленно через SSH.

В качестве веб-интерфейсов можно порекомендовать старенький, но еще рабочий WebVirtMgr, бесплатный UVMM UCS Core Edition, openQRM Free Community Edition и другие. Кроме того, существуют специальные дистрибутивы вроде Proxmox VE, в котором все необходимые инструменты для создания и управления VM на базе KVM и LXC уже есть (правда, он подходит для bare metal установки, а не на удаленный VDS).

KVM

Когда KVM инсталлирован, вы можете запустить операционную систему в пространстве пользователей. Каждая гостевая операционная система представляет собой отдельный процесс базовой операционной системы (или гипервизора).

показывает схему виртуализации с KVM. В основе лежит аппаратная платформа, которая способна к виртуализации (в настоящее время это Intel VT или AMD-SVM процессор). На «голой» аппаратуре работает гипервизор (ядро Linux с модулем KVM). Этот гипервизор выглядит точно также как стандартное ядро Linux, на котором вы можете запускать другие приложения. Но это ядро может также поддерживать гостевые операционные системы, загруженные с помощью утилиты kvm. В конечном счете гостевая операционная система может поддерживать те же самые приложения, что и базовая операционная система.

Рисунок 2. Компоненты виртуализации с KVM

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

KVM вводит новый режим процессов в Linux в существующее ядро и пользовательские режимы. Новый режим называется guest и, как подсказывает его имя, используется для выполнения кодов гостевой операционной системы (или, по крайней мере, некоторых из них). Вспомним, что режим ядра представляет собой привилегированный режим выполнения кодов, в то время как пользовательский режим не является привилегированным (программы, работающие вне ядра). Поэтому режимы выполнения определяются для различных целей, в зависимости от того, что выполняется и с какой целью. Режим guest существует для выполнения кодов гостевой операционной системы, но только для кодов, которые не являются вводом/выводом. В рамках режима guest существуют два стандартных режима, для того чтобы гостевая операционная система работала в режиме guest, но поддерживала стандартные режимы: режим ядра и пользовательский режим, для своего ядра и приложений пространства пользователей. Пользовательский режим гостевой операционной системы существует для того, чтобы выполнять операции ввода/вывода, которые управляются независимо.

Выполнение операции ввода/вывода с гостевой операционной системы обеспечивается QEMU. QEMU – это виртуализационная платформа, которая позволяет виртуализировать все оборудование PC
(включая диски, графические адаптеры, сетевые устройства). Любые запросы ввода/вывода, которые делает гостевая операционная система, перехватываются и направляются в пользовательский режим для эмулирования с помощью процесса QEMU.

KVM обеспечивает виртуализацию памяти с помощью /dev/kvm. Каждая гостевая
операционная система имеет свое собственное адресное пространство, которое устанавливается, когда создается гостевая система. Физическая память, которая назначается для гостевой операционной системы, является в действительности виртуальной памятью процесса. Набор теневых таблиц поддерживается для преобразования с гостевых физических адресов в реальные физические адреса. Процессор также поддерживает процесс преобразования памяти, передавая управление гипервизору (базовому ядру), когда имеется обращение к не распределенному адресу памяти.

Установка «Дополнений гостевой ОС» для гостевого ALT Linux[править]

1. Установите модуль ядра kernel-modules-virtualbox-addition-<тип ядра> и вспомогательные пакеты для интеграции
apt-get install kernel-modules-virtualbox-addition-$(uname -r|cut -f2,3 -d-) virtualbox-guest-additions xorg-drv-vboxvideo

Перед любыми операциями с установкой модуля ядра, надо обновить ядро с помощью команд:

apt-get update
update-kernel

И ни в коем случае не устанавливать модуль от другой ядерной сборки подробнее смотри: Обновление_ядра

2. Выберите в Центре управления системой  ⇒ Дисплей драйвер vboxvideo.

Примечание:
Драйвер можно выбрать и в командной строке (под правами root):

alterator-cmdline /x11 action write _objects driver driver vboxvideo

Примечание:
Если пункта «Дисплей» нет в Центре управления системой, установите пакет alterator-x11

3. Перезагрузите гостевую систему или только сеанс
4. Включите в меню виртуальной машины
  • Устройства  ⇒ Общий буфер обмена  ⇒ Двунаправленный
  • Устройства  ⇒ Drag’n’Drop  ⇒ Двунаправленный.

Общие папкиправить

1. Установите в гостевой операционной системе дополнения гостевой операционной системы и virtualbox-guest-utils
 apt-get install kernel-modules-virtualbox-addition-$(uname -r | cut -d "-" -f2,3) virtualbox-guest-utils

Этот пункт не нужен, если уже установлен пакет virtualbox-guest-additions, как описано выше.

2. Добавьте в свойствах виртуальной машины (раздел «Общие папки») папку. Для этого выберите путь и укажите имя папки (по умолчанию используется имя последней папки в указанном пути). Если хотите чтобы папка осталась настроенной и после перезагрузки гостевой операционной системы, установите флажок «Создать постоянную папку».
3. Для монтирования общих папок VirtualBox должен быть загружен модуль vboxsf
modprobe vboxsf
4. В гостевой операционной системе выполните
mount -t vboxsf <имя папки> /mnt

Внимание! Использование параметра -t в команде mount разрешено только пользователю root.

Если необходимо обеспечить доступ на чтение/запись от имени обычного пользователя, то добавьте в команду монтирования опции uid и gid.
Например, если у пользователя user uid=500 и gid=500, то команда будет выглядеть так:

mount -t vboxsf -o uid=500,gid=500 <имя папки> /mnt
5. Общая папка становится доступна в /mnt.

Краткая инструкция для установки дополнений вручнуюправить

Внимание! идеологически неправильное решение!!!

Запускаем гостевой Линукс, и удаляем пакеты:

xorg-drv-vboxvideo
  • Ставим пакет kernel-headers-modules для своего ядра.
  • В окне VirtualBox, в меню «Устройства», выбираем «Установить дополнения гостевой ОС».
  • В гостевом Линуксе заходим на CD-ROM, находим там файл VBoxLinuxAdditions-x86.run (-amd64.run для соответствующей архитектуры), копируем его в /tmp.
  • В гостевом Линуксе открываем терминал, переходим в нём в рута (командой su -) и выполняем команду:
chmod a+x /tmp/VBoxLinuxAdditions-x86.run
/tmp/VBoxLinuxAdditions-x86.run
  • Далее исполняется скрипт, который сам все распакует, скомпилирует и установит.
  • Убеждаемся, что в гостевом Линуксе xorg.conf прописаны драйвер vboxvideo для видео.
  • Перезагружаем виртуальную машину.
  • Наслаждаемся автоизменением размеров окна, и «незалипающей» мышкой.

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

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

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

virsh vncdisplay VM1

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

:1

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

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

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

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

virsh edit VM1

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

<graphics type=’vnc’ port=’-1′ autoport=’yes’ listen=’0.0.0.0′ passwd=’12345678′>
  <listen type=’address’ address=’0.0.0.0’/>
</graphics>

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

Installation

Because of its daemon/client architecture, libvirt needs only be installed on the machine which will host the virtualized system. Note that the server and client can be the same physical machine.

Server

Install the package, as well as at least one hypervisor:

The libvirt KVM/QEMU driver is the primary libvirt driver and if KVM is enabled, fully virtualized, hardware accelerated guests will be available. See the QEMU article for more information.

For network connectivity, install:

  • for bridged networking.
  • for remote management over SSH.

Client

The client is the user interface that will be used to manage and access the virtual machines.

virsh — Command line program for managing and configuring domains.

GNOME Boxes — Simple GNOME 3 application to access remote or virtual systems.

Libvirt Sandbox — Application sandbox toolkit.

Remote Viewer — Simple remote display client.

Qt VirtManager — Qt application for managing virtual machines.

Virtual Machine Manager — Graphically manage KVM, Xen, or LXC via libvirt.

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

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

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *