Pull to refresh

Личное облако на Proxmox

Level of difficultyMedium
Reading time8 min
Views21K

В прошлой статье (https://habr.com/ru/articles/794508/) я писал как поставить Proxmox 8 на Orange Pi 5(b). Это даже получилось, но я уперся в то, что производитель железки не выпускает свежие ядра под нее. Для железки есть 5.10.160 и оно устарело для Proxmox 8. Виртуалки работают, но есть проблемы с фаерволом. Производитель обещает вот-вот выпустить новое, но ждать я не стал и решил сделать инфраструктуру по другому, позже докину ноды на арме просто. О чем и напишу. Получается уже цикл статей. Эта будет описывать цель и первые шаги к ней.


Итак, на чем я решил строить инфраструктуру домашнего облака:

  1. Intel NUC. Это спека по которой выпускают компактные компьютеры. Купил Asus Mini PC.

  2. Док станция для двух 2.5-3.5 HDD, которая умеет работать со скоростью 10Gbps по USB 3.2

  3. Два HDD 3.5 на 8Тб. Что мелочиться.

  4. С Orange PI 5b снаял два SDD на 2Тб

  5. Докупил еще один NVME SDD на 2Тб что бы внутрь NUC-a воткнуть.

  6. Бесперебойник для этой всей красоты.

Выглядит все это вот так:

Идея такова:

  1. Поставить на NUC Proxmox 8, в нем сделать набор виртуалок и на них построить все свои сервисы.

  2. Приобрести за 4$ в месяц минимальный внешний сервер в облаке что бы через него выставить наружу свои сервисы.

Сетевая инфраструктура будет такова:

  1. Внешний сервер будет pfSense c Wireguard VPN. Я вообще имею статью (https://habr.com/ru/articles/756290/) о том как используя Ansible playbook сделать себе VPN, но это мне нужно было что бы Ansible и IPTables освоить ну и с сетями получше разобраться. Для реального же использования рекомендую pfSense. Он может все на свете, что можно придумать в области VPN, фаерволов и прочего. Плюс удобен и отлично документирован. Не говоря уже о высочайшем качестве.

  2. Внутри Proxmox из виртуалок будет сделано две изолированных локальных сети. Изолированных от всего на свете. Одна под личные, вторая под публичные сервисы. Это будут просто два сетевых моста, которые ни к чему не привязаны.

  3. Так же внутри будет виртуалка с pfSense, который будет видеть две эти локалки и WAN интерфейс (выход в интернет). Решено пока не морочить голову с VLAN так как сеть простая. Он будет гейтом и будет по VPN соединен с внешним pfSense для публикации сервисов.

  4. На внутреннем pfSense будет поднят HAProxy что бы публиковать сервисы из виртуалок на порту. На поддоменах.

  5. На внешнем pfSense будет проброшен порт HAProxy внутреннего (он виден в VPN) в интернет. Это позволит на внешнем сервере иметь только VPN и более ничего, а значит он будет копеечный.

  6. На начальном этапе на самом деле все pfSense будут подняты прямо в Proxmox, так как VPN pfSense иметь в облаке или нет, не важно пока нет внешних коннектов. Это позволит в безопасной обстановке все протестить.

Такое решение с одной стороны не требует дорогого внешнего сервера. Тут нужно отметить, что трафик тарифицируется с определенного объема и надо это учитывать. С другой позволяет легко сносить поломанные в процессе экспериментов виртуалки, делать шаблоны и снапшеты с бэкапами, виртуалок я уже поломал с десяток и обычно вместо починки просто откатываю, что время экономит. Proxmox великолепен когда работает! При этом изоляция локалок, изоляция обоих pfSense внутри VPN и хост системы позволяет не особо беспокоится над тем, что внешние сервисы будут представлять опасность для моих домашних железок.

Итак, начнем. Первое это установка Proxmox VE. Тут сразу есть грабля. Их iso дистр самодельный на мой взгляд шлак (мое IMHO после огребания проблем, в коментах сказали, что проблем не имеют). Там LVM не работает и при этом debian перелопачен так, что лучше не видеть. Так что попробовав его я поставил Debian Bookworm и уже в него накатил Proxmox. Процесс установки такой же как в моей прошлой статье (https://habr.com/ru/articles/794508/) Оф. дока тут (https://pve.proxmox.com/wiki/Install_Proxmox_VE_on_Debian_12_Bookworm) и в ней рекомендуют ставить первым ядро. Мне в коментах подсказали. Я ставил его потом и проблем кажется нет, только KSM никак не проверю работает ли. За исключением того, что не надо прошивки ставить для ARM-а все на прошлую статью похоже:

Редактируем как там описано /etc/hosts

127.0.0.1       localhost
192.168.1.230   pve-main.proxmox.com pve-main

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Добавляем репозитории Proxmox в /etc/apt/source.lists

deb http://ftp.debian.org/debian bookworm main contrib non-free non-free-firmware
deb http://ftp.debian.org/debian bookworm-updates main contrib non-free non-free-firmware
deb http://security.debian.org/debian-security bookworm-security main contrib non-free non-free-firmware


# Proxmox Backup Server pbs-no-subscription repository provided by proxmox.com,
# NOT recommended for production use
deb http://download.proxmox.com/debian/pbs bookworm pbs-no-subscription
deb http://download.proxmox.com/debian/pbs-client bookworm main
deb http://download.proxmox.com/debian/pve bookworm pve-no-subscription

Устанавливаем aptitude, что бы если будут проблемы с зависимостями она их нашла и решила. В репах Proxmox они бывают, так что рекомендую.

apt-get install aptitude

Отключаем NetworkManager так как PVE рулит сетью с помощью ifupdown2

systemctl stop NetworkManager.service
systemctl disable NetworkManager.service

Отключаем все suspend/hibernate штуки в debian, так как они сервер гасить будут:

systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target

Ставим Proxmox VE (PVE) причем обратите внимание, что ifupdown2 ставится первым. Думаю это может быть важно.

aptitude install ifupdown2 proxmox-ve open-iscasi

В итоге Proxmox установится и заработает. Можно зайти в консоль по https://${host-ip}:8006, но это еще не все. Хочется красивых бэкапов, так что ставим еще Proxmox Backup Server (PBS) эта штука умеет их сжимать и дедуплицировать и еще много чего. Очень хорошая. Я поставил его прямо на тот же хост, что и PVE.

aptitude install proxmox-backup-server proxmox-backup-client

Клиент ставится потому, что бэкапить сам Proxmox сервер тоже хочется и он, как ни странно, сам себя прекрасно бэкапит. Теперь PBS доступен по адресу https://${host-ip}:8007, можно зайти в консоль. Бэкап самого сервера пока сделать некуда, собственно и займемся тем что бы было куда, идея такова:

  1. Два HDD будут собраны в один LVM Stripe 2 том, то есть их скорость будет складываться практически при записи. Это не надежно, так как если помрет один, то помрет весь раздел, но скорость мне важнее. При этом расчет сделан на то, что либо помрут HDD с бэкапами, либо помрут SDD с данными и виртуалками, не одновременно и в этом дублирование. Я не бизнес и мне бэкапы в состоянии на пять лет назад не нужны. Либо из текущих данных восстановлю бэкапы, либо из бэкапов текущие данные. Эх, давно я не слышал как работают HDD, звук похож на хаптик вибрики современные на телефонах :)

  2. Раздел на внутреннем SDD и два внешних SDD будут слиты в один LVM Stripe 3 том для той же цели, скорость работы. Раздел и диски одинакового размера. Это так получилось потому, что два внешних SSD на деле не 2Гб, а маркетингово обрезаны до круглых чисел. Да, тут есть грабля, не во всех USB портах SSD работали стабильно, иногда начинались тормоза и зависания пока не воткнул в те порты, что умеют USB 3.2 gen 2 + Thunderbolt 4.

  3. Сделанный при установке PVE LVM том /dev/pve-main-vg/root будет как раз заменен на том из п.2 Так как если просто добавить в него два SSD, то Stripe 3 не будет.

Собственно собираем два HDD в том. Далее примерно по памяти, если что тут смотреть (https://access.redhat.com/documentation/ru-ru/red_hat_enterprise_linux/7/html/logical_volume_manager_administration/stripe_create_ex).

pvcreate /dev/sdX /dev/sdX
vgcreate backups /dev/sdX /dev/sdX
lvcreate -i 2 -I 4 -l 100%FREE -n backups_2_stripe backups
mkfs.ext4 /etc/backups/backups_2_stripe

У нас в итоге есть раздел для бэкапов, который пашет с практически их суммарной скоростью. Этим и многим другим LVM прекрасен. Я не стал мудрить с ZFS и Btrfs хоть они и имеют нечто похожее потому, что LVM проще, плюс у Proxmox есть интеграция с ним, хотя и с FS она есть, не пробовал.

Далее наступает момент преобразования /dev/pve-main-vg/root в Stripe 3 том. Это не обязательно, просто хочется. Сначала я сделал загрузочную флешку с Ubuntu 22.04 live и сделал все с нее (для справки отлично описано тут https://access.redhat.com/documentation/ru-ru/red_hat_enterprise_linux/7/html/logical_volume_manager_administration/stripe_create_ex):

  1. Монтируем /dev/pve-main-vg/root в /mnt/root

  2. Монитруем /dev/backups/backups_2_stripe в /mnt/backups

  3. Делаем в /mnt/backups папку /mnt/backups/root_copy

  4. Копируем весь рут в папку rsync -avh /mnt/root/ /mnt/backups/root_copy/ команда по памяти, гуглите.

  5. Отмонтируем все.

  6. Сносим /dev/pve-main-vg/root командой lvremove /dev/pve-main-vg/root он спросит в своем ли ты уме, отвечаем, что кажется да.

  7. Сносим так же /dev/pve-main-vg/swap_1 это просто подкачка и она потом все равно будет нужна, но для чистоты эксперимента.

  8. Добавляем SSD диски в volume group: vgextend pve-main-vg /dev/sdX && vgextend pve-main-vg /dev/sdX

  9. Делаем новый striped LVM logical volume: lvcreate -i 3 -I 4 -l 100%FREE -n rootpve-main-vg

  10. Создаем FS: mkfs.ext4 /dev/pve-main-vg/root

  11. Далее уменьшаем этот root на 1Гб (так мне проще, отлично описано тут https://access.redhat.com/documentation/ru-ru/red_hat_enterprise_linux/8/html/configuring_and_managing_logical_volumes/modifying-the-size-of-a-logical-volume_configuring-and-managing-logical-volumes) что бы подкачку впихнуть: lvreduce --resizefs -L -1G pve-main-vg/root

  12. Создаем подкачку: lvcreate -i 3 -I 4 -l 100%FREE -n swap_1pve-main-vg

  13. Делаем раздел для будущей подкачки собственно подкачкой: mkswap /dev/pve-main-vg/swap_1

  14. Копируем из /mnt/backups/root_copy в /dev/pve-main-vg/root все обратно тем же rsync, разберетесь как.

Без раздела подкачки не обойтись даже если памяти много. Раздел в скриптах PVE используется, так что сделал. В итоге у нас есть /dev/pve-main-vg/root, который работает со скоростью в гигабайты в секунду не напрягаясь. Диски подготовлены, пора переходить к настройке PVE. Сначала установим PVE ядро, что бы там KMS работал (работает ли он не проверял пока):

aptitude install proxmox-kernel-6.5.13-1-pve-signed 

Обратите внимание, я поставил подписанное ядро так как у меня Secure Boot в UEFI Bios разрешен. Потом я намудрил с MOK и пришлось его подписывать снова как описано тут (https://pve.proxmox.com/wiki/Secure_Boot_Setup). Но думаю вы обойдетесь, на всякий случай ссылку даю. Далее можно настроить фаервол.

Фаервол устроен в PVE интеренсно. Есть настройки датацентра, настройки отдельных нод и настройки отдельных виртуалок. Что бы он заработал его надо на всех уровнях включить. Каждый следующий уровень наследует правила предыдущего. Важно сначала настроить правила, а потом включить фаервол, иначе он все зарежет. Правила на уровне датацентра такие как на картинке:

Тут открыты все порты, что использует для различных нужд PVE и порты по которым доступны разные виды консолей управления. После создания правил надо на всех уровнях разрешить фаервол, покажу уровень датацентра:

Фаервойл настроен и включен, пора настроить PBS, что бы иметь много бэкапов! Для этого заходим в консоль управления PBS: https://${host-ip}:8007 жмем кнопку add datastore и добавляем наш том с двумя HDD: /dev/backups/backups_2_stripe как хранилище там ничего сложного нет, разберетесь. Один момент, добавляется папка на этом томе потому она у меня монтируется при загрузке сервера для чего в /etc/fstab написано:

/dev/mapper/backups-backups_striped_volume /mnt/backups               ext4    errors=remount-ro 0       1

С момента добавления хранилища нужно сходить в PVE и добавить PBS в качестве storage для бэкапов. Немного странная конструкция на мой вкус, но у них так. Да, установка PVE и PBS на один физический сервер не рекомендована, но так как если все это накроется то настроить снова это много текста в статье, но немного команд, а бэкапы останутся, то я не стал усложнять. Собственно добавление PBS в PVE:

Fingerprint для того что бы добавить PBS как хранилище в PVE можно взять в PBS открыв сертификат, откуда и скопипастить, остальное разберетесь:

Теперь мы можем нажать кнопку "бэкапь!":

Так же мы можем забэкапить сам PVE сервер. На деле от него нам надо только папку /etc и особенно /etc/pve. Но /etc/pve это точка монтирования fuse FS, так что команда на бэкап должна особо сказать, что ее надо тоже забрать так как по умолчанию PBS клиентъ пропускает точки монтирования. Я для теста залил в бэкап вообще весь диск он точки монтирования пропустил кроме той, что я ему указал:

proxmox-backup-client backup root.pxar:/ --repository ${host-ip}:proxmox-backup-server-data --include-dev /etc/pve

proxmox-backup-server-data это так называется HDD LVM том, добавленный в PBS в качестве хранилища. Люблю длинные самодокументирующие названия.

На пока все, эта конструкция позволит создавать виртуалки, бэкапить дедуплицированно-сжатые бэкапы и вообще куролесить. В следующий раз про сеть, если настроение будет.

UPD: Я особо не разбирался, но кажется что бы работал KSM надо установить пакет aptitude install ksmtuned. При этом освобождение памяти начнется при 80% ее использовании. ОЗУ у меня много для моих задач, так что пока не нужно. Оставлю для желающих разобраться https://pve.proxmox.com/wiki/Dynamic_Memory_Management

P.S Для настроек и консультаций, а так же как учебник очень рекомендую использовать ChatGPT. Она отвечает на конкретный вопрос и не надо долго копаться, потом достаточно погуглить ответ что бы проверить, что не врет. Чаще всего не врет :) Реально очень удобно и она всегда вежлива, не приходится продираться через форумных выпендрежников ради простого ответа :)

Tags:
Hubs:
Total votes 24: ↑21 and ↓3+20
Comments60

Articles