Показаны сообщения с ярлыком kvm. Показать все сообщения
Показаны сообщения с ярлыком kvm. Показать все сообщения

18 июня 2010 г.

Продолжение про kvm

Продолжим записи про kvm.
Чтобы виртуальная система загружалась автоматически при старте основной системы, надо выполнить:

#virsh autostart name_domain

Чтобы корректно выключить (эмулируется нажатие на клавишу питания, что для современных дебианов с поддержкой acpi обеспечивает корректное завершение работы) виртуальную машину выполните:

#virsh shutdown name_domain

Ну и чтобы запустить, выполните:

#virsh start name_domain

Теперь про выключение/перезагрузку основной системы и соответственное выключение виртуальных машин (может очень полезным при выключении основной системы с помощью apcupsd (управление питанием в зависимости от состояния бесперебойника APC).


Создаем скрипт /etc/init.d/vmshutdown


#!/bin/bash

# Original Author :
# Joern http://www.linux-kvm.com/content/stop-script-running-vms-using-virsh
#
# Modified by : Vivek Kapoor http://exain.com
# Date: 22 May 2009

# Parameters you can modify :: START

TIMEOUT=90
LISTFILE=/root/runvm.lst
LOGFILE=/var/log/kvmshutdown.log
# Parameters you can modify :: STOP

PS=/bin/ps
SSH=/usr/bin/ssh
GREP=/bin/grep
CUT=/usr/bin/cut
VIRSH=/usr/bin/virsh
TR=/usr/bin/tr
CAT=/bin/cat
DATE=/bin/date

# Function to shutdown the virtual machine
kvmshutdown () {
COUNT=0
PID=$($PS ax|$GREP $1|$GREP kvm|$CUT -c 1-6)

echo kvmshutdown \: Shutting down $1 with pid $PID

#$VIRSH shutdown $1
$($SSH root@$1 halt)

while [ "$COUNT" -lt "$TIMEOUT" ]
do
$PS --pid $PID
if [ "$?" -eq "1" ]
then
return 0
else
sleep 5
COUNT=$(($COUNT+5))
fi
done

echo kvmshutdown \: Timeout happened. Destroying VM $1

$VIRSH destroy $1

return 1

}

# The program begins here

$VIRSH list 2>/dev/null|$GREP running|$TR -s \ |$CUT -f3 -d\ > $LISTFILE

VMN=`$CAT $LISTFILE`

for vm in $VMN
do
echo "$vm" is running
kvmshutdown "$vm"
if [ "$?" -eq "0" ]
then
echo VM "$vm" normally shutdown
echo `$DATE +%Y-%m-%d\ %H:%M:%S` VM $vm normally shutdown >> $LOGFILE
else
echo VM "$vm" destroyed !
echo `$DATE +%Y-%m-%d\ %H:%M:%S` VM $vm destroyed >> $LOGFILE
fi;
done


Далее, права запуска:
#chmod 755 vmshutdown

Проверяем выключение по ssh (как в скрипте, есть вариант через virsh - пробуйте), не забыв прописать хост в /etc/hosts.

server:/etc/init.d# ./vmshutdown stop

У меня спросил разрешения на отпечаток ключа RSA, после пароль рута, и только тогда выключился. Наверное метод через ssh требует беспарольного доверенного соединение, поэтому вернемся к virsh (закомментируем $($SSH root@$1 halt) и раскомментируем $VIRSH shutdown $1).

Пробуем:

server:/etc/init.d# ./vmshutdown stop

У меня все получилось - скрипт выключил все виртуальные машины. Остается внедрить его в rc.d.

Смотрим на уровень запуска самого kwm на основной системе.

/etc/rc0.d# ls | grep kvm
K20qemu-kvm

Посему выставляем 18 уровень для завершения виртуальных машин.


#ln -s /etc/init.d/vmshutdown /etc/rc0.d/K18vmshutdown
#ln -s /etc/init.d/vmshutdown /etc/rc6.d/K18vmshutdown


Теперь подключаемся по ssh к виртуальным машинам и к основному хосту. На основном выполняем:
#poweroff
или:
#reboot
и наблюдаем за виртуальными машинами.

Они должны выключиться раньше основной.

Ну а выключение с помощью apcupsd или позже или не буду описывать, ибо мануалов много, посмотрим.

13 июня 2010 г.

Установка kvm на Debian Squeeze

Займемся виртуализацией, с аппаратной поддержкой процессора.

KVM (или Kernel-based Virtual Machine) — это программное решение, обеспечивающее виртуализацию в среде Linux на платформе x86, которая поддерживает аппаратную виртуализацию на базе Intel VT (англ.) (Virtualization Technology) либо AMD SVM (Secure Virtual Machine).

Добавлю, без аппаратной поддержки процессором она, как я понял, работать не будет.

Ставим основную систему. Для создания загрузочной флешки используем уже установленный линукс.
У меня будущий серверный процессор AMD, а также потому что squeeze еще unstable, качаем образ отсюда. Я скачал debian-testing-amd64-netinst.iso.

Основную систему будем ставить с флешки. Качаем файл boot.img.gz отсюда. Далее распаковываем образ на флешку:

#zcat boot.img.gz > /dev/sdX

где /dev/sdX - ваша флешка.

Далее вытащим и вставим флешку обратно. Скопируем в корень на автоматически примонтированную флешку файл debian-testing-amd64-netinst.iso. Все, отмонтируем флешку, вставляем в наш сервер, загружаемся и устанавливаем систему.

Создадим две директории - iso для установочных образов, vms для образов виртуальных машин. Копируем с флешки образ в iso.

Устанавливаем kvm:

#apt-get install qemu-kvm libvirt-bin virtinst bridge-utils

bridge-utils - сетевой мост. Настраиваем:

auto eth0
iface eth0 inet manual

auto br0
iface br0 inet static
address 192.168.0.20
netmask 255.255.255.0
gateway 192.168.0.1
bridge_ports eth0
bridge_fd 9
bridge_hello 2
bridge_maxage 12
bridge_stp off

Перезагружаемся.

Проверяем

#ifconfig
#virsh list

virsh - это команда управления виртуальными машинами.

полезно virsh help.

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

#virt-install -n mediasrv -r 256 -f /vms/mediasrv.qcow2 -s 300 -c /iso/debian-testing-amd64-netinst.iso --vnc --vncport=5900 --noautoconsole --os-type linux --os-variant=generic26

-r - оперативная память
-f - файл-образ сервера
-s - размер файл-образа в гигабайтах
-c - cdrom
- остальное понятно.

как ни странно, но подключиться напрямую к vnc серверу (с другой системы в сети) мне не удалось, по-видимому Vinagre не справляется с авторизацией. Поэтому у меня получилось подключиться через ssh тунель:

$ ssh -L 5900:localhost:5900 root@server

После подключения, в Vinagre подключаемся к localhost:5900 и попадаем на новую виртуальную систему, с экраном установки debian.

Устанавливаем ssh на обе системы и дальше дело техники.

ps. В планах опробовать паравиртуализацию.