| 1. Шаг — Подготовка 
 Проверяем, поддерживает ли CPU аппаратную виртуализацию:
   
 Если вывод не пустой, значит — процессор поддерживает аппаратную виртуализацию.
 Кому интересно, все действия выполнялись на конфигурации Intel Xeon Quad Core E3-1230 3.20 GHz / 8GB / 2x 1TB.
 
 Устанавливаем KVM и библиотеки виртуализации:
     
 Запускаем сервис KVM
     
 Смотрим, загружен ли модуль KVM
     
 Должны получить вывод:
     
kvm_intel 52890 16
kvm 314739 1 kvm_intel
 В данном случае видим, что загружен модуль kvm_intel, так как произволитель CPU — Intel.
 
 Проверка подключения к KVM
     
 Должны получить вывод:
     
<sysinfo type='smbios'>
 <bios>
 <entry name='vendor'>HP</entry>
 <entry name='version'>J01</entry>
 .....
  
 2. Шаг — Создание хранилища для виртуальных машин (Storage Pool)
 
 Здесь приводится описание, как настроить хранилище разных видов.
 В рассматриваемом же примере описан простой тип хранилища — для каждой ВМ создается свой файл *.img под виртуальный жесткий диск (или диски — если добавить их несколько), размещены они будут в директории /guest_images.
 Только у нас эта директория будет точкой монтирования отдельного жесткого диска хост-сервера, специально отведенного для этих нужд.
 Безопасность сохранения данных и то, что нужно создавать как минимум зеркальный raid массив, чтобы не потерять данные ВМ в случае сбоя жесткого диска, мы не будем, так как это — отдельная тема.
 
 Просмотрим список физических дисков на хост-сервере:
     
 Получился вывод:
     
Disk /dev/sda: 1000.2 GB, 1000204886016 bytes
......
Disk /dev/sdb: 1000.2 GB, 1000204886016 bytes
......
 На жестком диске sda установлена ОС, его не трогаем, а вот на sdb создаем раздел на все свободное место диска с файловой системой ext4:
 (более подробно про следующие операции можно почитать здесь)
 
 Выбираем диск для редактирования
     
 Создаем новый раздел
     
Command (m for help): n
Command action
 e extended
 p primary partition (1-4)
p
Partition number (1-4): 1
 Сохраняем изменения
     
Command (m for help): w
The partition table has been altered!
 Создаем файловую систему ext4 на всем свободном месте диска /dev/sdb
     
 Создаем точку монтирования нашего жесткого диска для файлов виртуальных машин:
     
total 8 
drwx------. 2 root root 4096 May 28 13:57 . 
dr-xr-xr-x. 26 root root 4096 May 28 13:57 .. 
 Многие советуют отключить вообще Selinux, однако мы выберем иной путь. Мы настроим его правильно.
     
 Если выполнение этой команды не будет успешным, надо установить дополнительный пакет. Сначала узнаем, какой пакет предоставляет данную команду
     
 Получим вывод:
     
Loaded plugins: rhnplugin 
policycoreutils-python-2.0.83-19.8.el6_0.x86_64 : SELinux policy core python utilities 
Repo : rhel-x86_64-server-6 
Matched from: 
Filename : /usr/sbin/semanage 
policycoreutils-python-2.0.83-19.1.el6.x86_64 : SELinux policy core python utilities 
Repo : rhel-x86_64-server-6 
Matched from: 
Filename : /usr/sbin/semanage 
 Устанавливаем policycoreutils-python
     
 После этого снова:
     
 Смонтируем раздел /dev/sdb1 в /guest_images
     
 Отредактируем файл /etc/fstab для того, чтобы при перезагрузке хост-сервера раздел с ВМ монтировался автоматически
     
 Добавляем строку по примеру тех, что уже имеются в файле
     
/dev/sdb1 /guest_images ext4 defaults 1 1
 Сохраняем файл и продолжаем создание хранилища:
     
Pool guest_images_dir defined
 Проверяем, создалось ли оно:
     
Name State Autostart 
----------------------------------------- 
default active yes 
guest_images_dir inactive no
 Далее:
     
Pool guest_images_dir built 
 Запускаем хранилище:
     
Pool guest_images_dir started 
Name State Autostart 
----------------------------------------- 
default active yes 
guest_images_dir active no 
 Добавляем в автозагрузку:
     
Pool guest_images_dir marked as autostarted 
Name State Autostart 
----------------------------------------- 
default active yes 
guest_images_dir active yes 
 Проверяем:
     
  
 3. Шаг — Настройка сети на хост-сервере
 
 !!! ВАЖНО!!!
 Перед выполнением этого шага, надо убедиться, что на хост-сервере установлен пакет bridge-utils,
     
 иначе при выполнении операций с сетью вы рискуете потерять связь с сервером, особенно обидно если он удаленный, и физического доступа к нему у вас нет. Если вывод предыдущей команды пустой, то:
     
 Положим, что для выхода «в мир» использовался интерфейс eth0 и он был соответствующим образом настроен.
 На нем настроен IP-адрес 10.110.10.15 из /24 сети, маска — 255.255.255.0, шлюз 10.110.10.1.
 Продолжаем, создаем сетевой интерфейс типа «bridge» на хост-сервере
     
 Содержимое файла
     
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"
 Приводим основной сетевой интерфейс, который использовался для выхода в «мир», к виду:
     
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"
 !!! Важно!!!
 DEVICE=«eth0» Имя интерфейса должно остаться таким, как было в системе. Если у вас для выхода в Интернет использовался интерфейс eth1, тогда редактировать надо его.
 HWADDR=«00:2C:C2:85:29:A3» МАС-адрес также должен остаться таким, как был в системе
 
 Когда проверили все, перезагружаем сеть:
     
 Проверяем состояние подключения типа «bridge»:
     
 Получаем что-то вроде этого
     
bridge name bridge id STP enabled interfaces
br0 8000.002cc28529a3 no eth0
 Делаем настройки в iptables, чтобы трафик виртуалок «ходил» через соединение типа bridge
     
 Опционально: можно улучшить быстродействие соединения 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
 После этого
     
  
 4. Шаг — Установка новой виртуальной машины
 
 Установка CentOS на гостевую ВМ:
     
virt-install -n VMName_2 --ram 1024 --arch=x86_64 \
--vcpus=1 --cpu host --check-cpu \
--extra-args="vnc sshd=1 sshpw=secret ip=static reboot=b selinux=0" \
--os-type linux --os-variant=rhel6 --boot cdrom,hd,menu=on \
--disk pool=guest_images_dir,size=50,bus=virtio \
--network=bridge:br0,model=virtio \
--graphics vnc,listen=0.0.0.0,keymap=ru,password=some.password.here \
--noautoconsole --watchdog default,action=reset --virt-type=kvm \
--autostart --location http://mirror.yandex.ru/centos/6.3/os/x86_64/
 Примечание 1:
 VMName_2 — имя новой виртуальной машины
 –ram 1024  — кол-во виртуальной памяти
 –arch=x86_64 — архитектура ОС виртуалки
 –vcpus=1  — кол-во виртуальных процессоров
 –os-type linux — тип ОС
 –disk pool=guest_images_dir,size=50 — размещение хранилища, размер вирт. диска
 –network=bridge:br0
 
 Примечание 2:
 Если на ВМ нужна «белая сеть», тогда ставим
 --network=bridge:br0
 Если на ВМ требуется «серая сеть», тогда ставим
 --network=bridge:virbr0
 В этом случае для ВМ будет присвоен серый IP по DHCP от хост-сервера.
 --graphics vnc,listen=0.0.0.0,keymap=ru,password=some.password.here
 Тут указываем пароль для подключения к ВМ по vnc
 
 Установка Windows на гостевую ВМ:
     
virt-install --connect qemu:///system --arch=x86_64 \
-n VMName_1 -r 1024 --vcpus=1 \
--disk pool=guest_images_dir,size=50,bus=virtio,cache=none \
-c /iso/Windows2008R2RU.ISO --graphics vnc,listen=0.0.0.0,keymap=ru,password=some.password.here \
--noautoconsole --os-type windows --os-variant win2k8 \
--network=bridge:br0,model=e1000 --disk path=/iso/virtio-win.iso,device=cdrom,perms=ro
 Примечание:
 Параметры такие же, как и в примере с установкой CentOS. Но есть различия.
 При установке ОС Windows не увидит виртуального жесткого диска, поэтому надо подгрузить дополнительный виртуальный cdrom с драйверами /iso/virtio-win.iso — расположение файла ISO с драйверами виртуального диска. Взять можно отсюда.
 
 Выполняем команду на установку новой ВМ, затем подключаемся по vnc к хост-серверу для продолжения установки ОС. Для того, чтобы узнать порт для подключения, выполняем:
     
tcp 0 0 0.0.0.0:5900 0.0.0.0:* LISTEN 64141/qemu-kvm 
tcp 0 0 0.0.0.0:5903 0.0.0.0:* LISTEN 63620/qemu-kvm
tcp 0 0 0.0.0.0:5904 0.0.0.0:* LISTEN 6971/qemu-kvm 
tcp 0 0 0.0.0.0:5905 0.0.0.0:* LISTEN 57780/qemu-kvm
 При установке новой ВМ, порт vnc-сервера увеличится на 1. При удалении ВМ, порт освобождается,
 и затем выдается новой ВМ. То есть, номер порта последней ВМ не обязательно самый большой из 590…
 Чтобы узнать, на каком порту vnc виртуалка с определенным названием, вводим:
     
:3
 где VMName_1  — имя ВМ,  :3 — номер по порядку порта, начиная с 5900, то есть подключаться надо на порт 5903, но в программе UltraVNC сработает и так 10.110.10.15:3
 
  
 Примечание
 Если при создании ВМ вылетает ошибка Permission denied, kvm не может открыть файл диска ВМ *.img,
 значит, надо разрешить выполнение действий qemu-kvm из-под root (предполагается, что управление
 ВМ производится из-под специально созданного для этих целей пользователя, например, libvirt). Но мы обойдемся и пользователем root.
 
 Поправляем конфиг:
     
 Находим и раскомментируем в нем строки:
     
user = "root" 
group = "root" 
  
 Полезно знать:
 Конфиги ВМ находятся здесь /etc/libvirt/qemu/
 Для того, чтобы отредактировать параметры (добавить процессор, ОЗУ или еще что-то),
 ищем конфиг ВМ с нужным названием, редактируем:
     
 К примеру, можно указать статический порт vnc для конкретной ВМ, чтобы всегда подключаться к нужному порту
     
<graphics type='vnc' port='5914' autoport='no' listen='0.0.0.0' passwd='some.password.here'>
<listen type='address' address='0.0.0.0'/>
</graphics>
 Теперь у этой ВМ порт vnc будет — 5914. Не забудьте перезагрузить libvirtd для применения изменений. Саму ВМ тоже следует перезагрузить. Поэтому изменяйте конфигурационный файл ВМ пока она выключена, далее выполняйте service libvirtd reload, затем стартуйте ВМ.
 
 Команды для управления ВМ:
     
virsh -c qemu:///system help
Встроенная помощь по командам 
 
virsh -c qemu:///system list --all
Посмотреть статус установленных ВМ 
 
virsh -c qemu:///system start vsrv1
Запусить ВМ vsrv1 
 
virsh -c qemu:///system shutdown vsrv1
Послать команду завершения работы ВМ 
 
virsh -c qemu:///system destroy vsrv1
Принудительно завершить работу ВМ 
 
virsh -c qemu:///system undefine vsrv1
Удалить ВМ 
  
 5. Шаг — Настройка сети в случае «серых» IP-адресов в ВМ
 
 Если на 4 шаге вы выбрали серую сеть для новой ВМ (--network=bridge:virbr0), то надо выполнить следующие действия (на хост-сервере!) для проброса трафика на ВМ
 Разрешить форвардинг трафика на уровне ядра ОС:
     
 Здесь 10.110.10.15 — белый (внешний) IP хост-сервера. 192.168.122.170 — серый IP-адрес гостевой ОС.
     
 На примере установки ОС CentOS на гостевой машине, когда установка перешла в графический режим, и предлагает подключиться на локальный порт 5901 гостевой ОС.
 Подключаемся из ПК, за которым сидите, по vnc  к 10.110.10.15:5910 или 10.110.10.15:10 тоже сработает в UltraVNC.
 
 По такому же принципу можно прокинуть порт (стандартный) RDP 3389 или SSH 22 в гостевую ОС.
 
 6. Шаг — Подготовка к управлению виртуальными машинами удаленного сервера с удобным графическим интерфейсом (используя virt-manager)
 
 Есть много способов «прокинуть» графику удаленного сервера на ПК, за которым выполняете действия администрирования. Мы остановимся на ssh-туннелировании.
 Положим, что вы выполняете действия с локального ПК под управлением Windows (в операционных системах под управлением Linux сделать это куда легче :), нужно выполнить всего одну команду ssh -X username@12.34.56.78, конечно, с оговоркой, что на удаленном сервере X11 forwarding разрешен и вы сидите за локальным Linux ПК c графической оболочкой), тогда нам необходимо
 
 1. Всем знакомый PuTTY,
 2. Порт сервера X для Windows — Xming
 3. В настройках PuTTY включить «Enable X11 Forwarding»
 Сделать, как показано на картинке:
 
  
 В момент подключения к удаленному серверу Xming должен быть уже запущен.
 На хост-сервере с CentOS для SSH включить X11 Forwarding, для этого отредактируйте файл sshd_config:
     
X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost yes
 После этого
     
 Устанавливаем virt-manager на хост-сервере:
     
 Еще один компонент
     
 Чтобы окна отображались без крякозябр
     
  
 7. Шаг — Непосредственный запуск virt-manager
 
 После этого надо перезайти по SSH к удаленному серверу. Xming должен быть запущен.
 Запускаем графическую утилиту управления виртуальными машинами
     
 Откроется окно virt-manager
 
  
 Консоль управления ВМ
 
  
 Конфигурация ВМ и ее изменение
 
 
   
 Источник: http://habrahabr.ru/post/168791/
 |