Перейти к содержимому

Proxmox VE: первоначальная настройка

Привет, Мир! В данной статья я решил Вам рассказать некоторые моменты в настройке 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 канале. До связи!

Опубликовано вИнструкцииСерверные ОС

Ваш комментарий будет первым

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *