 
			
			Установка и настройка KVM под управлением CentOS 6
 
			Мануал, который отточен многоразовым применением, про который с уверенностью могу сказать, что «точно работает!»
Начнем с того, что если Вы читаете это, то у вас уже готова CentOS 6, причем для установки гостевых ВМ разной разрядности (32 или 64), хост-сервер (физический сервер, на котором и будем устанавливать KVM вместе с ВМ) должен быть именно с 64-битной ОС.
Все действия выполняются из-под пользователя root. 
Подготовка
Проверяем, поддерживает ли CPU аппаратную виртуализацию:
| 1 | egrep '(vmx|svm)' /proc/cpuinfo | 
Если вывод не пустой, значит — процессор поддерживает аппаратную виртуализацию.
Кому интересно, все действия выполнялись на конфигурации
Intel® Core™ i7-920 Quadcore 2.66 GHz / 48GB / 2 TB SATA 3 Gb/s 7200 rpm
Устанавливаем KVM и библиотеки виртуализации
| 1 | yum install kvm libvirt | 
Запускаем сервис KVM и добавляем в автозапуск
| 1 | service libvirtd start | 
Смотрим, загружен ли модуль KVM:
| 1 | lsmod | grep kvm | 
Приблизительный вывод:
| 1 | kvm_intel 54285 0 | 
В данном случае видим, что загружен модуль kvm_intel, так как производитель CPU — Intel.
Проверка подключения к KVM:
| 1 | virsh sysinfo | 
Получился вывод:
| 1 | <sysinfo type='smbios'> | 
Создание хранилища для виртуальных машин (Storage Pool)
Существует множество способов, как настроить хранилище разных видов.
В рассматриваемом же примере описан простой тип хранилища — для каждой ВМ создается свой файл *.img под виртуальный жесткий диск (или диски — если добавить их несколько), размещены они будут в директории /guest_images
Создаем папку под образы:
| 1 | mkdir /guest_images | 
Назначаем владельца и выдаем привилегии:
| 1 | chown root:root /guest_images | 
Проверяем:
| 1 | # ls -la /guest_images | 
Настраиваем SELinux:
| 1 | semanage fcontext -a -t virt_image_t '/guest_images(/.*)?' | 
Инициализируем директорию
Я делаю это с использованием virt-manager, который установлен на CentOS
В Virt-manager заходим в свойства сервера:

Переходим на вкладку Storage

Добавляем новый пул:

Указываем его истинный путь:

Проверяем:

Настройка сети на хост-сервере
Перед выполнением этого шага, надо убедиться, что на хост-сервере установлен пакет bridge-utils
| 1 | rpm -qa | grep bridge-utils | 
Иначе при выполнении операций с сетью вы рискуете потерять связь с сервером, особенно обидно если он удаленный, и физического доступа к нему у вас нет.
| 1 | yum -y install bridge-utils | 
Положим, что для выхода «в мир» использовался интерфейс eth0, и он был соответствующим образом настроен.
На нем настроен IP-адрес 10.110.10.15 из /24 сети, маска — 255.255.255.0, шлюз 10.110.10.1.
Продолжаем, создаем сетевой интерфейс типа bridge на хост-сервере
Содержимое файла /etc/sysconfig/network-scripts/ifcfg-br0 приводим к виду
| 1 | DEVICE="br0" | 
Приводим основной сетевой интерфейс /etc/sysconfig/network-scripts/ifcfg-eth0, который использовался для выхода в «мир», к виду:
| 1 | DEVICE="eth0" | 
!!! Важно!!!DEVICE=«eth0» Имя интерфейса должно остаться таким, как было в системе. Если у вас для выхода в Интернет использовался интерфейс eth1, тогда редактировать надо его.HWADDR=«*.*.*.*» МАС-адрес также должен остаться таким, как был в системе.
Заменяем route-eth0 на route-br0
Когда проверили все, перезагружаем сеть:
| 1 | service network restart | 
Проверяем состояние подключения типа «bridge»:
| 1 | brctl show | 
| 1 | # brctl show | 
Делаем настройки в iptables, чтобы трафик виртуалок «ходил» через соединение типа bridge
| 1 | iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT | 
Опционально: можно улучшить быстродействие соединения bridge, поправив настройки в /etc/sysctl.conf
| 1 | net.bridge.bridge-nf-call-ip6tables = 0 | 
После этого:
| 1 | sysctl -p /etc/sysctl.conf | 
Установку я произвожу через VirtManager, поэтому создание ВМ через консоль описывать не буду.
P.S.
Пример настройки сети сделан для серверов арендованных в Hetzner, поскольку их роутинг не позволяет сделать нормально.
Для других вариантов используем:
| 1 | # vi /etc/sysconfig/network-scripts/ifcfg-br0 | 
| 1 | # vi /etc/sysconfig/network-scripts/ifcfg-eth0 | 
Автоматический запуск виртуальных машин
| 1 | virsh autostart TestServer |