Задача: организовать систему виртуализации на 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 и устанавливаю гостевую систему.