Debian.pro

Блог для пользователей и администраторов Debian


KVM на Debian.

Несколько недель назад я выбрал себе KVM для виртуализации. Сразу отвечу на вопросы «почему?»: виртуальные машины под KVM шустры и позволяют запускать любую ОС. Еретические ОС я не пробовал, но Debian и FreeBSD бегают под KVM+Debian очень и очень неплохо — это признают даже бывалые администраторы.

Если вы готовы за скорость заплатить удобством настройки и использования хост-машины — просим под кат.

Устанавливал я KVM на машинку с процессором core i7. Рекомендую использовать именно многоядерные процессоры с HT. При том не стоит отдавать виртуальным машинам виртуальных процессоров больше, чем есть ядер на хост-машине. В случае с i7 я получил 8 ядер, которые в дальнейшем смогу разделить как пожелаю между контейнерами.  Если раздать больше процессоров чем есть — это может сказаться на производительности.

Первым делом проверяем — поддерживает ли процессор аппаратную виртуализацию:

cat /proc/cpuinfo | egrep ‘(svm|vmx)’
Если после ввода команды на экране появился какой-либо текст — то ваш процессор поддерживает аппаратную виртуализацию. Если вывод команды пустой — то не стоит использовать KVM. Да и вообще не стоит использовать современные гипервизоры.

Теперь устанавливаем необходимые пакеты:

sudo apt-get install kvm libvirt-bin virtinst bridge-utils

После чего стоит перезагрузить хост. Конечно же стоит использовать последнее доступное стабильное linux-ядро, доступное в репозиториях.

Проверяем, установился ли KVM:

virsh -c qemu:///system list —all

Вывод команды опять же должен быть не пустым и не содержать ошибок вида «команда не найдена».

Приступим к настройке сети на хост машине. Приведем файл /etc/network/interfaces к следующему виду:

auto lo

iface lo inet loopback
auto  eth0
iface eth0 inet static
auto br0
iface br0 inet static
address   178.ххх.ххх.137
netmask   255.255.255.192

network 178.ххх.ххх.0
broadcast 178.ххх.ххх.191
gateway   178.ххх.ххх.129
bridge_ports eth0
bridge_fd 9
bridge_hello 2
bridge_maxage 12
bridge_stp off

После чего применяем все сетевые настройки:

/etc/init.d/networking restart

Для удобства создадим каталоги:

mkdir /iso && mkdir /vms

И скачаем образ установочный образ debian:

cd /iso && wget -c http://cdimage.debian.org/debian-cd/5.0.4/amd64/iso-cd/debian-504-amd64-CD-1.iso

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

virt-install -n vm1 -r 1024 -f /vms/vm1.img -s 50 -c /iso/debian-cd/5.0.4/amd64/iso-cd/debian-504-amd64-CD-1.iso —accelerate —os-type=linux —os-variant=generic26 -v —vnc -w bridge:br0

Расскажу о приведенных выше опциях:

-n vm1 — имя домена (виртуальной машины)

-r 1024 — количество оперативной памяти

-f /vms/vm1.img — расположение «жесткого диска».

-s 50 — размер «жесткого диска»

-c /iso/debian-cd/5.0.4/amd64/iso-cd/debian-504-amd64-CD-1.iso — указываем iso образ, с которого будем производить установку системы. Рекомендую запускать 64х битные образы под 64й битной ОС хост-машины.

—accelerate —os-type=linux —os-variant=generic26 -v — оптимизируем VDS для работы с виртуальным Linux с ядром 2.6.хх

—vnc — запускаем VNC-сервер для доступа к виртуальной машине.

-w bridge:br0 — указываем, что виртуальная машина должна использовать сетевлй мост br0  хост-машины

Теперь перейдем к установке ОС на виртуальную машину.

На вашем компьютере (не на сервере, а на рабочей станции с графической средой) вводим команды:

ssh -L 5900:localhost:5900 root@178.ххх.ххх.137

И во второй консоли:

vncviewer localhost:5900

Теперь вы должны увидеть в VNC установщик Debian. Ставим всё как обычно (возможно вам будет недоступна сеть). После того, как установщик Debian отправит систему в перезагрузку — виртуальная машина выключится, вместо того, чтобы перезагрузиться.

Самое время изменить количество выделенных процессоров для виртуальной машины:

virsh -c qemu:///system setvcpus vm1 2

Эта команда сработает, только если виртуальная машина находится в выключенном состоянии.  Теперь запустим её снова:
virsh -c qemu:///system start vm1
Теперь нужно настроить сеть на виртуальной машине. Заходим на неё по VNC и приводим файл /etc/network/interfaces к следующему виду:

auto lo

iface lo inet loopback

allow-hotplug eth0

iface eth0 inet static

address 178.xxx.xxx.177

netmask 255.255.255.192

network 178.xxx.xxx.128

broadcast 178.xxx.xxx.191

gateway 178.xxx.xxx.137

Шлюзом необходимо указать ip-адрес хост-сервера. Так же стоит прописать NS в файл /etc/resolv.conf

Теперь ваша виртуальная машина работает и доступна из сети (а в моём случае она стала доступна и из интернета).

Осталось сделать aptitude update && aptitude upgrade && aptitude install openssh-server и зайти на виртуальный сервер по SSH.

Пользуясь случаем расскажу вам, что у хостера QS.biz сдаются в аренду VDS на KVM.


Комментарии (27):

  1. Обидно что теряется один ip на bridge.

  2. wilful :

    Не знаю точно, но вроде как в таком виде по умолчанию
    virt-install -n vm1 -r 1024 -f /vms/vm1.img -s 50 -c /iso/debian-cd/5.0.4/amd64/iso-cd/debian-504-amd64-CD-1.iso –accelerate –os-type=linux –os-variant=generic26 -v –vnc -w bridge:br0
    virt-install пытается подключиться к xen, у меня по крайней мере было так, может стоить добавить однозначно?
    virt-install —connect qemu:///system …

  3. XIT :

    Можно ли при установки задать число ядер для использования? Аля make -j, а то qemu выкушивает 1-о ядро на 100%, установка системы идёт около 1-го часа.

  4. —vcpus=2 опция

  5. XIT :

    Спасибо за ответ. Но т.к. не было задано первоначально при создании vm1, пытаюсь сделать так:

    virsh -c qemu:///system setvcpus vm1 2

    и получаю ошибку:
    error: Requested operation is not valid: domain is not running

    vm1 отключена:
    virsh -c qemu:///system list —all
    Id Name State
    ———————————-
    — vm1 shut off

  6. virsh edit vm1
    Там в конфиге найдите cpu count или как то так (i — режим редактирования, потом esc, потом :wq).
    С выключенной виртуалкой, само собой.

  7. XIT :

    Да, так получилось. Но похоже я напутал сущности. По сути хотелось отвести два физ. ядра на одного гостя. Спасибо за подсказки.

  8. Thorwald :

    При подключении по vnc в консоль вываливается сообщение «channel 3: open failed: connect failed: Connection refused» и «vncviewer: VNC server closed connection». Куда копать?

  9. значит не тот порт пробросили. Или опцию —vnc забыли указать при создании виртуалки. В любом случае проще воспользоваться virt-manager’ом.

  10. Сергей :

    Запустил на kvm несколько виртуальных машин благодаря вашим статьям. Все получилось неплохо. Из-за лени и по незнанию создавал вирт машины черз Convirt, развернутый на ubuntu рабочей станции (не на host-машине). Потом понял, что это не удобно и удобнее управлять вирт машинами с консоли host машины, например через virsh. В связи с этим вопрос. Подскажите, как мне конвертировать или перенести настойки виртуальных машин из Convirt в xml файл, который затем использовать в virsh. Буду очень благодарен. Может быть подскажите какой другой способ изменения среды управления вирт машинами?

  11. Создайте новые машины через virt-install и подключите к ним образы от старых. Смысла мучаться с конфигами я не вижу.

    Насчет управления — virt-manager отличная вещь. Его нужно ставить локально, через него можно подцепиться к удаленному серверу с libvirtd включенным.

  12. wilful :

    Добрый день!

    У меня такой вопрос, небыло ли у вас описаний как установить в KVM машину с определенной разметкой дисков (аналог xen-partition), пока я не особо понимаю как это сдесь реализовать, может можно сразу несколько дисков подключать?

  13. Хым. А зачем?
    Систему будете ставить — поделите диск виртуальный как нужно.

  14. Vlad :

    пинг

  15. vlad :

    пинг2

  16. vlad :

    Тест3

  17. thomas :

    > ssh -L 5900:localhost:5900 root@178.ххх.ххх.137

    возможно, глупый вопрос, но все же: какой пароль от рута на root@178… ?

  18. thomas :

    а не. все понял. я подумал в начале-нужен пароль на гостевую систему

  19. thomas :

    все хорошо. но разрешение не радует совсем. увеличить невозможно?

    http://tinypic.com/view.php?pic=10z76lk&s=5

  20. У инсталлера — нет. В установленной системе, само собой, можно.

  21. mrdi :

    подскажите, после установки оси на виртуалку, как ее стартовать при старте самого хоста?

  22. в virsh edit vmname
    или через virt-manager подцепитесь и поставьте галочку.

    Я обычно делаю скрипт startup.sh и его запускаю на взлете машины. А там уже всякие нужные штуковины — бриджи, роутинг, файрволл и старт машинок.

  23. Evgeniy :

    Почему-то не получается назначить статический ip гостевой. Сеть такая — в интернет смотрит роутер с внешним ip, после него стоит компьютер с хостом 192.168.1.10, потом гостевая, ip раздает роутер. Если в настройках сетевой стоит dhcp — все нормально, ловит ip по порядку и работает. Но если попытаться поставить статический — интернета в гостевой нет. Если потом вернуть настройки и перезапустить интерфейс — сеть все равно не поднимается, приходится ребутить. На данный момент нашел решение способом прописать мак и роутер выдает нужный ай-пи, а в гостевой dhcp. Это не совсем кошерно и хочется узнать, куда копать?

  24. Давайте конкретику.
    interfaces, ip ro sh при dhcp и при статике, для начала (в виртуалке).
    При прописанной статике внутри сети машинка видна?

  25. Sergey :

    Добрый день.
    А не подскажите как прокидывать vlan в виртуальные машины? И вообще есть какая-нибудь подробная статья про vlan в KVM не могу найти?

Написать комментарий