KVM на CentOS

Установка и настройка KVM на CentOS, а так же создание виртуальных машин.
Для начала следует проверить поддержку виртуализации аппаратно:

# egrep '(vmx|svm)' --color=always /proc/cpuinfo

Если нет никакого вывода, значит процессор не поддерживает виртуализацию, если же вывод есть, переходим к установке:

# yum install kvm kmod-kvm qemu libvirt python-virtinst qemu-kvm

Далее необходимо выключить selinux, для этого редактируем файл /etc/selinux/config, изменив параметр:

SELINUX=disabled

перезагружаемся

# reboot


Проверяем:

# virsh list

список должен быть пуст.

Для того что-бы,можно было виртуальные машины выпускать в реальную сеть, не ограничиваясь работой из-под NAT, необходимо установить пакет для работы с сетевыми мостами:

# yum install bridge-utils

Далее, для простоты, будем брать в расчет, что виртуальные машины в сети получают адреса по DHCP, в противном случае, всего лишь, сетевые настройки придется прописывать вручную, а это, я думаю, каждый знает как.

И так, реконфигурируем сетевой интерфейс и создаем сетевой мост

редактируем /etc/sysconfig/network-scripts/ifcfg-br0

DEVICE=br0
TYPE=Bridge
BOOTPROTO=static
IPADDR=192.168.1.10
NETMASK=255.255.255.0
ONBOOT=yes

редактируем /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
BRIDGE=br0

рестартуем сеть:

# /etc/init.d/network restart

в результате, по ifconfig получаем примерно следующее (сократил для наглядности):

br0 Link encap:Ethernet HWaddr F4:BB:46:99:66:55
inet addr:192.168.1.10 Bcast:192.168.1.255 Mask:255.255.255.0

eth0 Link encap:Ethernet HWaddr F4:BB:46:99:66:55

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host

virbr0 Link encap:Ethernet HWaddr 00:00:00:00:00:00
inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0

Следующим этапом будет непосредственно установка виртуальных машин, но для начала, необходимо уточнить некоторые моменты.
1. Куда будем ставить виртуальные машины, на файл-имидж или на LVM раздел.
2. Как будем подключаться для установки к виртуальным машинам.

По первому вопросу, мой выбор — LVM. Беру в расчет что LVM уже есть и настроен, так же есть необходимое место. Создаем необходимый логический том размером 20G в группе томов vol:

# lvcreate -L 20G -n centos1 vol

И так, ставить будем на раздел /dev/vol/centos1

По второму вопросу, есть несколько вариантов, в том числе подключение через консоль, но мы рассмотрим 2 из них. Первый с помошью программы virt-manager, и второй, подключившись напрямую по VNC.
Если мы хотим непосредственно подключатся по VNC к устанавливаемой машине, необходимо подредактировать файл /etc/libvirt/qemu.conf , задав следующие параметры:

vnc_listen = "0.0.0.0" # раскомментировать
vnc_password = "Your_Pass" # раскомментировать и поставить свой пароль


после этого перезапустить виртуальную среду:

# /etc/init.d/libvirtd restart


Или же мы можем использовать virt-manager, тогда никакие изменения вносить не надо, но тогда на машине, к которой будем подключаться (реальной), должен быть открыт root-доступ по ssh.
Запускаем virt-manager на рабочей машине, добавляем новое соединение и соединяемся введя пароль root.
virt-manager

Далее, нам необходим iso образ CentOS, скачиваем CentOS-6.0-x86_64-minimal.iso с сайта centos.org.

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

# virt-install --connect qemu:///system -n centos1 -r 512 --vcpus=1 -f /dev/vol/centos1 -c ~/CentOS-6.0-x86_64-minimal.iso --vnc --noautoconsole --os-type linux --os-variant generic26 --accelerate --hvm --network=bridge:br0

Если мы не хотим выпускать машину в реальную сеть, а хотим что-бы она работала из-под NAT, тогда вместо —-network=bridge:br0 пишем —network=network:default

А если мы хотим поставить машину не на LVM, а на файл-имидж, то меняем -f /dev/vol/centos1 на -f /путь/к_файлу и добавляем -s 20 .

После этого в virt-manager мы видем что появилась новая вируальная машина, кликнув на ней, подключаемся к ней, где начинаем установку вируальной машины. Ставим совершенно как обычную машину.

Теперь, если в консоли дать:

# virsh list


то получим:

ID Имя Статус
----------------------------------
1 centos1 работает

Управлять работой виртуальных машин можно как с помошью virt-manager, так и из консоли с помошью virsh, например, на машине где крутятся виртуалки:

# virsh start centos1 # запустить виртуальную машину
# virsh reboot centos1 # рестартануть
# virsh shutdown centos1 # выключить


список всех команд можно посмотреть по:

virsh help


более подробно по каждой команде:

virsh help команда

Вот и все. Теперь можете ставить другие вируальные машины подобным же образом.
Настройки машин лежат в /etc/libvirt/qemu/ в формате xml, если Вы меняете настройки вручную в этом файле, то после изменений необходимо сделать:

# virsh define /etc/libvirt/qemu/имя_машины.xml

Еще хочу заметить, что при установке Debian 6 как виртуальной машины на раздел LVM, у меня не захотел ставиться grub, однако запросто поставился lilo, давненько я его не видел 🙂

И еще немного про доступ к разделам виртуальной машины с основной машины, в этом нам поможет замечательная утилита kpartx.
Для того чтобы посмотреть разделы:

# kpartx -l /dev/mapper/vol-centos1
vol-centos1p1 : 0 40550400 /dev/mapper/vol-centos1 2048
vol-centos1p2 : 0 1390592 /dev/mapper/vol-centos1 40552448


Создать ссылки на разделы:

# kpartx -a /dev/mapper/vol-centos1
# ls -l /dev/mapper/vol*
brw-rw---- 1 root disk 253, 2 Сен 4 09:11 vol-centos1
brw-rw---- 1 root disk 253, 3 Сен 4 12:58 vol-centos1p1
brw-rw---- 1 root disk 253, 4 Сен 4 12:58 vol-centos1p2

Мы получили разделы vol-centos1p1 и vol-centos1p2 с которыми можно работать напрямую или же смонтировав их, например:

# mount /dev/mapper/vol-centos1p1 /mnt/virtual

И наконец, чтоб удалить ссылки на разделы:

# kpartx -d /dev/mapper/vol-centos1

Удачи в настройках.
© shadow_alone

  • Знаешь Андреич — я ставил квмку год наза, и вот как раз бридж то он и не поднимал, точнее фактически бридж интерфейс бодро светился, а вот до вирт машинки достучаться не получалось? у тебя такое было?

  • У меня такого никогда не было, поднимал много раз. Да и не должно такого быть, если все правильно делаешь…. бридж полюбе должен работать и KVM тут не при чем.