Привет, Мир! В данной статья я решил Вам рассказать некоторые моменты в настройке Proxmox VE. Думаю, Вам будет полезно узнать что-то новое или ознакомиться с альтернативными вариантами решения задач по первоначальной настройке хоста PVE.
Proxmox VE Helper-Scripts
Первый ресурс который может помочь Вам сократить время разворачивания Вашего сервера виртуализации — Proxmox VE Helper-Scripts. В списке скриптов есть много интерестного, например, Proxmox VE Post Install — настройка репозиториев и многое другое. Все скрипты на этом сайте представлены в виде команд на скачивание и выполнение файла скрипта типа:
bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/misc/post-pve-install.sh)"
Эти команды необходимо вводить в консоль развернутого сервера и интерактивно ответив на вопросы получить готовый результат. Кроме скриптов настроек самого сервера там представлены и другие, для разворачивания полезных контейнеров и виртуальных машин.
Подключаем сервер PBS
Теперь давайте подключим наш новенький PVE к Proxmox Backup Server настроенному ранее в предыдущей статье.
Заходим в консоль PBS и вводим команду для получения отпечатка:
proxmox-backup-manager cert info | grep Fingerprint
Выдачу сохраняем, будем использовать для настройки.
Заходим в Proxmox VE, центр обработки данных — Хранилище. Жмем кнопку добавить и выбираем Proxmox Backup Server. Вводим данные: ID, адрес сервера, пользователя и пароль, Datastore и отпечаток, полученный выше. Вот пример из созданного нами конфига в предыдущей статье:
Вот так все просто добавляется из WEB-интерфейса. Но можно и командой:
pvesm add pbs backupserver --server 192.168.1.12 --datastore backup
- pvesm add pbs — добавление хранилища;
- backupserver — это имя будет отображаться в веб-интерфейсе PVE;
- —server 192.168.1.12 — указываем хостнейм или IP-адрес сервера PBS;
- —datastore backup — тут указываем имя существующего datastore PBS.
Далее указываем пользователя и пароль от PBS:
pvesm set backupserver --username backup@pbs!backuptoken --password XXXXXXXX
И закрепляем все это отпечатком:
pvesm set backupserver --fingerprint
XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX
На этом все, мы добавили наш сервер PBS в PVE и теперь можем консолидировано управлять резервными копиями и снэпшотами.
Поехали дальше! Какой же домашний сервер обходится без кучи устройств (и не только USB), которые нам необходимо пробросить в виртуальные машины? Далее я расскажу как настроить проброс PCIe.
PCI(e) Passthrough
Если Вы решите пробросить видеокарту, сетевую или какое-то другое устройство в виртуальную машину, тогда Вам понадобится технология . Ниже я опишу выжимку из официальной инструкции.
Ваше железо должно поддерживать технологии IOMMU, необходимо проверить настройки BIOS:
Процессоры Intel
Для процессоров Intel включите VT-d в BIOS.
Процессоры AMD
Если вы используете процессоры AMD, включите AMD-Vi в BIOS.
После настройки необходимо сконфигурировать загрузчик GRUB в самом Proxmox VE. Отредактируйте файл /etc/default/grub
, чтобы добавить параметры intel_iommu=on или amd_iommu=on (в зависимости от вашего процессора):
#Intel
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"
#AMD
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on"
Если ваше оборудование поддерживает сквозной режим IOMMU, можно включить этот режим добавив:
iommu=pt
Добавим модули vfio, vfio_iommu_type 1, vfio_pci и vfio_virqfd в файл /etc/modules
, чтобы загрузить их при загрузке:
echo "vfio" >> /etc/modules
echo "vfio_iommu_type1" >> /etc/modules
echo "vfio_pci" >> /etc/modules
echo "vfio_virqfd" >> /etc/modules
update-initramfs -u -k all
Обновим загрузчик и перезагрузим хост:
update-grub reboot
После перезагрузки Вы можете проверить работоспособность командой:
dmesg | grep -e DMAR -e IOMMU -e AMD-Vi
Выдача будет похожа на это:
root@mainpve:~# dmesg | grep -e DMAR -e IOMMU -e AMD-Vi
[ 0.019133] ACPI: DMAR 0x00000000BF79E0C0 000158 (v01 AMI OEMDMAR 00000001 MSFT 00000097)
[ 0.019202] ACPI: Reserving DMAR table memory at [mem 0xbf79e0c0-0xbf79e217]
[ 0.206884] DMAR: IOMMU enabled
[ 0.528741] DMAR: Host address width 40
[ 0.528743] DMAR: DRHD base: 0x000000fbffe000 flags: 0x1
[ 0.528753] DMAR: dmar0: reg_base_addr fbffe000 ver 1:0 cap c90780106f0462 ecap f020fe
[ 0.528758] DMAR: RMRR base: 0x000000000e4000 end: 0x000000000e7fff
[ 0.528761] DMAR: RMRR base: 0x000000bf7ec000 end: 0x000000bf7fffff
[ 0.528764] DMAR: ATSR flags: 0x0
[ 0.528769] DMAR-IR: IOAPIC id 6 under DRHD base 0xfbffe000 IOMMU 0
[ 0.528772] DMAR-IR: IOAPIC id 7 under DRHD base 0xfbffe000 IOMMU 0
[ 0.529297] DMAR-IR: Enabled IRQ remapping in xapic mode
[ 0.965297] DMAR: No SATC found
[ 0.965300] DMAR: dmar0: Using Queued invalidation
[ 0.970056] DMAR: Intel(R) Virtualization Technology for Directed I/O
Все работает и мы можем добавить устройство в ВМ, например:
С пробросом устройств иногда возникают проблемы, но их решение — это целая новая статья. Далее я Вам расскажу как удалить local-lvm и создать новый раздел из полученного свободного пространства.
Удаление local-lvm и перераспределение места
Если Вы так же как и я выполнили стандартную установку PVE и столкнулись с необходимостью удаления local-lvm раздела, тогда я ниже Вам подскажу как решить эту задачу.
Прежде чем мы начнем, зайдите в веб-интерфейс PVE, удалите local-lvm из Datacenter -> Storage.
Размонтируем и удалим lvm-thin:
umount /dev/pve/data
lvremove /dev/pve/data
Проверим свободное место:
vgdisplay pve | grep Free
Мы мжем использовать это место расширив раздел local, но я Вам рекомендую создать новый lvm:
lvcreate -l 5482 -n data pve
*Замените число 5482 вашим доступным свободным пространством, полученным из выдачи предыдущей команды.
Форматируем и монтируем:
mkfs.ext4 /dev/pve/data
mkdir /mnt/data
mount /dev/pve/data /mnt/data
*mkfs.ext4
— для ext4, а mkfs.xfs -f
для xfs.
Чтобы раздел монтировался при загрузке, добавим в /etc/fstab
строку:
/dev/pve/data /mnt/data ext4 defaults 0 0
*Если вы использовали xfs, замените ext4 на xfs
Теперь можно смело добавить его в Proxmox VE:
На этом все, теперь можно использовать это хранилище под Ваши нужды. Ну и на последок, давайте подключим наш Источник Бесперебойного Питания к Proxmox.
Подключаем ИБП к Proxmox
Чтобы защитить наше железо и данные нам необходим ИБП, но что от него толку если мы не умеем им управлять и мониторить его события и данные. Далее я расскажу о настройке NUT.
Устанавливаем NUT:
apt install nut -y
Ищем подключенные ИБП и выводим их параметры:
nut-scanner -U
Делаем копию файла /etc/nut/nut.conf
и правим его:
mv /etc/nut/nut.conf /etc/nut/nut.example.conf
nano /etc/nut/nut.conf
Вставляем строку с параметром работы сервера и сохраняем файл:
MODE=netserver
Так же поступаем и с etc/nut/ups.conf
и правим его:
mv /etc/nut/ups.conf /etc/nut/ups.example.conf
nano /etc/nut/ups.conf
В него нам нужно скопировать данные полученные командой nut-scanner -U
и еще несколько параметров, к примеру:
pollinterval = 15
maxretry = 3
offdelay = 120
ondelay = 240
[apc]
driver = "usbhid-ups"
port = "auto"
vendorid = "051D"
productid = "0002"
product = "Back-UPS ES 700G FW:871.O2 .I USB FW:O2"
serial = "5B1108T39936"
vendor = "APC"
bus = "004"
Протестируем командой:
upsdrvctl start
Выдача должна быть похожа на такую:
Network UPS Tools - UPS driver controller 2.7.4
Network UPS Tools - Generic HID driver 0.41 (2.7.4)
USB communication driver 0.33
Using subdriver: APC HID 0.98
Теперь отредактируем файл /etc/nut/upsd.conf
:
mv /etc/nut/upsd.conf /etc/nut/upsd.example.conf
nano /etc/nut/upsd.conf
Пропишем порты для «прослушивания»:
LISTEN 0.0.0.0 3493
LISTEN :: 3493
Далее список пользователей NUT /etc/nut/upsd.users
:
mv /etc/nut/upsd.users /etc/nut/upsd.example.users
nano /etc/nut/upsd.users
Вставим такую конфигурацию:
[upsadmin]
# Админ
password = ********
# Даем пользователю права
actions = SET
actions = FSD
instcmds = ALL
upsmon master
[upsuser]
# Обычный пользователь
password = ********
upsmon slave
*замените звездочки на секьюрный пароль.
Теперь нам необходимо внести данные в файл /etc/nut/upsmon.conf
:
mv /etc/nut/upsmon.conf /etc/nut/upsmon.example.conf
nano /etc/nut/upsmon.conf
Вставляем такие параметры :
RUN_AS_USER root
MONITOR apc@localhost 1 upsadmin ******* master
MINSUPPLIES 1
SHUTDOWNCMD "/sbin/shutdown -h"
NOTIFYCMD /usr/sbin/upssched
POLLFREQ 4
POLLFREQALERT 2
HOSTSYNC 15
DEADTIME 24
MAXAGE 24
POWERDOWNFLAG /etc/killpower
NOTIFYMSG ONLINE "UPS %s on line power"
NOTIFYMSG ONBATT "UPS %s on battery"
NOTIFYMSG LOWBATT "UPS %s battary is low"
NOTIFYMSG FSD "UPS %s: forced shutdown in progress"
NOTIFYMSG COMMOK "Communications with UPS %s established"
NOTIFYMSG COMMBAD "Communications with UPS %s lost"
NOTIFYMSG SHUTDOWN "Auto logout and shutdown proceeding"
NOTIFYMSG REPLBATT "UPS %s battery needs to be replaced"
NOTIFYMSG NOCOMM "UPS %s is unavailable"
NOTIFYMSG NOPARENT "upsmon parent process died - shutdown impossible"
NOTIFYFLAG ONLINE SYSLOG+WALL+EXEC
NOTIFYFLAG ONBATT SYSLOG+WALL+EXEC
NOTIFYFLAG LOWBATT SYSLOG+WALL+EXEC
NOTIFYFLAG FSD SYSLOG+WALL+EXEC
NOTIFYFLAG COMMOK SYSLOG+WALL+EXEC
NOTIFYFLAG COMMBAD SYSLOG+WALL+EXEC
NOTIFYFLAG SHUTDOWN SYSLOG+WALL+EXEC
NOTIFYFLAG REPLBATT SYSLOG+WALL
NOTIFYFLAG NOCOMM SYSLOG+WALL+EXEC
NOTIFYFLAG NOPARENT SYSLOG+WALL
RBWARNTIME 43200
NOCOMMWARNTIME 600
FINALDELAY 5
*замените звездочки на секьюрный пароль от upsadmin
Описание параметров Вы можете посмотреть в официальной инструкции по необходимости. Единственное что от себя дополню — при постоянных обрывах связи, встречающихся при использовании подключения по USB, необходимо экспериментальным путем поправить ряд взаимозависимых параметров в этой конфигурации. Вот они:
POLLFREQ
POLLFREQALERT (= POLLFREQ / 2)
DEADTIME (= POLLFREQ * 6)
MAXAGE (= POLLFREQ * 6)
Но для начала можно оставить все как есть.
Продолжим с /etc/nut/upssched.conf
:
mv /etc/nut/upssched.conf /etc/nut/upssched.example.conf
nano /etc/nut/upssched.conf
Delete all and add :
CMDSCRIPT /etc/nut/upssched-cmd
PIPEFN /etc/nut/upssched.pipe
LOCKFN /etc/nut/upssched.lock
AT ONBATT * START-TIMER onbatt 30
AT ONLINE * CANCEL-TIMER onbatt online
AT ONBATT * START-TIMER earlyshutdown 30
AT LOWBATT * EXECUTE onbatt
AT COMMBAD * START-TIMER commbad 30
AT COMMOK * CANCEL-TIMER commbad commok
AT NOCOMM * EXECUTE commbad
AT SHUTDOWN * EXECUTE powerdown
AT SHUTDOWN * EXECUTE powerdown
*прошу обратить внимание на зачеркнутую строку, её мне пришлось удалить из-за возникших проблем с работой этого счетчика. Ранее этих проблем не было, но в последней установке с APC ES 700 данный параметр тушил сервер периодически без причины. Требует Вашей экспериментальной проверки на своем оборудовании.
Теперь нам нужно создать файл скрипта /etc/nut/upssched-cmd
:
mv /etc/nut/upssched-cmd /etc/nut/upssched-cmd.example
*команда выдаст ошибку если данного файла не было создано ранее. Создадим новый:
nano /etc/nut/upssched-cmd
И вставим «тело» скрипта, тут так же зачеркнута часть с проблемным таймером как и выше. в конфигурации:
#!/bin/sh
case $1 in
onbatt)
logger -t upssched-cmd "UPS running on battery"
;;
earlyshutdown)
logger -t upssched-cmd "UPS on battery too long, early shutdown"
/usr/sbin/upsmon -c fsd
;;
shutdowncritical)
logger -t upssched-cmd "UPS on battery critical, forced shutdown"
/usr/sbin/upsmon -c fsd
;;
upsgone)
logger -t upssched-cmd "UPS has been gone too long, can't reach"
;;
*)
logger -t upssched-cmd "Unrecognized command: $1"
;;
esac
Сделаем его исполняемым:
chmod +x /etc/nut/upssched-cmd
Для применения конфигурации NUT необходимо перезагрузить хост, но можно и перезапустить только необходимые службы командами:
service nut-server restart
service nut-client restart
systemctl restart nut-monitor
upsdrvctl stop
upsdrvctl start
Протестируем командой:
upsc apc@localhost
Так же все тайминги для определенных действий можно вывести командой:
upsrw apc@localhost
Если Вам необходимо что-то исправить из списка, то это можно сделать этой же командой. Например, исправим параметры minimum runtime
на 10 минут и minimum charge
на 50%:
upsrw -s battery.runtime.low=600 apc@localhost
upsrw -s battery.charge.low=50 apc@localhost
Потребуется ввести имя пользователя и пароль администратора NUT (upsadmin). Новые параметры будут применены после перезагрузки хоста.
Проверить срабатывание скрипта выключения хоста Вы можете командой:
upsmon -c fsd
На этом все, теперь можно не беспокоится за данные, а так же можно подключать ВМ и контейнеры к данному серверу NUT и настраивать мониторинг или срабатывание автоматизаций по данным с него.
На этом данная статья подходит к концу, я намеренно не стал растягивать эту инструкцию на несколько записей дабы сэкономить Ваше время.
Так же не забывайте о возможности задать вопросы в комментариях или Telegram канале. До связи!
Ваш комментарий будет первым