Установка KVM и Libvirt на Centos 6.2 c сетью типа Бридж

Ну вот, наконец-то я добрался до документирования еще одной интересной задачки по установке KVM + Libvirt на Centos 6.2, сетью типа бридж. Данная статья описывает подробный пошаговый механизм настройки гипервизора KVM под управлением Centos 6.2. По окончании установки вы получите полностью работоспособную систему под управлением CentOS со следующими возможностями:

  • возможность одновременной виртуализации как Linux так Windows гостевых машин, которые общаются с внешним миром через бридж, с возможностью прямого доступа непосредственно на виртуальную машину как по IP так и с хостовой системы;
  • визуальное управление виртуалками через virt-manager как из Linux так и из под Windows. (Я на работе испоьзую Linux Mint)
Итак, что же такое:

KVM:

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

Программное обеспечение KVM состоит из загружаемого модуля ядра (называемого kvm.ko), предоставляющего базовый сервис виртуализации, процессорно-специфического загружаемого модуля kvm-amd.ko либо kvm-intel.ko, и компонентов пользовательского режима (модифицированного QEMU). Все компоненты ПО KVM являются ПО с открытым исходным кодом. Компонент ядра, необходимый для работы KVM, включен в основную ветку Linux начиная с версии 2.6.20 (February 2007).[1] KVM был также портирован на FreeBSD как модуль ядра.[2] Ведётся работа по включению модификаций, необходимых для работы с KVM, в основную ветку QEMU.

Сам по себе KVM не выполняет эмуляции. Вместо этого программа, работающая в пространстве пользователя, использует интерфейс /dev/kvm для настройки адресного пространства гостя виртуальной машины, через него же эмулирует устройства ввода-вывода и видеоадаптер.

KVM позволяет виртуальным машинам использовать немодифицированные образы дисков QEMU, VMware и других, содержащие операционные системы. Каждая виртуальная машина имеет своё собственное виртуальное аппаратное обеспечение: сетевые карты, диск, видеокарту и т. д."


libvirt:

libvirt — свободная, кроссплатформенная библиотека управления виртуализацией.

Библиотека для управления виртуализацией, реализующая интерфейс на языках C/C++, Python, Ruby. Входит в состав большинства дистрибутивов Linux и является основой для создания оболочек с Web-интерфейсом, например oVirt. Позволяет управлять гипервизорами Xen, KVM, а также VirtualBox, OpenVZ, LXC, VMware ESX/GSX/Workstation/Player, QEMU. Позволяет контролировать по сети виртуальные машины, расположенные на других компьютерах. Совместно с libvirt используется менеджер виртуальных машин virt-manager, предоставляющий графический и консольный интерфейс для создания, контроля состояния виртуальных машин (средства virt-viwer, virt-manager).
В состав libvirt входит сервис libvirtd и консольный инструмент virsh.

Что нам необходимо:

Железо:

  • Процессор с поддержкой Intel-VT or AMD-V технологии;
  • Необходимое количество оперативной памяти, в зависимости от количества гостевых систем;
  • Доступ к сети Интернет;


ПО:

* Установленный и настроенный CentOS 6.2;

В нашем случае установлено:

        $ uname -r

        2.6.32-220.2.1.el6.x86_64


        $ lsb_release -a

        LSB Version: :core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch
        Distributor ID: CentOS
        Description: CentOS release 6.2 (Final)
        Release: 6.2
        Codename: Final
        A Linux client with a Desktop environment installed
        An available CentOS mirror/repository


Установка:

Логинимся в систему под пользователем gnusu (пользователь с правами sudo), проверяем, возможности виртуализации на вашем оборудовании.

У меня вот что:

    $ egrep '^flags.*(vmx|svm)' /proc/cpuinfo

    flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 popcnt lahf_lm ida dts tpr_shadow vnmi flexpriority ept vpid
// И так по каждому ядру системы, сокращено за ненадобностью


Устанавливаем KVM и Libvirt пакеты:

$ sudo yum install kvm libvirt libvirt-client qemu-kvm
    Update both packages to the latest version available on repositories/mirrors:


 $ yum info libvirt

    Installed Packages
    Name        : libvirt
    Arch        : x86_64
    Version     : 0.9.4
    Release     : 23.el6_2.4 


    $ yum info qemu-kvm

    Installed Packages
    Name        : qemu-kvm
    Arch        : x86_64
    Epoch       : 2
    Version     : 0.12.1.2
    Release     : 2.209.el6_2.1
    Restart the libvirtd daemon:


Внимание!!! Потребуется перезагрузка хоста!!!

После перезагрузки стартуем Libvirt-демон:

$ sudo service libvirtd restart


Проверяем, все ли необходимые модули подгрузились:

    $ lsmod | grep kvm

    kvm_intel              50380  0
    kvm                   305113  1 kvm_intel


Пробуем команду virsh, дабы убедиться, что сервис запустился и работает нормально:

    $ sudo virsh sysinfo

        ...


Для использования KVM из под НЕ-root пользователя проверьте, создалась ли группа kvm при установке пакетов:

    $ cat /etc/group | grep kvm

    kvm:x:36:qemu


Далее добавляем пользователя gnusu в группу kvm для доступа к гипервизору:


$ sudo usermod -a -G kvm gnusu


Проверим:

$ id

    uid=500(gnusu) gid=500(gnusu) groups=500(gnusu),10(wheel),36(kvm) context=...


и проверим if /dev/kvm принадлежит ли группе kvm:

   $ ls -l /dev/kvm

    crw-rw-rw-. 1 root kvm 10, 232 Jan 17 14:50 /dev/kvm


На системах под управлением udev у вас автоматически должно создаться правилоб проверяем его наличие:

    $ cat /etc/udev/rules.d/80-kvm.rules

    KERNEL=="kvm", GROUP="kvm", MODE="0666"


Для управления Libvirt от нашего не рутового пользователя Вам будет необходимо использовать PolicyKit. Добаляем доступ для управления для группы libvirt.

    $ sudo groupadd libvirt
    $ sudo usermod -a -G libvirt gnusu
    $ logout


Логинимся под пользователем gnusu и ...:

$ sudo nano /etc/polkit-1/localauthority/50-local.d/50-libvirt-remote-access.pkla

    [libvirt Management Access]
    # For allowing access to specific user only:
    #Identity=unix-user:bozz
    # For allowing access to a group (like this guide):
    Identity=unix-group:libvirt
    Action=org.libvirt.unix.manage
    ResultAny=yes
    ResultInactive=yes
    ResultActive=yes


Рестартим Libvirt демон:

 $ sudo service libvirtd restart


проверяем от пользователя gnusu

 $ virsh -c qemu:///system sysinfo

        ...


Проверяем удаленный доступ к qemu+ssh://gnusu@gnu.su/system

Для Linux Mint, как например у меня:

    $ sudo apt-get install libvirt-bin


Для клиентов с установленным Fedora/CentOS:

    $ sudo yum install libvirt


потом:

    $ virsh -c qemu+ssh://gnusu@gnu.su/system sysinfo
        ...


Изменяем права на доступ в директорию для имиджей гостевых систем:

    $ sudo chown root:libvirt /var/lib/libvirt/images
    $ sudo chmod g+rw /var/lib/libvirt/images
  



Настраиваем Бридж:

создаем дополнительный файлик /etc/sysconfig/network-scripts/ifcfg-br0:

    $ sudo nano /etc/sysconfig/network-scripts/ifcfg-br0

Настраиваем параметры под вашу сеть:

    DEVICE="br0"
    TYPE=Bridge
    DELAY=0
    ONBOOT="yes"
    BOOTPROTO=static
    IPADDR=192.168.11.12
    NETMASK=255.255.255.0
    PEERDNS="yes"


Перезапускаем сервис сети:

    $ sudo service network restart


и проверяем настройки бриджа:

    $ brctl show

    bridge name bridge id STP enabled interfaces
    br0 8000.002cc28529a3 no eth0
    ...


Конфигурируем IPtables для прохождения трафика гостевых машин через бридж:

    $ sudo iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT
    $ sudo service iptables save
    $ sudo service iptables restart


Запрещаем обработку трафика пропускаемого через бридж хостовым iptables для увеличения производительности:

    net.bridge.bridge-nf-call-ip6tables = 0
    net.bridge.bridge-nf-call-iptables = 0
    net.bridge.bridge-nf-call-arptables = 0


Применяем параметры sysctl:

    $ sudo sysctl -p /etc/sysctl.conf


Рестартим libvirt:

    $ sudo service libvirtd reload


Пользуемся и говорим спасибо. А еще ставим линки на GNU.SU, если вдруг описание Вам понравится и Вы захотите его скопировать себе на сайт.





Вас также может заинтересовать:

Установка Centos 6
Установка GeoIP (Centos, Red Hat)
Установка 1C 8.2 под PostgreSQL на CentOS 6.3
Установка GitWeb на Centos 5.5
Установка PHP-SQLite в CentOS из SRC-RPM
Сборка и установка MemcacheDB на CentOS 5.5