====== Установка и настройка KVM под управлением CentOS ======
Мануал, который отточен многоразовым применением, про который с уверенностью могу сказать, что «точно работает!»
Начнем с того, что если Вы читаете это, то у вас уже готова **CentOS**, причем для установки гостевых ВМ разной разрядности (32 или 64), хост-сервер (физический сервер, на котором и будем устанавливать KVM вместе с ВМ) должен быть именно с 64-битной ОС.\\
Все действия выполняются из-под пользователя ''root''.
==== Подготовка ====
Проверяем, поддерживает ли CPU аппаратную виртуализацию:
|egrep '(vmx|svm)' /proc/cpuinfo
|
Если вывод не пустой, значит — процессор поддерживает аппаратную виртуализацию.
Кому интересно, все действия выполнялись на конфигурации
**Intel® Core™ i7-920 Quadcore 2.66 GHz / 48GB / 2 TB SATA 3 Gb/s 7200 rpm**
=== Устанавливаем KVM и библиотеки виртуализации ===
|yum install kvm libvirt
|
=== Запускаем сервис KVM и добавляем в автозапуск ===
|service libvirtd start
chkconfig libvirtd on
|
Смотрим, загружен ли модуль KVM:
|lsmod | grep kvm
|
Приблизительный вывод:
|kvm_intel 54285 0
kvm 332980 1 kvm_intel
|
В данном случае видим, что загружен модуль ''kvm_intel'', так как производитель CPU — **Intel**.
Проверка подключения к KVM:
|virsh sysinfo
|
Получился вывод:
|
American Megatrends Inc.
V8.14B8
11/09/2012
.....
|
==== Создание хранилища для виртуальных машин (Storage Pool) ====
Существует [[https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Virtualization_Administration_Guide/chap-Virtualization_Administration_Guide-Storage_Pools-Storage_Pools.html#sect-Virtualization-Storage_Pools-Creating-Local_Directories|множество способов]], как настроить хранилище разных видов.
В рассматриваемом же примере описан простой тип хранилища — для каждой ВМ создается свой файл ''*.img'' под виртуальный жесткий диск (или диски — если добавить их несколько), размещены они будут в директории ''/guest_images''
==== Создаем папку под образы: ====
|mkdir /guest_images
|
==== Назначаем владельца и выдаем привилегии: ====
|chown root:root /guest_images
chmod 700 /guest_images
|
==== Проверяем: ====
|# ls -la /guest_images
итого 8,0K
drwx------ 2 root root 4,0K Апр 3 12:46 .
drwxr-xr-x 25 root root 4,0K Апр 3 12:46 ..
|
==== Настраиваем SELinux: ====
|semanage fcontext -a -t virt_image_t '/guest_images(/.*)?'
restorecon -R /guest_images
|
==== Инициализируем директорию ====
Я делаю это с использованием ''virt-manager'', который установлен на **CentOS**
В ''Virt-manager'' заходим в свойства сервера:
{{https://fatalex.cifro.net/lib/plugins/ckgedit/fckeditor/userfiles/image/kvm/001.png?nolink&}}
== Переходим на вкладку Storage ==
{{https://fatalex.cifro.net/lib/plugins/ckgedit/fckeditor/userfiles/image/kvm/002.png?nolink&}}
== Добавляем новый пул: ==
{{https://fatalex.cifro.net/lib/plugins/ckgedit/fckeditor/userfiles/image/kvm/003png?nolink&}}
== Указываем его истинный путь: ==
{{https://fatalex.cifro.net/lib/plugins/ckgedit/fckeditor/userfiles/image/kvm/004.png?nolink&}}
== Проверяем: ==
{{https://fatalex.cifro.net/lib/plugins/ckgedit/fckeditor/userfiles/image/kvm/005.png?nolink&}}
=== Настройка сети на хост-сервере ===
Перед выполнением этого шага, надо убедиться, что на хост-сервере установлен пакет ''bridge-utils''
|rpm -qa | grep bridge-utils
|
Иначе при выполнении операций с сетью вы рискуете потерять связь с сервером, особенно обидно если он удаленный, и физического доступа к нему у вас нет.
|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'' приводим к виду
|DEVICE="br0"
NM_CONTROLLED="no"
ONBOOT="yes"
TYPE="Bridge"
BOOTPROTO="static"
IPADDR="***.***.***.***"
GATEWAY="***.***.***.***"
DNS1="***.***.***.***"
DNS2="***.***.***.***"
DNS3="***.***.***.***"
NETMASK="***.***.***.***"
MTU="1500"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="yes"
SCOPE="peer ***.***.***.***"
IPV6INIT=yes
IPV6ADDR=***.***.***.***
IPV6_DEFAULTGW=***.***.***.***
IPV6_DEFAULTDEV=eth0
|
Приводим основной сетевой интерфейс ''/etc/sysconfig/network-scripts/ifcfg-eth0'', который использовался для выхода в «мир», к виду:
|DEVICE="eth0"
BOOTPROTO="none"
HOSTNAME=CentOS-65-64-minimal
HWADDR="***.***.***.***"
IPV6INIT="no"
MTU="1500"
NM_CONTROLLED="no"
ONBOOT="yes"
TYPE="Ethernet"
NAME="System eth0"
BRIDGE="br0"
|
**!!! Важно!!!**
''DEVICE=«eth0»'' Имя интерфейса должно остаться таким, как было в системе. Если у вас для выхода в Интернет использовался интерфейс ''eth1'', тогда редактировать надо его.
''HWADDR=«*.*.*.*»'' МАС-адрес также должен остаться таким, как был в системе.
Заменяем ''route-eth0'' на ''route-br0''
== Когда проверили все, перезагружаем сеть: ==
|service network restart
|
== Проверяем состояние подключения типа «bridge»: ==
|brctl show
|
|# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.406186e9d881 no eth0
virbr0 8000.52540038e10d yes virbr0-nic
|
== Делаем настройки в iptables , чтобы трафик виртуалок «ходил» через соединение типа bridge ==
|iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT
service iptables save
service iptables restart
|
Опционально: можно улучшить быстродействие соединения **bridge**, поправив настройки в ''/etc/sysctl.conf''
|net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0
|
После этого:
|sysctl -p /etc/sysctl.conf
service libvirtd reload
|
Установку я произвожу через **VirtManager**, поэтому создание ВМ через консоль описывать не буду.
P.S.
Пример настройки сети сделан для серверов арендованных в **Hetzner**, поскольку их роутинг не позволяет сделать нормально.
Для других вариантов используем:
|# vi /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE="br0"
NM_CONTROLLED="no"
ONBOOT="yes"
TYPE="Bridge"
BOOTPROTO="static"
IPADDR="10.110.10.15"
GATEWAY="10.110.10.1"
DNS1="8.8.8.8"
DNS2="8.8.4.4"
MTU="1500"
NETMASK="255.255.255.0"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="yes"
IPV6INIT="no"
NAME="System br0"
|
|# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
BOOTPROTO="none"
HOSTNAME="localhost.localdomain"
HWADDR="00:9C:02:97:86:70"
IPV6INIT="no"
MTU="1500"
NM_CONTROLLED="no"
ONBOOT="yes"
TYPE="Ethernet"
NAME="System eth0"
BRIDGE="br0"
|
== Автоматический запуск виртуальных машин ==
|virsh autostart TestServer
|