Как открыть kvm консоль
Я выполнил все ваши инструкции и установил KVM с Ubuntu Linux в качестве новой гостевой виртуальной машины. Однако я не могу использовать команду: «virsh console vm». Как настроить и включить доступ к консоли, чтобы получить доступ к оболочке на недавно созданной виртуальной машине Ubuntu Linux 16.04 LTS?
3 января стартует курс «SQL-injection Master» © от команды The Codeby
За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.
На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.
Запись на курс до 10 января. Подробнее .
Пример нашего установленного экземпляра
- KVM IP хоста: 192.168.2.15
- KVM гостевая операционная система: Ubuntu Linux 16.04 LTS
- KVM гостевой IP: 192.168.2.45
- KVM гостевое имя: ubuntu-box1
- KVM гостевое имя пользователя: vivek
- KVM гостевой пароль: hidden-secrete
Как настроить доступ к консоли Ubuntu 16.04 KVM Guest
Во-первых, вам нужно войти с помощью ssh или VNC клиента в гостевой Ubuntu.
Осуществляем вход с помощью ssh
В этом примере, я осуществляю вход, используя ssh клиент, из моей рабочей станции (или введите команду на самом хосте KVM) в Ubuntu Linux VM guest:
После входа получите доступ к корневой оболочке:
Осуществляем вход с помощью
Введите следующую команду на вашем KVM хосте:
Пожалуйста. обратите внимание на значение порта (т. е. 5901). Вам нужно использовать SSH-клиент для настройки туннеля и клиента VNC для доступа к удаленному серверу vnc. Введите следующую команду переадресации портов SSH из вашей клиентской или настольной системы Linux/Unix/MacOS:
После того, как вы установили туннель ssh, вы можете указать в VNC свой IP 127.0.0.1 (localhost) адрес и порт 5901. В VNC клиенте это можно сделать следующим образом:
Рисунок 01: Графический клиент VNC для подключения к консоли сервера Ubuntu Linux 16.04 LTS
Войдите в свою виртуальную машину:
Настройте последовательную консоль в гостевой Ubuntu
Наконец, введите следующие две команды, чтобы включить последовательную консоль в гостевой системе для доступа к соединению с помощью команды «virsh console»:
Примеры возможных выводов данных:
Как получить доступ к консоли Ubuntu 16.04 KVM Guest с узла KVM
Для того чтобы увидеть список запущенных виртуальных машин введите:
Примеры возможных выводов данных:
Введите следующую команду с хоста KVM для входа в гостевой файл с именем ubuntu-box1
Используйте комбинацию клавиш Ctrl + ] для того, чтобы выйти из консоли.
Как и было обещано в предыдущей статье, сегодня мы поговорим о базовой настройке хост-машины для работы KVM.
Для начала необходимо узнать, есть ли у нашего процессора необходимые инструкции для поддержки виртуализации.
$ egrep '(vmx|svm)' /proc/cpuinfo
Если есть — это замечательно.
Подготовка операционной системы
Установку Debian Squeeze я, пожалуй, описывать не буду: если уж вы добрались до KVM, то установка системы — плёвое дело.
Устанавливать нужно будет 64-битную OS, поскольку необходимые пакеты есть только для этой архитектуры.
В Debian Squeeze «свежесть» пакетов с KVM и сопутствующих программами нас совсем не устраивает, поскольку очень много всяких фиксов и фич попросту пройдут мимо нас. Поэтому мы добавим репозитории Debian Sid и experimental:
Указываем, что у нас базовый дистрибутив stable, а не то, что подумала система:
Оттуда нам понадобятся пакеты:
Из стабильного репозитория нам будут нужны:
На вашем рабочем десктопе вы можете поставить virt-manager (GUI-утилита), который позволит удобно создавать нужные конфигурации виртуальных машин.
Ядро чем «свежее» — тем лучше (в известных пределах конечно: из git, например, я бы ставить не рекомендовал). Хорошим вариантом будет 2.6.39, вышедшее недавно.
Следует отметить, что в стандартном ядре отсутствует модуль для поддержки записи в UFS2, и если планируется запускать гостевую FreeBSD, потребуется собрать ядро с этим модулем. Ну и, конечно, в Debian-овском ядре отсутствуют свежие версии cgroups.
Что должно быть включено в ядре для использования максимального объема требуемого функционала:
CONFIG_VIRTIO_BLK=y
CONFIG_VIRTIO_NET=y
CONFIG_VIRTIO_CONSOLE=y
CONFIG_HW_RANDOM_VIRTIO=y
CONFIG_VIRTIO=y
CONFIG_VIRTIO_RING=y
CONFIG_VIRTIO_PCI=y
CONFIG_VIRTIO_BALLOON=y
CONFIG_CGROUPS=y
CONFIG_CGROUP_NS=y
CONFIG_CGROUP_FREEZER=y
CONFIG_CGROUP_DEVICE=y
CONFIG_CGROUP_CPUACCT=y
CONFIG_CGROUP_MEM_RES_CTLR=y
CONFIG_CGROUP_MEM_RES_CTLR_SWAP=y
CONFIG_CGROUP_MEM_RES_CTLR_SWAP_ENABLED=y
CONFIG_CGROUP_SCHED=y
CONFIG_BLK_CGROUP=y
CONFIG_NET_CLS_CGROUP=y
Затем идём по ссылке и устанавливаем все deb-пакеты оттуда, копируем insmod.static в /sbin/insmod.static (это нужно, поскольку в работе libguestfs использует статически скомпилированную версию insmod, а в Debian и Ubuntu такого файла просто нет, однако в последней версиии febootstrap эту проблему устранили, insmod.static более не нужно загружать на сервер). libguestfs позволяет нам получать доступ к диску VDS через API libguestfs(C, Perl, Python, PHP) или через утилиту guestfish.
Первый блин
Сейчас мы установили все, необходимое для запуска VDS, их доступа в сеть и установки самой виртуальной машины.
Давайте попробуем что-нибудь поставить, например, тот же самый Debian. Пока без настройки сети, просто, по умолчанию.
Скачиваем установщик netinstall:
Редактируем /etc/libvirt/qemu.conf, чтобы виртуальные машины работали у нас от непривилегированного пользователя:
user = "username"
group = "libvirt"
Поскольку у нас будут использоваться tun-устройства, нужно выставить capability CAP_NET_ADMIN, сделать это можно как для отдельного исполняемого файла, так и для пользователя в целом, или настроить чтобы libvirt не сбрасывал нужные права для qemu/kvm.
Выставляем для отдельного файла:
sudo setcap cap_net_admin=ei /usr/bin/kvm
Или выставляем для пользователя в целом в файле /etc/security/capability.conf:
Или выставляем соответствующую настройку в /etc/libvirt/qemu.conf:
Добавим пользователя в группу libvirt и kvm:
Запустим установку виртуальной машины:
$ virt-install --connect qemu:///system -n debian_guest -r 512 --arch=i686 --vcpus=1 --os-type=linux --os-variant=debiansqueeze --disk debian-6.0.1a-i386-netinst.iso,device=cdrom --disk debian_guest.img,bus=virtio,size=2,sparse=false,format=raw --network=default,model=virtio --hvm --accelerate --vnc
Подробно разберём параметры, которые мы указали:
- --connect qemu:///system URL, по которому мы подключаемся к KVM. Подключаться можно через ssh.
- -n debian_guest Имя гостевой системы.
- -r 512 Выделяемый объём оперативной памяти в мегабайтах.
- --arch=i686 Архитектура гостевой операционной системы.
- --vcpus=1 Количество виртуальных процессоров, доступных гостю.
- --os-type=linux --os-variant=debianlenny Специфичные для данной операционной системы параметры.
- --disk debian-6.0.1a-i386-netinst.iso,device=cdrom Загружаемся с диска, образ которого указали.
- --disk debian_guest.img,bus=virtio,size=2,sparse=false,format=raw Создаём образ системы размером 2Гб, который сразу помещаем на диск (можно создать образ нулевого размера, но тогда возможна фрагментация, что получается несколько медленнее). Формат простой, можно сделать с dd файл. Драйвер диска virtio, использовать лучше virtio, чем ide: производительность их отличается если не на порядок, то в разы.
- --network=default,model=virtio Сетевые настройки по умолчанию. В этом случае libvirt создаст мост, сделает dhcp сервер и выдаст через него адрес для доступа виртуальной машины.
- --hvm Полная виртуализация — то есть, можно использовать собственные ядра.
- --accelerate Работа через /dev/kvm.
- --vnc Запускаем VNC, чтобы подключаться к текстовой консоли.
Утилиты настройки и управления
Для управления установкой и для клонирования виртуальных машин у нас есть две замечательные утилиты — графическая и консольная: virt-manager и virsh, соответственно. Конечно, консольная версия намного богаче по возможностям, но ничто не сравнится с видом графиков, от которых сердце сисадмина млеет.
Думаю с virt-manager вы и сами разберётесь, давайте попробуем покопаться в консольных внутренностях virsh. Вот несколько команд которые стоит выполнить и посмотреть что из этого получится:
$ virsh --connect qemu:///system list --all
$ virsh --connect qemu:///system dominfo debian_guest
$ virsh --connect qemu:///system stop debian_guest
Чтобы тысячу раз не писать --connect qemu:///system, добавьте:
export VIRSH_DEFAULT_CONNECT_URI= qemu:///system
В .bashrc или просто выполните эту команду в терминале.
Подготовка сети
В официальной документации предлагается использовать несколько вариантов организации сети: NAT, bridged и прямое использование сетевых карт. И, к сожалению, в различных примерах, которые я нашел в сети и на официальном сайте, рассматриваются только NAT и bridged сети.
В моей конфигурации используются TUN/TAP устройства, на которые с eth0 маршрутизируется трафик. Коротко опишу, почему выбран именно такой способ маршрутизации:
NAT нам не подходит, поскольку каждая VDS должна быть доступна из сети напрямую.
Схема с мостами не очень надёжная, поскольку теоретически есть возможность «захвата» IP адреса чужой виртуальной машины.
Итак:
<interface type='ethernet'>
<mac address='52:54:00:ef:40:1d'/>
<ip address='10.10.10.100'/>
<target dev='debian_guest'/>
<model type='virtio'/>
</interface>
Данный участок конфигурации нужно указывать непосредственно в конфигурационном файле гостя, расположенного по адресу /etc/libvirt/qemu/debian_guest.xml. Редактировать лучше всего через:
$ virsh edit debian_guest
Тогда конфигурация обновится на лету, при условии, что машина не запущена. В противном случае нужно будет подождать, пока она остановится, и запустить ее снова.
Создадим необходимое нам виртуальное устройство.
Для начала нам нужно дать нашему пользователю возможность беспарольного обращения к системным командам. Для этого добавим в sudoers:
Cmnd_Alias QEMU = /sbin/ifconfig, /sbin/modprobe, /usr/sbin/brctl, /usr/sbin/tunctl, /sbin/sysctl, /bin/ip, /usr/bin/cgcreate, /usr/bin/cgdelete, /sbin/tc
username ALL=(ALL:ALL) NOPASSWD: QEMU
Включим возможность форвардинга и проксирования arp-запросов:
sudo sysctl net.ipv4.conf.all.forwarding=1
sudo sysctl net.ipv4.conf.all.proxy_arp=1
Также можно добавить эти параметры в /etc/sysctl.conf и применить их:
Создадим виртуальную сетевую карту и поднимем устройство:
sudo tunctl -b -u username -t debian_guest
sudo ifconfig debian_guest 0.0.0.0 up
Создадим маршрут на нужное нам устройство с нужного IP-адреса:
sudo ip route add 10.10.10.100 dev debian_guest
Теперь можно запустить VDS:
$ virsh start debian_guest
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR=="xx:xx:xx:xx:xx:xx", ATTR=="0x0", ATTR=="1", KERNEL=="eth*", NAME="eth1"
Нужно удалить этот файл и перезагрузить VDS — после этого сетевая карта определится корректно.
Пропишем новые сетевые настройки в гостевой системе:
10.10.10.10 — это IP-адрес хост-системы. Теперь мы сможем попинговать другие машины.
Добавим DNS-серверы в /etc/resolv.conf, и будет совсем замечательно:
К слову, замечу, что оказалось очень удобно называть сетевые устройства, принадлежащие VDS, также, как и сами VDS — отпадает необходимость искать, кому принадлежит устройство tap0 или vnet0, или как там ещё можно их обозвать.
Если понадобится выдать виртуальной машине ещё один IP-адрес, достаточно будет просто на хост-машине прописать ещё один маршрут:
А в гостевой системе создать алиас для сетевого устройства:
В следующей части
В следующей статье я расскажу о том, как создать образ VDS, что вообще меняется от системы к системе, и как эти параметры можно удобно менять.
Оригинал: How to use KVM from the command line on Debian or Ubuntu
Автор: Dan Nanni
Дата публикации: 27 февраля 2014 года
Перевод: А. Кривошей
Дата перевода: декабрь 2014 г. Есть несколько способов управлять виртуальными машинами, запущенными в гипервизоре KVM, например с помощью популярного графического фронтенда virt-manager. Однако, если вы хотите использовать KVM на сервере, графические решения вряд ли будут хорошим выбором. В этом случае удобным инструментом будет virsh - утилита командной строки для управления гостевыми виртуальными машинами. Она работает со службой libvirtd, которая может управлять несколькими различными гипервизорами, включая KVM, Xen, QEMU, LXC и OpenVZ. Интерфейс командной строки virsh также полезен в случае, если вы хотите автоматизировать инициализацию и управление виртуальными машинами. Кроме того, способность virsh работать с различными гипервизорами обеспечивает единый интерфейс для управления виртуальными машинами различных типов. В этом руководстве я продемонстрирую вам, как запускать KVM из командной строки с использованием virsh в Debian или Ubuntu.
Содержание
Этап 1: проверка аппаратной поддержки виртуализации
В качестве первого этапа проверьте, поддерживает ли ваш процессор аппаратную виртуализацию (то есть Intel VT или AMD-V), которая требуется для KVM. Это можно сделать с помощью команды:
Вывод примерно такой:
Если в выводе нет флага vmx или svm, это значит, что процессор не поддерживает аппаратную виртуализацию, поэтому вы не сможете использовать KVM на этом хосте. После проверки самое время установить KVM.
Этап 2: Установка KVM
Установите KVM и соответствующие пользовательские утилиты с помощью apt-get:
Во время инсталляции будет создана группа libvirtd, и ваш userID будет автоматически добавлен в группу. Это позволит вам управлять виртуальными машинами от имени обычного пользователя. Вы можете проверить это с помощью команды id, которая выводит ваш group ID.
Если по каким-либо причинам в списке вашего groupID нет libvirtd, вы можете вручную добавить себя в эту группу.
Перезагрузите обновленную информацию о группе, как показано ниже. Когда появится запрос, введите свой пользовательский пароль.
Этап 3: Настройка сетевого моста
Один из способов получения доступа из виртуальной машины к внешним сетям - мост, встроенный в ваш хост Linux. Это называется сетевой мост. Ниже описано, как создать и настроить сетевой мост Linux br0 для мостового соединения с KVM. Сначала установим необходимый для создания сетевого моста пакет.
Далее необходимо настроить сетевой мост в файле /etc/network/interfaces, чтобы он активировался при загрузке системы.
Для использования файла /etc/network/interfaces необходимо отключить Network Manager (если он у вас используется).
Как это сделать, описано здесь.
После отключения Network Manager настраиваем сетевой мост br0 в /etc/network/interfaces, как показано ниже.
Здесь предполагается, что главным сетевым интерфейсом, который имеет доступ к внешним сетям, является eth0. Кроме того, предполагается, что eth0 получает IP-адреса посредством DHCP. Обратите внимание, что в /etc/network/interface нет настроек для eth0, так как он подключается к сетевому мосту br0. Перезагрузите сетевые службы и убедитесь, что сетевой мост настроен успешно. В этом случае br0 должен присвоить сетевой адрес интерфейса eth0, в свою очередь интерфейсу eth0 не должно быть присвоено сетевого адреса.
Этап 4: создание виртуальной машины из командной строки
В KVM настройки виртуальной машины хранятся в XML-файле домена. Поэтому сначала необходимо подготовить этот файл.
Если нет необходимого вам файла конфигурации, то его можно создать командой:
Ниже пример простого XML-файла для виртуальной машины. Вы можете использовать его, откорректировав в соответствии со своими потребностями.
Этот XML-файл определяет следующую виртуальную машину: 1 Гб оперативной памяти, один CPU и один жесткий диск.
Образ диска: /home/dev/images/alice.img.
Загрузка с CD: (/home/dev/iso/ubuntu-13.10-server-amd64.iso).
Сеть: сетевой мост br0.
Строка UUID между тегами <uuid></uuid> может быть сгенерирована случайным образом.
Для этого используется утилита командной строки uuid.
Пример xml файла для Windows 2008
Доменный XML-файл можно также создать, сделав дамп информации о домене существующей виртуальной машины:
Этап 5: запуск виртуальной машины из командной строки.
Перед запуском виртуальной машины необходимо создать образ диска для нее. Для этого можно воспользоваться командой qemu-img, входящей в пакет qemu-kvm.
Преимущество опции qcow2 в том, что создаваемый при ее использовании образ диска не резервирует сразу весь свой свой объем (5 Гб), а динамически увеличивается при наполнении в процессе работы виртуальной машины.
Если необходимо сделать сразу жестко заданный размер то команда будет такой:
Теперь вы готовы к запуску виртуальной машины с использованием созданного ранее доменного XML-файла. Это делается с помощью приведенной ниже команды:
Проверьте, что домен создан успешно.
Кроме того, проверьте, что виртуальный сетевой интерфейс для виртуальной машины (то есть vnet0) успешно добавлен в созданный ранее сетевой мост br0.
Этап 6. Удаленный доступ к виртуальной машине.
Для удаленного доступа к консоли виртуальной машины вы можете использовать любой VNC-клиент.
Сначала определите номер порта VNC для виртуальной машины:
В этом примере номер порта для виртуальной машины alice 5900.
Затем запустите VNC-клиент и подключитесь к VNC-серверу, работающему по адресу KVM-host-IP:5900.
Управление виртуальной машиной с помощью virsh
Ниже список наиболее часто употребляемых команд virsh. Для создания нового гостевого домена и запуска виртуальной машины:
Для остановки виртуальной машины и уничтожения гостевого домена:
Для выключения виртуальной машины (без уничтожения домена):
Для приостановки виртуальной машины:
Для возобновления работы виртуальной машины:
Для автозапуска виртуальной машины после загрузки хоста:
Для получения информации о домене виртуальной машины:
Вы можете также управлять виртуальными машинами из сессии virsh. Для создания новой сессии virsh и входа в нее, просто введите:
В командной строке вы можете использовать любые команды virsh.
Решение проблем
1. Я получил ошибку, когда попытался создать виртуальную машину:
Вы получите эту ошибку, если ваш процессор не поддерживает аппаратную виртуализацию (то есть Intel VT или AMD-V), которая требуется для работы KVM. Если же вы получили эту ошибку с процессором, поддерживающим Intel VT или AMD-V, возможные решения этой проблемы: Во-первых, проверьте, загружены ли требуемые модули ядра.
Если модуль kvm не загружен, вам необходимо загрузить его:
Второе решение - добавление аргумента "--connect qemu:///system" к команде virsh, как показано ниже. Этот аргумент может потребоваться, если вы используете более одного гипервизора (то есть VMware, VirtualBox) на сервере.
2. Я получил ошибку, когда пытался запустить консоль своей виртуальной машины:
Эта ошибка возникает потому, что вы не определили устройство консоли в XML-файле виртуальной машины. Добавьте приведенные ниже строки в раздел "device" XML-файла.
Первый вопрос, который возникает у начинающего администратора KVM: как увидеть созданные виртуальные машины, как остановить, запустить и удалить их. Для управления ВМ в KVM из консоли можно использовать утилиту virsh (использует libvirt API). С помощью утилиты virsh можно выполнить практически все операции с виртуальными машинами KVM.
Как видно из скриншота, в первом случае отключенная ВМ не была отображена.
Еще несколько команд по получению различной информации о виртуальной машине:
Добавление памяти и vCPU виртуальной машине KVM
В консоли KVM вы можете добавить или уменьшить ресурсы процессора и памяти, выделенные для ВМ двумя способами:
- С помощью virsh
- Через конфигурационный XML файл ВМ
Если виртуальная машина запущена, ее нужно остановить:
Теперь с помощью virsh изменим количество виртуальных процессоров до 6 (vCPU):
— количество ядер процессора
Но при применении этой команды, у меня сразу же появилась ошибка:
Мы не можем установить количество ядер процессора, больше, чем максимальное количество. Чтобы увеличить максимальное количество ядер ВМ, выполните команду:
Повторите первую команду и запустите виртуальную машину:
Проверим количество процессоров в настройках ВМ: овленное количество процессоров:
Аналогичным образом добавим память виртуальной машине:
Все по той же причине, сразу же вышла ошибка:
Увеличим максимальное значение памяти::
Теперь можно увеличить память ВМ.
Перед всеми изменениями не забывайте останавливать ВМ, а после запускать ее.
Также вы можете изменить ресурсы ВМ KVM через ее конфигурационный XML файл. Можно изменить файл в режиме онлайн или же сделав бэкап XML файла, изменить его и применить к виртуальной машине.
Отредактируем XML файл ВМ в онлайн режиме:
В открывшемся редакторе vi внесите изменения, нажав кнопку “Insert”.
Например, зададим для ВМ 2 ядра и 1Гб памяти:
Учитывайте что память указывается в килобайтах.
Сохраните изменения в файле и перезапустите ВМ:
Проверьте настройки ВМ:
Тоже самое можно сделать, сделав бэкап XML файла:
Измените нужные вам параметры, сохраните файл и примените к виртуальной машине:
Иногда при изменении конфигурационного файла ВМ в онлайн режиме назначенные ресурсы сбрасываются после перезагрузки. В этом случае выполните остановку виртуальной машины и после этого просто запустите ее.
KVM: добавление диска в виртуальную машину
Сначала нужно создать дополнительный файл диска для виртуальной машины:
Вместо qcow2 вы можете указать нужный формат диска, так же нужно указать путь до файла. У меня хранилище для дисков /vz/disk/.
После этого, можно добавить устройство виртуального диска к самой ВМ:
Остановите и запустите ВМ, проверьте что получилось:
Как видим, диск добавлен. После данных манипуляций, на виртуальной машине нужно разметить этот диск под ваши нужды.
KVM: добавление сетевой карты для виртуальной машины
Попрбуем добавить дополнительный сетевой интерфейс для ВМ. Сначала проверим, какие сетевые интерфейсы созданы на хосте:
У меня на KVM сервере создана одна виртуальная машина, с одним сетевым интерфейсом. К br0 нам нужно прикрепить еще один виртуальный сетевой интерфейс. Выполните команды:
Проверьте, что у ВМ появился дополнительный сетевой интерфейс:
После первого сетевого интерфейса добавьте следующие строки:
Сохраните файл и запустите ВМ. Остальную конфигурацию, KVM добавит сам (mac address и тд). В данной статье мы затронули основные моменты, которые могут вам понадобиться при управлении виртуальными машинами KVM из консоли Linux сервера.
Читайте также: