Различия

Показаны различия между двумя версиями страницы.


wiki:articles:kvm [14/09/2018 19:30] (текущий) – создано - внешнее изменение 127.0.0.1
Строка 1: Строка 1:
 +Автор: //Graf//\\
 +Дата написания: //март 2016 г.//\\
 +\\
 +^   **Сервер виртуализации (Qemu/KVM+libvirt+virtual-manager)**   ^
 +\\
 +
 +===== На сервере =====
 +**Использовалось железо:**\\
 +CPU - Intel(R) Xeon(R) CPU E5-2603 0 @ 1.80GHz\\
 +RAM - 8 Gb\\
 +HDD - 500Gb\\
 +OS  - Slackware Linux 14.1 64-bit\\
 +Ядро- 3.10.17-smp\\
 +IP - 192.168.10.211
 +\\
 +**Разбивка диска:**
 +<code>
 +# fdisk -l
 +
 +Disk /dev/sda: 500.1 GB, 500107862016 bytes
 +255 heads, 63 sectors/track, 60801 cylinders, total 976773168 sectors
 +Units = sectors of 1 * 512 = 512 bytes
 +Sector size (logical/physical): 512 bytes / 4096 bytes
 +I/O size (minimum/optimal): 4096 bytes / 4096 bytes
 +Disk identifier: 0x00079cf1
 +
 +   Device Boot      Start         End      Blocks   Id  System
 +/dev/sda1            2048   209717247   104857600   83  Linux
 +/dev/sda2       964691968   976773167     6040600   82  Linux swap
 +/dev/sda3       209717248   964691967   377487360    5  Extended
 +/dev/sda5       209719296   335548415    62914560   83  Linux
 +/dev/sda6       335550464   461379583    62914560   83  Linux
 +/dev/sda7       461381632   587210751    62914560   83  Linux
 +/dev/sda8       587212800   713041919    62914560   83  Linux
 +/dev/sda9       713043968   838873087    62914560   83  Linux
 +/dev/sda10      838875136   964691967    62908416   83  Linux
 +</code>
 +\\
 +Разделы ///dev/sda5-10// созданы специально под образы виртуальных машин и примонтированны в каталог ///vm/vm1-6//.
 +Так же, после установки системы, я создал каталог ///iso_images// для хранения iso-образов.\\
 +Slackware ставилась полностью вся, с Х-ми, но безо всяких DE и всем, что с ними связанно.
 +
 +После установки системы устанавливаем //sbopkg// и обновляем саму систему при помощи //slackpkg//, предварительно настроив его на какое-либо зеркало.
 +<code>
 +# slackpkg update
 +# slackpkg upgrade-all
 +</code> 
 +Далее удаляем пакет //nc// и ставим нужные пакеты при помощи //sbopkg//
 +<code>
 +# removepkg nc
 +# sbopkg -kBi "celt051 device-tree-compiler spice-protocol pyparsing spice usbredir vala yajl \
 +qemu gnome-python2-gconf gtk-vnc ipaddr-py libvirt libvirt-glib libvirt-python pygobject3  tunctl \
 +urlgrabber vte3 gstreamer1 gst1-plugins-base spice-gtk libbsd netcat-openbsd virt-manager"
 +</code>
 +Обновляем //libvirt// и //virt-manager// до последних версий. Я обновил путем редактирования //info// и //SlackBuild// в //sbopkg//. В итоге получил:\\
 +
 +libvirt-1.3.2-x86_64-1_SBo \\
 +virt-manager-1.3.2-x86_64-1_Sbo\\
 +
 +После запуска //libvirt// в системе появится интерфейс //virbr0//, мост виртуальной сети которая использует трансляцию сетевых адресов (NAT), благодаря которой гостевые системы (виртуальные машины) получают доступ к сетевым службам сервера.\\
 +Для доступа к виртуальным машинам из ЛВС и из виртуальных машин к ресурсам ЛВС (т.е. для создание полного ощущения, что это полноценный компьютер у кого-то на столе :) ) и потому, что NAT является медлительным и рекомендуется только для локальных установок, удалим этот интерфейс и создадим для наших нужд новый мост.
 +
 +И так, удаляем //virbr0//:
 +<code>
 +# /etc/rc.d/rc.libvirt start
 +# virsh net-destroy default
 +# virsh net-undefine default
 +# /etc/rc.d/rc.libvirt restart
 +</code>
 +
 +У меня на сервера 2 сетевых интерфейса. Один я настрою как основной, для работы с самим сервером, а второй отдам для организации моста для виртуальных машин. Оба порта в сети 192.168.10.0/24. Усечённый вывод ///etc/rc.d/rc.inet1.conf//
 +<code>
 +# Config information for eth0: - основной
 +IPADDR[0]="192.168.10.211"
 +NETMASK[0]="255.255.255.0"
 +USE_DHCP[0]=""
 +DHCP_HOSTNAME[0]=""
 +
 +# Config information for eth1: - для ВМ
 +IPADDR[1]=""
 +NETMASK[1]=""
 +USE_DHCP[1]=""
 +DHCP_HOSTNAME[1]=""
 +
 +# Default gateway IP address:
 +GATEWAY="192.168.10.250"
 +</code>
 +
 +Теперь создадим скрипт ///etc/rc.d/add-kvmbr// который создаст необходимый нам мост и не забудем сделать его исполняемым. Вот его содержимое:
 +<code>
 +LOCAL_IF="eth1"
 +BRIDGE_IF="br0"
 +BRIDGE_IP="192.168.121.1"
 +BRIDGE_MASK="255.255.255.0"
 +BRIDGE_BROADCAST="192.168.121.255"
 +
 +# Выключаем мост (на всякий случай, если он включен)
 +ifconfig $BRIDGE_IF down
 +
 +# Удаляем мост (если скрипт запускается не впервые)
 +brctl delbr $BRIDGE_IF
 +
 +# Добавляем новый мост
 +brctl addbr $BRIDGE_IF
 +
 +# Включаем в мост интерфейс
 +brctl addif $BRIDGE_IF $LOCAL_IF
 +
 +# Убираем адрес с интерфейса, входящего в мост и поднимаем его
 +ifconfig $LOCAL_IF 0.0.0.0 promisc up
 +
 +# Назначаем мосту адрес
 +ifconfig $BRIDGE_IF $BRIDGE_IP netmask $BRIDGE_MASK broadcast $BRIDGE_BROADCAST
 +
 +# Включаем мост
 +ifconfig $BRIDGE_IF up
 +
 +# для поднятия моста нужно время,  ждём
 +sleep 5
 +</code>
 +
 +Ну, и дополним ///etc/rc.d/rc.local//
 +<code>
 +/etc/rc.d/rc.libvirt start
 +sleep 5
 +/usr/sbin/virtlogd -d
 +
 +# Start bridge for VMs
 +/etc/rc.d/add-kvmbr
 +</code>
 +
 +Для чистоты эксперимента //reboot// сервера, после чего видим, что всё задуманное получилось и пора поднимать виртуальные машины.
 +<code>
 +# ifconfig
 +br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
 +        inet 192.168.121.1  netmask 255.255.255.0  broadcast 192.168.121.255
 +        inet6 fe80::225:90ff:fed3:6055  prefixlen 64  scopeid 0x20<link>
 +        ether 00:25:90:d3:60:55  txqueuelen 0  (Ethernet)
 +        RX packets 239  bytes 22419 (21.8 KiB)
 +        RX errors 0  dropped 0  overruns 0  frame 0
 +        TX packets 7  bytes 510 (510.0 B)
 +        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 +
 +eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
 +        inet 192.168.10.211  netmask 255.255.255.0  broadcast 192.168.10.255
 +        inet6 fe80::225:90ff:fed3:6054  prefixlen 64  scopeid 0x20<link>
 +        ether 00:25:90:d3:60:54  txqueuelen 1000  (Ethernet)
 +        RX packets 264  bytes 23917 (23.3 KiB)
 +        RX errors 0  dropped 6  overruns 0  frame 0
 +        TX packets 34  bytes 5615 (5.4 KiB)
 +        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 +        device interrupt 20  memory 0xfb500000-fb520000  
 +
 +eth1: flags=4419<UP,BROADCAST,RUNNING,PROMISC,MULTICAST>  mtu 1500
 +        inet6 fe80::225:90ff:fed3:6055  prefixlen 64  scopeid 0x20<link>
 +        ether 00:25:90:d3:60:55  txqueuelen 1000  (Ethernet)
 +        RX packets 353  bytes 59220 (57.8 KiB)
 +        RX errors 0  dropped 1  overruns 0  frame 0
 +        TX packets 13  bytes 1048 (1.0 KiB)
 +        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 +        device interrupt 17  memory 0xfb100000-fb120000  
 +
 +lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
 +        inet 127.0.0.1  netmask 255.0.0.0
 +        inet6 ::1  prefixlen 128  scopeid 0x10<host>
 +        loop  txqueuelen 0  (Local Loopback)
 +</code> 
 +<code>
 +# ps aux | grep virt
 +root       838  0.0  0.1 338164  8584 ?        Sl   15:36   0:00 /usr/sbin/libvirtd -d -l -v -f /etc/libvirt/libvirtd.conf -p /var/run/libvirt/libvirtd.pid
 +root       911  0.0  0.0  60296  1236 ?        Sl   15:36   0:00 /usr/sbin/virtlogd -d
 +root       980  0.0  0.0   7116   968 pts/1    S+   15:54   0:00 grep virt
 +</code>
 +
 +После создания виртуальных машин, при необходимости запуска их во время загрузки, есть смысл прописать следующие команды в некий файл, который запускать в ///etc/rc.d/rc.local//:
 +<code>
 +/usr/sbin/virsh start slackware64-14.2-fileserver
 +/usr/sbin/virsh start slackware64-14.2-1c
 +/usr/sbin/virsh start slackware64-14.2-AD
 +/usr/sbin/virsh start windows-7
 +</code>
 +в этом примере идёт запуск виртуальных машин по их названию образа.
 +
 +Аналогично и их отключение.
 +<code>
 +/usr/sbin/virsh shutdown slackware64-14.2-fileserver
 +/usr/sbin/virsh shutdown slackware64-14.2-1c
 +/usr/sbin/virsh shutdown slackware64-14.2-AD
 +/usr/sbin/virsh shutdown windows-7
 +</code>
 +
 +===== На компьютере =====
 +Конфигурация компьютера особой роли не играет.\\
 +Slackware Linux установлен стандартно с KDE.\\
 +\\
 +OS  - Slackware Linux 14.1 32-bit\\
 +Ядро- 3.10.17-smp\\
 +KDE - 4.10.5\\
 +IP - любой из подсети 192.168.10.0/24\\
 +\\
 +После установки системы устанавливаем //sbopkg// и обновляем саму систему при помощи //slackpkg//, предварительно настроив его на какое-либо зеркало.
 +<code>
 +# slackpkg update
 +# slackpkg upgrade-all
 +</code> 
 +Далее удаляем пакет //nc// и ставим нужные пакеты при помощи //sbopkg//
 +<code>
 +# removepkg nc
 +# sbopkg -kBi "libbsd netcat-openbsd vala celt051 device-tree-compiler spice-protocol pyparsing \ 
 +spice usbredir vala gtk-vnc ipaddr-py libosinfo yajl libvirt libvirt-glib libvirt-python \
 +gnome-python2-gconf tunctl python-urllib3 python-requests gtk-vnc spice-protocol gstreamer1 \
 +gst1-plugins-base spice-gtk vte3 pygobject3 urlgrabber virt-manager"
 +</code>
 +Обновляем //libvirt// и //virt-manager// до последних версий. Я обновил путем редактирования //info// и //SlackBuild// в //sbopkg//. В итоге получил:\\
 +
 +libvirt-1.3.2-i486-1_SBo \\ 
 +virt-manager-1.3.2-i486-1_SBo \\
 +
 +===== Установка виртуальных машин =====
 +Управлять виртуальными машинами можно из консоли при помощи утилиты //virsh//, но мы воспользуемся её графической альтернативой - //virt-manager//'ом.\\
 +Запустить его можно 2 способами:\\
 +1. //К -> Система -> Менеджер виртуальных машин//\\
 +2. из консоли
 +<code>
 +$ virt-manager
 +</code>
 +{{ :wiki:vm-1.png?400 |}}
 +\\
 +Так как соединение буде через //ssh//, то лучше сначала соединиться в консоли, что бы получить ключ и добавить его в //known_hosts//. А иначе просто придётся отвечать на лишние вопросы :). Пользователь может быть любой, входящий в группу "users" на сервере. Указать другую группу можно в ///etc/libvirt/libvirtd.conf//. Я соединюсь под //root//'ом.\\
 +Добавим соединение с нашим сервером. //Файл -> Добавить соединение//. Ставим галку //"Удалённое подключение"//, выбираем тип соединения //SSH//, вводим имя пользователя и IP-адрес узла, нажимаем на //"Подключиться"//.
 +
 +{{ :wiki:vm-2.png?600 |}}
 +
 +Вводим пароль пользователя.
 +
 +{{ :wiki:vm-3.png?200 |}}
 +
 +Видим, что подключились.
 +
 +{{ :wiki:vm-4.png?400 |}}
 +
 +Добавим виртуальную машину. //Файл -> Новая виртуальная машина// или просто кнопка //"Новая"//. Выбираем метод установки //"Локальный ISO или CDROM"// и нажимаем //"Вперед"//.
 +
 +{{ :wiki:vm-5.png?600 |}}
 +
 +Выбираем тип и версию операционной системы, а так же образ ISO нажав на кнопку //"Обзор"//.
 +
 +{{ :wiki:vm-6.png?400 |}}
 +
 +Предложенные по умолчанию тома хранилищ, я удалил т.к. установочные ISO-образы у меня хранятся в отдельном каталоге, а образы виртуальных машин будут на отдельных разделах. Поэтому создадим новые тома с моими путями нажав на //"+" (Добавить пул)//.
 +
 +{{ :wiki:vm-7.png?600 |}}
 +
 +Дадим название пулу, выберем тип - //"каталог в файловой системе"// и нажмем кнопку //"Вперед".//
 +
 +{{ :wiki:vm-8.png?400 |}}
 +
 +Укажем каталог с ISO-образами. Почему-то кнопка //"Обзор"// не активна, поэтому просто вводим путь вручную и нажимаем кнопку //"Готово"//.
 +
 +{{ :wiki:vm-9.png?400 |}}
 +
 +В появившемся списке выбираем нужный ISO-образ и нажимаем на кнопку //"Выбор тома"//
 +
 +{{ :wiki:vm-10.png?600 |}}
 +
 +Прописался путь до ISO-образа, жмём //"Вперед"//.
 +
 +{{ :wiki:vm-11.png?400 |}}
 +
 +Выделяем виртуальной машине ОЗУ, количество процессоров и жмём //"Вперед"//.
 +
 +{{ :wiki:vm-12.png?400 |}}
 +
 +Как видим, перевод на русский язык выполнен не до конца. Ничего страшного, в этом окне "работаем по-английски" :).\\
 +Так как я выделил для образов виртуальных машин отдельные разделы, примонтированные в отдельные каталоги, то их нам и надо указать как стороннее хранилище. Поэтому выбираем //"Select or create custom storage"// и жмём на кнопку //"Manage"//.
 +
 +{{ :wiki:vm-13.png?400 |}}
 +
 +Теперь необходимо указать каталог, где будет располагаться образ виртуальной машины. Создадим новый том нажав на //"+" (Добавить пул)//. Дадим название пулу, выберем тип - //"каталог в файловой системе"// и нажмем кнопку //"Вперед".//
 +
 +{{ :wiki:vm-14.png?600 |}}
 +
 +Укажем каталог. Кнопка //"Обзор"// опять не активна, поэтому просто вводим путь вручную и нажимаем кнопку //"Готово"//.
 +
 +{{ :wiki:vm-15.png?600 |}}
 +
 +Создаем образ виртуальной машины в выбранном пуле нажав на //"+" (Создать том)//.
 +
 +{{ :wiki:vm-16.png?600 |}}
 +
 +Даём название образу и, так как используем QEMU, выбираем формат //qcow2//. Под размер тома отдаём практически всё пространство и нажимаем кнопку //"Готово"//.
 +
 +{{ :wiki:vm-17.png?400 |}}
 +
 +Выбираем появившийся образ виртуальной машины и жмём //"Выбор тома"//.
 +
 +{{ :wiki:vm-18.png?600 |}}
 +
 +Путь до образа виртуальной машины прописался, жмём //"Вперед"//.
 +
 +{{ :wiki:vm-19.png?400 |}}
 +
 +Проверяем всё ли верно прописано, ставим галку //"Дополнить конфигурацию перед установкой"//, в //"Выбор сети"// выбираем созданный ранее на сервере //br0// и жмём на кнопку //"Готово"//. Если где-то ошиблись, то возвращаемся назад и исправляем.
 +
 +{{ :wiki:vm-20.png?400 |}}
 +
 +В открывшимся окне в левом списке выбирем //"Дисплей Spice"// и поменяем:\\
 +//Тип// на //VNC-сервер//, //Адрес// - //Все интерфейсы//, //Порт// - уберем галку с //"Авто"// и пропишем вручную //"5901"// (мы же сами хотим всё контролировать? :) ), введём пароль и выбирем раскладку. Нажимаем кнопку //"Применить"// и //"Начать установку"//.
 +
 +{{ :wiki:vm-21.png?600 |}}
 +
 +Вводим пароль для подключения к серверу VNC, тот, что мы ввели ранее в соседнем окне настроек.
 +
 +{{ :wiki:vm-23.png?600 |}}
 +
 +После ввода пароля мы видим процесс установки ОС на виртуальную машину.
 +
 +{{ :wiki:vm-25.png?600 |}}
 +
 +После того, как завершится весь процесс установки, настраиваем сеть в гостевой системе на нашу ЛВС. И она становится её частью! :)
 +
 +=== Ссылался на... ===
 +-----
 +http://docs.slackware.com/howtos:general_admin:kvm_libvirt
 +
 +[[http://slackware.su/forum/index.php/topic,2640.0.html | Обсуждаем на форуме]]
  
Навигация
Печать/экспорт
QR Code
QR Code wiki:articles:kvm (generated for current page)