Menu
KVM-Proxmox

KVM-Proxmox

Поднятие и настройка KVM

(пошаговый мануал и справочная информация)

 

Проверяем поддержку виртуализваии процессора (>0 - OK):

egrep -c '(vmx|svm)' /proc/cpuinfo

Установка для Debian 9:

sudo apt-get update

apt-get install qemu-kvm libvirt-clients libvirt-daemon-system virtinst bridge-utils

Проверка после установки:

smod | grep kvm

virsh sysinfo

 

Далее желательно, чтобы KVM и libvirt запускались не от пользователя root, а от например virt . Также необходимо определить место хранилица данных и машин, например /var/data/virt. 

mkdir -m 700 /var/data/virt

useradd -m -d /var/data/virt -s /bin/bash virt

passwd virt

adduser virt kvm

adduser virt libvirt
 
Отредактировать файл /etc/libvirt/qemu.conf:
 
user = "virt"
group = "virt"
 
и применить именения:
service libvirtd restart
 
Определить пул хранилища:
virsh pool-define-as --name guest_images --type dir --target /var/data/virt
 
Стартануть пул:
virsh pool-start guest_images
 
Добавить в автозапуск:
virsh pool-autostart guest_images
 
Проверить состояние пула:
virsh pool-list --all
 
И его свойства:
virsh pool-info guest_images
 
Настроить сеть в /etc/network/interfaces.
 
Было:
auto lo
iface lo inet loopback

allow-hotplug eno1
iface eno1 inet dhcp
 
Стало:
auto lo
iface lo inet loopback

auto kvmbr0
allow-hotplug kvmbr0
iface kvmbr0 inet dhcp
bridge_ports eno1

auto eno1
iface eno1 inet manual
 
Настройка bridge:
# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback

#Bridge  Name #
auto br1

# Bridge Information #
iface br1 inet static
bridge_ports eth1 eth0
bridge_stp off
bridge_fd 9
# Bride IP #
address 192.168.12.7
netmask 255.255.255.0
network 192.168.12.0
broadcast 192.168.12.255
gateway 192.168.12.2
dns-nameservers 192.168.12.2
dns-nameservers 8.8.8.8
 
 
Применить изменения:
service networking restart
 

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

 
Конфигурации виртуальных сетей расположены в /etc/libvirt/qemu/networks. Также для активации их необходимо линкануть в /etc/libvirt/qemu/networks/autostart.
 
default.xml (простая сеть для связи виртуалок без доступа наружу):
<network>
  <name>default>
  <uuid>08bc57ca-6bcb-42fa-9841-5f8fc61981b7>
  <bridge name='virbr0' stp='on' delay='0'/>
  <mac address='52:54:00:02:d0:4e'/>
  <domain name='default'/>
  <ip address='192.168.100.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.100.128' end='192.168.100.254'/>
    >
  >
>
 
nat.xml (сеть с nat'лом наружу через eno1):
<network>
  <name>default>
  <uuid>08bc57ca-6bcb-42fa-9841-5f8fc61981b7>
  <bridge name='virbr0' stp='on' delay='0'/>
  <mac address='52:54:00:02:d0:4e'/>
  <domain name='default'/>
  <ip address='192.168.100.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.100.128' end='192.168.100.254'/>
    >
  >
>
 

Полезные команды перед использованием.

 
Помощь:
virsh --help
 
Список доступных сетей:
virsh net-list

Просмотр информации о конкретной сети (с именем nat):
virsh net-info nat
 
 

Создание виртуалки с 1 CPU, 1 Гб RAM и 15 Гб места на диске, подключенную к nat:

 
virt-install \
  --virt-type=kvm \
  --name xub18 \
  --ram 1024 \
  --vcpus=1 \
  --hvm \
  --cdrom=/var/data/virt/xubuntu-18.04.2-desktop-i386.iso \
  --network network=nat,model=virtio \
  --graphics vnc \
  --disk path=/var/data/virt/ubunt18.qcow2,size=15,bus=virtio
 
 

Остальные полезные комманды:

 
Получение списка всех виртуалок:
virsh list --all

Получение информации о конкретной виртуалке:
virsh dominfo ubunt18

Запустить виртуалку:
virsh start ubunt18

Остановить виртуалку:
virsh shutdown ubunt18

Принудительно остановить виртуалку:
virsh destroy ubunt18

Ребутнуть виртуалку:
sudo virsh reboot ubunt18

Склонировать виртуалку:
virt-clone -o ubunt18-n ubunt18-clone --file /var/data/virt/images/ubunt18-clone.img

Включить/выключить автозапуск:
virsh autostart ubunt18
virsh autostart --disable ubunt18

Запуск virsh в диалоговом режиме:
virsh

Редактирование свойств виртуалки в XML, в том числе здесь можно изменить ограничение на количество памяти и тд:
virsh edit ubunt18
 
 Будет забиндить виртуалку на опеределнный IP в виртуальной сети:
virsh net-edit nat
 
После  надо добавить:
<host mac='52:54:00:b3:1e:5d' name='ubunt18' ip='192.168.10.150'/>
 
После этого нужно переинициализировать сеть:
virsh net-destroy nat
virsh net-start nat
service libvirt-bin restart

 

Сравнительная таблица совместимости форматов жестких дисков для разных виртуализаций.

  VMDK VDI

QCOW/2

VHDX VHD QED hdd RAW VPC
XEN +       +        
KVM + + +     +   + +
VirtulaBox + + + + + + + +  
Hyper-V       + +        

 

 

Подключение к KVM с помощью VirtManager

Данный набор инструментов позволит визуализировать весь commandline процесс создания и обслуживания виртуалок.

sudo apt-get install qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils

Проще всего использовать подключение по SSH.
Сначала настраиваем авторизацию по ключам.
На клиентской машине, с которой мы будем рулить удаленным сервером KVM запускаем:

ssh-keygen -t rsa

Место сохранения ключей оставляем по-умолчанию, ключевую фразу оставляем пустой.

Затем копируем соотвествующую часть ключа на удаленный хост:

ssh-copy-id -i ~/.ssh/id_rsa.pub user@remote_host

Тут user - имя пользователя на удаленной машине. Если имя локального пользователя и имя на удаленной машине совпадают - user@ можно не писать.

Проверяем, что все получилось - коннектимся:

ssh user@remote_host

Если имя локального пользователя и имя на удаленной машине совпадают - user@ можно не писать.

Дальше переходим к настройке хоста KVM.

Сначала - отключаем подключения TLS. Для этого в файле /etc/libvirt/libvirtd.conf раскомментируем строку:

#listen_tls = 0

Затем - добавляем пользователя в группу libvirtd, которая имеет права на подключение к соответствующему сокету: 

sudo usermod -a -G libvirtd username

Собственно все. 
В virt-manager создаем новое подключение. Жмакаем Connect to remote host.
Method - SSH.
Username - имя пользователя на удаленной машине.
Hostname - адрес удаленного компа

 

Особенности установки Windows на KVM

Требуется скачать 

https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/latest-virtio/virtio-win.iso

 

Создание win7

virt-install \
--name windows_7 \
--ram=1024 \
--vcpus=1 \
--os-type windows \
--os-variant win7 \
--disk path=/var/data/virt/windows_7.wmdk,size=15,bus=sata \
--network network=nat,model=rtl8139 \
--graphics vnc,password=XXX\
--disk device=cdrom,path=/var/data/virt/windows7.iso \
--disk device=cdrom,path=/var/data/virt/virtio-win.iso \
--boot cdrom,hd

УСТАНОВКА PROXMOX

1. Установка

Debian 9

echo deb http://download.proxmox.com/debian/pve buster pve-no-subscription | sudo tee /etc/apt/sources.list.d/proxmox.list

sudo wget http://download.proxmox.com/debian/proxmox-ve-release-6.x.gpg -O /etc/apt/trusted.gpg.d/proxmox-ve-release-6.x.gpg

apt -y update

sudo apt -y install proxmox-ve mc sudo ifupdown2

sudo reboot

Debian 11
# wget https://enterprise.proxmox.com/debian/proxmox-release-bullseye.gpg -O /etc/apt/trusted.gpg.d/proxmox-release-bullseye.gpg # chmod +r /etc/apt/trusted.gpg.d/proxmox-release-bullseye.gpg # optional, if you have a non-default umask
# echo "deb http://download.proxmox.com/debian/pve bullseye pve-no-subscription" | sudo tee /etc/apt /sources.list.d/pve-install-repo.list
#
sudo apt update && sudo apt dist-upgrade
#
echo "deb http://download.proxmox.com/debian/ceph-octopus bullseye main" | sudo tee /etc/apt/sources.list.d/ceph.list
#
sudo apt install proxmox-ve postfix open-iscsi
#
sudo reboot

2. Сеть
Создать бридж public интерфейса, чтобы можно было VLAN делать
Создать bond c LACP на двух интерфесов для кластерной сети (по необходимости)
3. Добавить/Создать кластер
4. Ceph
На добавляемых нодах CEPH сконфигурируется сам после установки.
Создать монитор, менеджер, OSD


Кластер:

Показать ноды
# pvecm nodes

Удалить ноду
# pvecm delnode irena


CEPH

Список пулов
# ceph osd pool ls
Список содержимого пула
# rbd list pool-name

# ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 2.96349 root default
-9 1.08769 host deneb
3 hdd 1.08769 osd.3 up 1.00000 1.00000
-5 0.90860 host intan
1 hdd 0.90860 osd.1 up 1.00000 1.00000
-7 0.05859 host irena
2 hdd 0.05859 osd.2 up 1.00000 1.00000
-3 0.90860 host zaurak
0 hdd 0.90860 osd.0 up 1.00000 1.00000


Удаление узла из ceph:
Выгрузить crashmap
# ceph osd getcrushmap -o /tmp/crushmap
# crushtool -d /tmp/crushmap -o crush_map
Откредактировать карту, удалив упавшие узлы
Загрузить обратно:
# crushtool -c crush_map -o /tmp/crushmap
# ceph osd setcrushmap -i /tmp/crushmap
Удалить osd:
# ceph osd tree
...

2 0 osd.2 down 0 1.00000
...
# ceph osd rm 2


Удаление Ceph:
rm -rf /etc/systemd/system/ceph*
killall -9 ceph-mon ceph-mgr ceph-mds
rm -rf /var/lib/ceph/mon/  /var/lib/ceph/mgr/  /var/lib/ceph/mds/
pveceph purge
apt purge ceph-mon ceph-osd ceph-mgr ceph-mds
rm /etc/init.d/ceph
for i in $(apt search ceph | grep installed | awk -F/ '{print $1}'); do apt reinstall $i; done
dpkg-reconfigure ceph-base
dpkg-reconfigure ceph-mds
dpkg-reconfigure ceph-common
dpkg-reconfigure ceph-fuse
for i in $(apt search ceph | grep installed | awk -F/ '{print $1}'); do apt reinstall $i; done
pveceph install
Миграция, например, из Hyper-V в ProxMox:
Ceph умеет держать виртуальные диски в RAW формате, поэтому требуются следуюзие действия.
Создать на сетевом разделе, также доступном в ProxMox экспорт виртуального диска с помощью StarWindConverter
Создать виртуалку в ProxMox с теме же параметрами (SATA/IDE).
Созданное имя диска, например, vm-111-disk-0
Удалить диск:
# rbd -p f3pool remove vm-111-disk-0
Импортировать виртуального диска в Ceph из qcow2 (обязательно в 2 прохода, иначе получается больгой объем)
# qemu-img convert -f qcow2 -O raw /mnt/pve/shd32/images/_tmp/vm-111-disk-0.qcow2 /home/user/data/vm-111-disk-0.raw
# rbd --dest-pool f3pool --image-format 2 import /home/user/data/vm-111-disk-0.raw vm-111-disk-0




CLI help:
Список машин
>cat /etc/pve/.vmlist
Остановка машины
>qm stop 103 force
stop for VM 103


При удалении OSD диск не "освобождается"
Помогает
lsblk-> дает длинный идентификатор, начинающийся с "ceph-"
dmsetup remove <ID beginning with "ceph">

lisolog (C) / 2021