Последнее время применение виртуализации при построении серверной инфраструктуры встречается все чаще. Гибкость, масштабируемость, экономия делают эту технологию очень перспективной. Сейчас на рынке существует достаточное количество решений, как проприетарных, так и open source, позволяющих развернуть виртуальные сервера. Один из таких вариантов я хочу рассмотреть в данной статье.
Поигравшись с ГУЙовыми платформами виртуализации от Microsoft, VMware и Sun, я решил попробовать сделать тоже самое через консоль. Установив давно понравившийся мне linux дистрибутив ubuntu, стал выбирать — на какой же реализации виртуальных машин (ВМ) остановиться. В википедии есть интересная табличка, хотя посмотрев оффициальный help к ubuntu я понял, что лучше начать с KVM.
Процедура установки хост-сервера в общем-то стандартная, но есть нюансы. Во время установки включил LVM (как я понял — гостевые ОС можно впоследстии размещать на LVM-томах, что придаст дополнительную гибкость), а в окне выбора доустанавлемого ПО отметил OpenSSH server и Virtual Machine host.
Хост-серверу задан статический ip 172.16.4.24, что можно увидеть далее в приведенных конфигах.
После установки хост-сервера, подключаемся к нему по ssh (одноименной командой из linux или putty/kitty из windows).
Первым делом необходимо проверить, поддерживает ли железо сервера аппаратную виртуализацию командой
egrep '(vmx|svm)' /proc/cpuinfo
Если вывод команды не пустой, значит поддерживает.
Скачиваем в домашнюю папку iso-образ того дистрибутива операционной системы, которая в последствии будет гостевой. У меня это тот же самый ubuntu-9.04-server-amd64.iso
Устанавливаем необходимые пакеты:
sudo apt-get install kvm libvirt-bin python-virtinst bridge-utils
Добавляем пользователя, который будет рулить виртуалками (в простейшем случае это тот пользователь, которого мы завели во время установки системы, и под которым проделываем все описываемые действия):
sudo adduser $USER libvirtd
После этого лучше ребутнуться.
Проверяем, как установилась KVM, командой:
virsh -c qemu:///system list --all
В консоли должно появиться примерно следующее:
az@vsrvs:~$ virsh -c qemu:///system list --all
Connecting to uri: qemu:///system
Id Name State
----------------------------------
если все так, продолжаем.
Для того, чтобы виртуальные сервера работали в нашей реальной локальной сети на хост-машине создаем сетевой мост. Для этого надо подредактировать файл /etc/network/interfaces
Так он выглядел до модификации:
Так после:
Далее переходим к инсталляции ВМ:
sudo virt-install -n vsrv1 -r 384 -f vsrv1.img -s 10 -c ubuntu-9.04-server-amd64.iso --accelerate --os-type=linux --os-variant=generic26 -v --vnc -w bridge:br0
где:
-n vsrv1 — имя ВМ;
-r 384 — выделяемый объем ОЗУ для нее;
-f vsrv1.img — файл, являющийся виртуальный жестким диском для гостевой ОС;
-s 10 — объем этого диска в гигабайтах;
-c ubuntu-9.04-server-amd64.iso — образ cd дистрибутива гостевой ОС, подключаемый как виртуальный cdrom;
--accelerate --os-type=linux --os-variant=generic26 -v — ускоряем, оптимизируем ВМ для конкретной гостевой ОС и задействуем аппаратные возможности виртуализации;
--vnc — запускаем для ВМ vnc-сервер;
-w bridge:br0 — указываем использовать сетевой мост.
Если после запуска этой команды не появилось никаких ошибок, а отобразилось нечто следующее:
Starting install…
Creating domain… 0 B 00:01
/usr/lib/python2.6/dist-packages/virtinst/Guest.py:1086: DeprecationWarning: integer argument expected, got float
for ignore in range(1, (5 / .25)): # 5 seconds, .25 second sleeps
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.
То все отлично, виртуальная машина запустилась, что можно проверить командой:
virsh -c qemu:///system list --all
Поэтому преступаем к установке гостевой ОС.
Для начала необходимо подключится к vnc-серверу, который отображает экран ВМ. Я делал это из WinXP, хотя, из практически любого linux дистрибутива, это делается аналогично.
Устанавливаем (если в самом начале не установили, а настраивали сервер локально) ssh-клиент, например, kitty (доработанный вариант putty). Запускаем, настраиваем:
Примечание. При запуске еще одной ВМ, порт vnc-сервера увеличится на 1, поэтому для того, чтобы увидеть ее экран необходимо сделать перенаправление порта 5901 хост-сервера на, например, порт 59001.
Устанавливаем vnc-клиент, например UltraVNC, запускаем UltraVNC Viewer и подключаемся к localhost:59000. Если все сделано правильно, то мы увидим экран нашей ВМ с запущенным инсталлятором гостевой ОС.
Устанавливаем гостевую ОС.
Так она начинает загружаться после установки:
После установки и настройки гостевой ОС, ВМ можно клонировать командой
sudo virt-clone -o vsrv1 -n vsrv2 -f vsrv2.img --connect=qemu:///system
UPD: После клонирования для того, чтобы заработал сетевой интерфейс необходимо на клоне удалить файл /etc/udev/rules.d/70-persistent-net.rules ну и заодно изменить в /etc/hostname и в /etc/hosts имя сервера на новое.
TIP:
Команды для управления ВМ:
Использованные материалы:
Поигравшись с ГУЙовыми платформами виртуализации от Microsoft, VMware и Sun, я решил попробовать сделать тоже самое через консоль. Установив давно понравившийся мне linux дистрибутив ubuntu, стал выбирать — на какой же реализации виртуальных машин (ВМ) остановиться. В википедии есть интересная табличка, хотя посмотрев оффициальный help к ubuntu я понял, что лучше начать с KVM.
Процедура установки хост-сервера в общем-то стандартная, но есть нюансы. Во время установки включил LVM (как я понял — гостевые ОС можно впоследстии размещать на LVM-томах, что придаст дополнительную гибкость), а в окне выбора доустанавлемого ПО отметил OpenSSH server и Virtual Machine host.
Хост-серверу задан статический ip 172.16.4.24, что можно увидеть далее в приведенных конфигах.
После установки хост-сервера, подключаемся к нему по ssh (одноименной командой из linux или putty/kitty из windows).
Первым делом необходимо проверить, поддерживает ли железо сервера аппаратную виртуализацию командой
egrep '(vmx|svm)' /proc/cpuinfo
Если вывод команды не пустой, значит поддерживает.
Скачиваем в домашнюю папку iso-образ того дистрибутива операционной системы, которая в последствии будет гостевой. У меня это тот же самый ubuntu-9.04-server-amd64.iso
Устанавливаем необходимые пакеты:
sudo apt-get install kvm libvirt-bin python-virtinst bridge-utils
Добавляем пользователя, который будет рулить виртуалками (в простейшем случае это тот пользователь, которого мы завели во время установки системы, и под которым проделываем все описываемые действия):
sudo adduser $USER libvirtd
После этого лучше ребутнуться.
Проверяем, как установилась KVM, командой:
virsh -c qemu:///system list --all
В консоли должно появиться примерно следующее:
az@vsrvs:~$ virsh -c qemu:///system list --all
Connecting to uri: qemu:///system
Id Name State
----------------------------------
если все так, продолжаем.
Для того, чтобы виртуальные сервера работали в нашей реальной локальной сети на хост-машине создаем сетевой мост. Для этого надо подредактировать файл /etc/network/interfaces
Так он выглядел до модификации:
# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # The primary network interface auto eth0 iface eth0 inet static address 172.16.4.24 netmask 255.255.255.192 network 172.16.4.0 broadcast 172.16.4.63 gateway 172.16.4.1
Так после:
# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # The primary network interface auto eth0 iface eth0 inet manual auto br0 iface br0 inet static address 172.16.4.24 netmask 255.255.255.192 network 172.16.4.0 broadcast 172.16.4.63 gateway 172.16.4.1 bridge_ports eth0 bridge_fd 9 bridge_hello 2 bridge_maxage 12 bridge_stp off
Далее переходим к инсталляции ВМ:
sudo virt-install -n vsrv1 -r 384 -f vsrv1.img -s 10 -c ubuntu-9.04-server-amd64.iso --accelerate --os-type=linux --os-variant=generic26 -v --vnc -w bridge:br0
где:
-n vsrv1 — имя ВМ;
-r 384 — выделяемый объем ОЗУ для нее;
-f vsrv1.img — файл, являющийся виртуальный жестким диском для гостевой ОС;
-s 10 — объем этого диска в гигабайтах;
-c ubuntu-9.04-server-amd64.iso — образ cd дистрибутива гостевой ОС, подключаемый как виртуальный cdrom;
--accelerate --os-type=linux --os-variant=generic26 -v — ускоряем, оптимизируем ВМ для конкретной гостевой ОС и задействуем аппаратные возможности виртуализации;
--vnc — запускаем для ВМ vnc-сервер;
-w bridge:br0 — указываем использовать сетевой мост.
Если после запуска этой команды не появилось никаких ошибок, а отобразилось нечто следующее:
Starting install…
Creating domain… 0 B 00:01
/usr/lib/python2.6/dist-packages/virtinst/Guest.py:1086: DeprecationWarning: integer argument expected, got float
for ignore in range(1, (5 / .25)): # 5 seconds, .25 second sleeps
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.
То все отлично, виртуальная машина запустилась, что можно проверить командой:
virsh -c qemu:///system list --all
Поэтому преступаем к установке гостевой ОС.
Для начала необходимо подключится к vnc-серверу, который отображает экран ВМ. Я делал это из WinXP, хотя, из практически любого linux дистрибутива, это делается аналогично.
Устанавливаем (если в самом начале не установили, а настраивали сервер локально) ssh-клиент, например, kitty (доработанный вариант putty). Запускаем, настраиваем:
- Во вкладке Session — Host Name (or IP address) адрес нашего хост-сервера (в моем случае 172.16.4.24).
- Во вкладке Windows-Translation — выбираем UTF-8.
- Во вкладке Connection-SSH-Tunnels — заполняем поля Source port 59000, Destination localhost:5900, нажимаем Add. Должна появится следующая запись:
- Жмем Open и мы должны подключится по SSH к хост-серверу. Одновременно у нас произойдет перенаправление порта 5900 хост-сервера (порт vnc-сервера) на наш локальный 59000 порт.
Примечание. При запуске еще одной ВМ, порт vnc-сервера увеличится на 1, поэтому для того, чтобы увидеть ее экран необходимо сделать перенаправление порта 5901 хост-сервера на, например, порт 59001.
Устанавливаем vnc-клиент, например UltraVNC, запускаем UltraVNC Viewer и подключаемся к localhost:59000. Если все сделано правильно, то мы увидим экран нашей ВМ с запущенным инсталлятором гостевой ОС.
Устанавливаем гостевую ОС.
Так она начинает загружаться после установки:
После установки и настройки гостевой ОС, ВМ можно клонировать командой
sudo virt-clone -o vsrv1 -n vsrv2 -f vsrv2.img --connect=qemu:///system
UPD: После клонирования для того, чтобы заработал сетевой интерфейс необходимо на клоне удалить файл /etc/udev/rules.d/70-persistent-net.rules ну и заодно изменить в /etc/hostname и в /etc/hosts имя сервера на новое.
TIP:
Команды для управления ВМ:
- virsh -c qemu:///system help
Встроенная помощь по командам
- virsh -c qemu:///system list --all
Посмотреть статус установленных ВМ
- virsh -c qemu:///system start vsrv1
Запусить ВМ vsrv1
- virsh -c qemu:///system shutdown vsrv1
Послать команду завершения работы ВМ
- virsh -c qemu:///system destroy vsrv1
Принудительно завершить работу ВМ
- virsh -c qemu:///system undefine vsrv1
Удалить ВМ
Использованные материалы: