Пользователь
0,0
рейтинг
7 октября 2009 в 10:01

Администрирование → Установка виртуальных машин KVM под ubuntu server

Последнее время применение виртуализации при построении серверной инфраструктуры встречается все чаще. Гибкость, масштабируемость, экономия делают эту технологию очень перспективной. Сейчас на рынке существует достаточное количество решений, как проприетарных, так и open source, позволяющих развернуть виртуальные сервера. Один из таких вариантов я хочу рассмотреть в данной статье.

Поигравшись с ГУЙовыми платформами виртуализации от Microsoft, VMware и Sun, я решил попробовать сделать тоже самое через консоль. Установив давно понравившийся мне linux дистрибутив ubuntu, стал выбирать — на какой же реализации виртуальных машин (ВМ) остановиться. В википедии есть интересная табличка, хотя посмотрев оффициальный help к ubuntu я понял, что лучше начать с KVM.

Процедура установки хост-сервера в общем-то стандартная, но есть нюансы. Во время установки включил LVM (как я понял — гостевые ОС можно впоследстии размещать на LVM-томах, что придаст дополнительную гибкость), а в окне выбора доустанавлемого ПО отметил OpenSSH server и Virtual Machine host.image

Хост-серверу задан статический 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). Запускаем, настраиваем:
  1. Во вкладке Session — Host Name (or IP address) адрес нашего хост-сервера (в моем случае 172.16.4.24).
  2. Во вкладке Windows-Translation — выбираем UTF-8.
  3. Во вкладке Connection-SSH-Tunnels — заполняем поля Source port 59000, Destination localhost:5900, нажимаем Add. Должна появится следующая запись:
    image
  4. Жмем Open и мы должны подключится по SSH к хост-серверу. Одновременно у нас произойдет перенаправление порта 5900 хост-сервера (порт vnc-сервера) на наш локальный 59000 порт.

Примечание. При запуске еще одной ВМ, порт vnc-сервера увеличится на 1, поэтому для того, чтобы увидеть ее экран необходимо сделать перенаправление порта 5901 хост-сервера на, например, порт 59001.

Устанавливаем vnc-клиент, например UltraVNC, запускаем UltraVNC Viewer и подключаемся к localhost:59000. Если все сделано правильно, то мы увидим экран нашей ВМ с запущенным инсталлятором гостевой ОС.

Устанавливаем гостевую ОС.

Так она начинает загружаться после установки:image

После установки и настройки гостевой ОС, ВМ можно клонировать командой
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
    Удалить ВМ



Использованные материалы:
  1. man-ы представленных программ
  2. https://help.ubuntu.com/9.04/serverguide/C/virtualization.html
  3. http://www.howtoforge.com/virtualization-with-kvm-on-ubuntu-9.04
Антон Завьялов @zavant
карма
6,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Администрирование

Комментарии (22)

  • 0
    >Последнее время применение визуализации

    Это шутка? Может виртуализации?
    • 0
      поправил
  • 0
    Хочется спросить, а если у нас несколько ВМ, как между ними организовывать сеть?
    • 0
      Собственно, сетка подымется по умолчанию, но она будет приватная по отношению к сети хост-сервера, т.е. хост-сервер будет шлюзом, а ВМ будут иметь доступ в его сеть через NAT. Чтобы ВМ были в той же локальной сети, что и хост-сервер, необходимо создать на хосте сетевой мост и у каждой ВМ при ее инсталяции указать его использование (это как раз и описано в топике).
      • 0
        А как обстоят дела с производительностью сети? Или не замарачиались?
        И еще один вопрос, есть ли способ уеличить образ уже установленной системы? Ну было 10gb надо 20gb сделать.

        P.S и если не сложно можно на тему сети к вам обратится (подумать как лучше в моем варианте сделать)
        • 0
          Я сам первый раз поставил все это дело и толком еще не тестировал.
          1. По поводу производительности сети под kvm — вроде, что-то встречалось здесь. Попробуй поискать по тегу kvm.
          2. itsignals.cascadia.com.au/?p=28 (вообще, где-то видел, что гостевые машины можно размещать на LVM-томах, тогда проблемы увеличения дискового пространства не будет).
          3. Конечно, обращайся. Если я не помогу, так может кто-нить другой.
          • 0
            1) Да я читал, но говорят метод не очень хороший — думал, может уже есть решения.
            2) LVM не совсем подходит, так как есть еще и Win машины.

            3) ну тогда:

            В общем сеть у меня класика eth0 инет, eth1 сеть.
            Проблема в том, что NAT,DHCP,Bind итд, я хочу настроить в виртуальной машине, а хост ВМ вообще не трогать, или трогать но очень минимально. Делаю для того, что бы удобно было ВМ перенести в случаи возникновения проблем.
            Вот и не могу сообразить, как лучше спланировать сеть.
            Пробрасывать сетевую карту не могу, так как удет еще несколько ВМ, а кол-во сетевых карт (как и PCI разъемов) ограниченно.
            • +1
              Попробуй по этому поводу пообщаться с ребятами из Нижнего Новогорода. blog.nntc.nnov.ru/?p=199#more-199
              Они реализовали это на практике и все, вроде как, работает. Правда там другой виртуализатор, но сути не меняет.
              • 0
                Спс, я тут впринуепе разобрался на irc каналах поспрашивал народ.
                Статью надо кстати наверно все же более развернутую сделать ^_^
                Но это как говорится с поытом.
            • 0
              В данном случае OpenVZ или XEN выглядит лучше чем KVM
              • 0
                OpenVZ идет лесом по причине невозможности эмуляции win систем и ряд других unix.
            • 0
              некропост,
        • 0
          Вот тут хорошая подборка тестов как виртуальных машин, так и сравнение native и virtio net драйвера в KVM.

          image
        • 0
          А в чем сложность ресайза ntfs партиции? Если виртуалка с win бежит поверх raw lvm раздела, оставновить, увеличить lvm, увеличить ntfs, запустить виртуалку.
  • НЛО прилетело и опубликовало эту надпись здесь
    • 0
      Попробовать другую виртальную машину. Может быть xen?
    • 0
      Без поддержки аппаратной виртуализации процессором работать будет, но заметно медленнее.
  • 0
    в чем отличие:
    virsh -c qemu:///system start vsrv1
    от:
    virsh start vsrv1

    гиппервизору сообщает о старте ВМ?
    • 0
      В данном случе ни в чем, но соединятся еще можно с например xen:/// и с каким нибудь удаленным хостом, документация по uri тут
  • 0
    Спасибо за статью, вот щас копипастом за 5 минут завел что надо было :)
  • 0
    В общем-то для этого и писал, чтобы потом самому посмотреть можно было.
    Кстати, советую обратить внимание на proxmox Очь удобная вещь. Рулится через web интерфейс. Все очень удобно сделано. Вторая версия еще бетта, но достаточно стабильно работает.
  • 0

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.