====== Различные советы и секреты по установке сервера виртуализации ======
==== Подготовка сервера ====
== BIOS ==
* Для процессоров >=[[https://ark.intel.com/content/www/ru/ru/ark/products/codename/29900/products-formerly-sandy-bridge.html|Sandy Bridge]] HT включаем, для более ранних выключаем
* Если хотим максимальной производительности, то
* C1E Support > disabled (on Fujitsu servers is called "Enhanced Halt State (C1E)")
* Intel C-State > disabled
* Enhanced Intel Speedstep Tech : off (dynamic frequency)
* Max performance > ON (Turbo mode)
* Включить поддержку IOMMU (SR-IOV)
== Proxmox VE ==
* Заменим репозитарий на бесплатный (для версии 7):
#> cd /etc/apt/sources.list.d/
#> cat ./pve-enterprise.list
#deb https://enterprise.proxmox.com/debian/pve bullseye pve-enterprise
deb http://download.proxmox.com/debian/pve bullseye pve-no-subscription
* Заменим репозитарий на бесплатный (для версии 8):
#> echo "deb [arch=amd64] http://download.proxmox.com/debian/pve bookworm pve-no-subscription" > /etc/apt/sources.list.d/pve-install-repo.list
#> wget https://enterprise.proxmox.com/debian/proxmox-release-bookworm.gpg -O /etc/apt/trusted.gpg.d/proxmox-release-bookworm.gpg
#> sha512sum /etc/apt/trusted.gpg.d/proxmox-release-bookworm.gpg
#> apt update && apt full-upgrade
\
* Установим полезные пакеты:
apt install net-tools traceroute mc sudo iotop
apt install lm-sensors && sensors-detect
== проброс pci(e) устройств ==
Надо почитать [[https://pve.proxmox.com/wiki/PCI(e)_Passthrough|тут]] (но в доке ошибка - нет упоминания что надо делать update-grub). Далее процесс коротко:
* в параметр **GRUB_CMDLINE_LINUX_DEFAULT**, файла **/etc/default/grub**, добавить **intel_iommu=on** (и, если нужно, **iommu=pt**)
* в **/etc/modules** добавить:
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
* создать файл /etc/modprobe.d/vfio.conf, с содержимым:
options vfio_iommu_type1 allow_unsafe_interrupts=1
* сделать **update-grub && update-initramfs -u -k all**
* перезагрузить систему
* убедится что параметры ядра применились: **cat /proc/cmdline**
* убедится что IOMMU включен **dmesg | grep -e DMAR -e IOMMU -e AMD-Vi**
* увидеть группы IOMMU **find /sys/kernel/iommu_groups/ -type l**
== Мониторинг при помощи zabbix ==
Установим агента и дополнительные утилиты:
apt install zabbix-agent jq
Если у Вас старый сервер zabbix то этот агент НЕ подойдет. Для исправления ситуации можно взять zabbix-agent от debian9:
root@debian9:/usr/sbin# lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 9.13 (stretch)
Release: 9.13
Codename: stretch
root@debian9:/# /usr/sbin/zabbix_agentd -V
zabbix_agentd (daemon) (Zabbix) 3.0.32
Т.е. можно файл /usr/sbin/zabbix_agentd просто скопировать. Не по джедайски, но работает. Также отключим авто обновление zabbix-agent
apt-mark hold zabbix-agent
== Отключение обновления ядра ==
Обновление ядра требует перезагрузки системы, если сервер работает в производственном режиме не всегда возможно осуществить это. Поэтому посмотрим какая версия ядра у нас (в примере, uname выдал 5.15) и заблокируем обновление:
uname -a
apt-mark hold pve-firmware pve-kernel-5.15 # PVE7
apt-mark hold pve-firmware proxmox-kernel-6.8 # PVE8.2
== Добавление LVM хранилища ==
Допустим, что у нас есть ПУСТОЙ диск /dev/sdb с таблицей разделов GPT (fdisk /dev/sdb и нажать g):
* Создадим LVM раздел:
sgdisk -N 1 /dev/sdb
если ругается: Caution: invalid main GPT header, but valid backup; regenerating main header from backup!, то очистим 0 сектор
dd if=/dev/zero of=/dev/sdb bs=512 count=10
fdisk /dev/sdb # выбрать g и w
* Создадим Physical Volume (PV) без вопросов и размером метабазы 250K (ПЕРЕД metadatasize два минуса, вики отображает неправильно!):
# ''pvcreate --metadatasize 250k -y -ff /dev/sdb1''
* Создадим группу томов “vmdata” на /dev/sdb1
# ''vgcreate vmdata /dev/sdb1''
Далее подключим vmdata в веб интерфейсе.
Если диск не пустой, то fdisk /dev/sdb, далее удаляем разделы и с помощью g создаем GPT раздел.
== Удаляем LVM-Thin хранилище по умолчанию ==
Не знаю почему, но мне не нравится LVM-Thin разделы. Возможно мне не понятна тонкие материи продажи воздуха облачных сервисов, однако когда я выделяю место для VM я хочу быть УВЕРЕН, что место на диске в кол-ве указанного будет ДОСТУПНО VM в любом случае. LVM-Thin позволяет выделять место "по потребности"...
Однако, следует помнить что **снимки** доступны только для LVM-Thin или ZFS.
* Для начала проверим разделы:
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 111.8G 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 256M 0 part
└─sda3 8:3 0 111.6G 0 part
├─pve-swap 253:0 0 7G 0 lvm [SWAP]
├─pve-root 253:1 0 27.8G 0 lvm /
├─pve-data_tmeta 253:2 0 1G 0 lvm
│ └─pve-data 253:4 0 60.9G 0 lvm
└─pve-data_tdata 253:3 0 60.9G 0 lvm
└─pve-data 253:4 0 60.9G 0 lvm
Или командой для списка доступных тонких пулов:
# pvesm lvmthinscan pve
* Удалим из веб интерфейса (Датацентр\Хранилище), по умолчанию называется **local-lvm**
* Удаляем раздел /dev/pve/data
# lvremove /dev/pve/data
# lsblk
* Добавим в веб интерфейс (Датацентр\Хранилище), **local-lvm** тип LVM, имя pve
Все теперь в корневом диске у нас есть хранилище local-lvm со свободным пространством. Имейте ввиду что тут теперь можно удалить и корневой раздел PVE, что делать крайне не рекомендуется :)
== Настройка синхронизации времени ==
For systems using chrony:
Specify which servers chrony should use in /etc/chrony/chrony.conf:
server ntp1.example.com iburst
server ntp2.example.com iburst
server ntp3.example.com iburst
Restart chrony:
# systemctl restart chronyd
Check the journal to confirm that the newly configured NTP servers are being used:
# journalctl --since -1h -u chrony
== Настройка Proxmox Backup Server (PBS) ==
Ограничим время хранения протоколов заданий:
proxmox-backup-manager node update --task-log-max-days 60
по умолчанию не ограничено, так что рано или поздно меcто на PBS закончится.