0

KVM на CentOS 6

Задача: организовать систему виртуализации на KVM и перенести физические сервера в виртуальную среду.

Был выбран и успешно установлен CentOS6-minimal по той причине, что он minimal. При установке по умолчанию будет использоваться LVM — оставляю. Итак, установка завершена — начинается самое интересное.

Установка EPEL (Extra Packages for Enterprise Linux)

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

# rpm -Uvh download.fedoraproject.org/pub/epel/[version]/[architecture]/epel-release-6-*.noarch.rpm

В моем случае:

# rpm -Uvh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-7.noarch.rpm
# yum list available

Покажет список доступных пакетов.

Если ошибка:
# Error: Cannot retrieve metalink for repository: epel. Please verify its path and try again
Надо проверить firewall 443 порт.

Установка KVM

KVM

Непосредственно установка:
# yum install kvm libvirt virt-manager virt-viewer
# service libvirtd start

Для уверенности можно перезапустить машину.

Сеть

Создаю интерфейс типа «мост»:
# cat /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE="eth0"
BOOTPROTO="static"
HWADDR="1C:6F:65:53:77:D5"
BRIDGE=bridge0
ONBOOT="yes"

Интерфейс для моста:

# /etc/sysconfig/network-scripts/ifcfg-bridge0

DEVICE="bridge0"
TYPE=Bridge
BOOTPROTO="static"
IPADDR=192.168.2.50
NETMASK=255.255.255.0
GATEWAY=192.168.2.1
ONBOOT="yes"

Теперь связь с внешним миром осуществляется через мост.

Если настроен iptables, то его надо будет править!

Делаю рестарт сетевых интерфейсов:
# service network restart

Проверяю мост:
# brctl show
bridge name bridge id STP enabled interfaces
bridge0 8000.00215e54f1d0 no eth0

Количество мостов и виртуальных интерфейсов зависит от топологии сети, в том числе виртуальной.

Работа с LVM

Узнать как установить и использовать LVM можно на следующем ресурсе.

Основные моменты утилиты для работы:

  • pv* — работа с физическими томами
  • vg* — работа с группами томов
  • lv* — работа с логическими томами

Информации много, поэтому смотрю команды, курю man’ы. Группа томов у меня создана, поэтому теперь выделяю логические тома под гостевую систему:

# lvcreate -L 10G -n access1 vg_noc

Проверяю:
# lvdisplay

LVM IMHO очень приятная штука. Требует внимательного изучения.

Установка виртуальной машины

# virt-install --name=access.evolife.su --vcpus=1 --ram=512 --cdrom=/var/lib/libvirt/images/FreeBSD-9.0-RELEASE-amd64-disc1.iso --disk=/dev/vg_noc/access1 --bridge bridge0 --vnc --vnclisten=0.0.0.0

где name — имя домена(виртуальной машины),

  • vcpus — количество используемых CPU,
  • ram — оперативная память,
  • cdrom — путь к ISO образу для установки,
  • disk — путь к логическому диску LVM,
  • bridge — к какому мосту цепляем виртуальный интерфейс,
  • vnc — для подключения по vnc,
  • vnclisten — на каком IP слушать vnc (у меня на всех, т.к. я ограничиваю это iptables)

За подробностями в man virt-install.

Теперь разрешаю в firewall подключаться по vnc и могу приступать к установке системы.

Управление виртуальными машинами

Основные команды для управления виртуальными машинами:

  • virsh list —all — список всех виртуальных машин
  • virsh start|destroy|undefine vmName- запуск | остановка | удаление виртуальной машины
  • virsh autostart vmName — добавление автозапуска при перезагрузке
  • virsh dumpxml vmName > vmname.xml — сохранение конфигурации
  • virsh define vmName.xml — загрузка файла конфигурацмм
  • virsh edit vmName — открывает в редакторе по умолчанию файл конфигурации и сохраняет результат редактирования

Подробнее в man.

Настройка сети гостя

Имею:
# ifconfig

bridge0   Link encap:Ethernet  HWaddr [MAC]
    inet addr:[ip]  Bcast:[broadcast]  Mask:[nemask]
    UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
    RX packets:1017593 errors:0 dropped:0 overruns:0 frame:0
    TX packets:31729 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:0 
    RX bytes:121803966 (116.1 MiB)  TX bytes:6186727 (5.9 MiB)

eth0      Link encap:Ethernet  HWaddr [MAC]
    UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
    RX packets:1031592 errors:0 dropped:0 overruns:0 frame:0
    TX packets:37491 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:1000 
    RX bytes:141002636 (134.4 MiB)  TX bytes:6824400 (6.5 MiB)
    Interrupt:16 Memory:ce000000-ce012800 

Добавляю виртуальный интерфейс в гостевую систему:

# virsh attach-interface domain-id type sourceattach-interface domain-id type source
где domain-id — имя гостевой системы, type — тип интерфейса, source — интерфейс в хостовой системе. У меня:
# virsh attach-interface access bridge bridge0

В хостовой системе создается интерфейс vnet0 и привязывается к bridge0, а в гостевой системе создается новый интерфейс. Для того чтобы добавить в гостевую систему VLAN создаю интерфейс в хостовой системе:
# cat /etc/sysconfig/network-scripts/ifcfg-eth0.23

VLAN=yes
DEVICE=eth0.23
ONBOOT=yes
BRIDGE=bridge0

Теперь у гостевой системы будет 23 VLAN.
В принципе, на этом настройка KVM окончена. Теперь подключаюсь по VNC и устанавливаю гостевую систему.

Alexey Egorychev

FreeBSD and Linux sysadmin. Know many systems like mailsystems, DB, WWW stack. Automation with salt, ansible. Monitoring with nagios, zabbix.