k3s, minikube и аналоги поинтересней для 1 сервера, но если у вас 2-3 ноды, то не все нормально кластеризируются
Я пользую не только кубер, иногда чистый линукс, иногда виртуалки
Кубер stateless работа с хранилищами не всегда оптимальна, быстра, и есть. Если у вас облако с безконечным выделением дисков, то один вопрос, если мини ПК, то вместо полноценного PVC имеем какие-то папки на сервере
Довольно таки сложная конфигурация сервисов, если вы их сами пишете управляете, то это удобно, но для большинства самохостинг проектов есть docker run и все, в последнее время часто docker compose предлагается
У меня несколько нод проксмокса, но я сам распределяю сервисы по назначению, нагрузке на хранилище, наличию всяких аппаратных компонентов типа корала, размазывать условный vaultwarden с БД на одной ноде и сервером на другой смысла не вижу, мне проще хранить все в одном компоненте и при желании переносить на другие ноды, заморачиваться с этим в кубере нет желания
Самое простое бекапирование сервисов реализуется в Proxmox простым бэкапом контейнера
Мой подход к домашнему самохостингу описал в теме про Pulse, но если кратко, то
Кластер Proxmox
LXC контейнер с Alpine Linux и docker (смотрю в сторону podman) для каждого сервиса
В LXC контейнере
3.1. docker-compose с сервисом или сервисами если они связаны, например, frigate, doubletake, compreface
3.2. вспомогательные агенты типа docke, portainer-agent, komodo-periphery
3.3. proxmox-backup-client в docker-compose с сервисом для бэкапирования файлов на сервер PBS
LXC контейнеры бэкапятся на PBS целиком
Для критически важных сервисов Proxmox HA
Что я пробовал еще
SSH и руки, но понятно, что не очень круто, зато работает
CI/CD в целом, ок для деплоя, для мониторинга то-то надо искать
Dockge - круто, что умеет docker run to docker-compose, но не очень круто работает с агентами, хорошо работает с существующими стеками
Portainer - швейцарский нож, но у меня не удалось нормально работать с существующими стеками, надо создавать из самого портейнера
Arcane - новый и перспективный проект, работает с существующими стеками, но агенты у него работают через одно место и очень плохо
Komodo - пока понравился, умеет очень многое и даже больше, с существующими стеками не очень хорошо работает, но их можно типа импортировать
Semaphore - это ansible UI, пока не осилил, но аналог 2 пункта с деплоем сервисов
Что умеет komodo
Управлять стеками docker-compose, причем, как это сделано в dockge когда создается папка с именем стека и туда складывается compose.yaml файл, портейнер мне не понравился тем, что у него свои правила
Работать с несколькими серверами, причем, это самая крутая тулза из всех
Собирать образы
Деплоить стеки
Всякие автоматизации
Мотиторинг, консоль, уведомления
Пока только первый день щупаю, ниже буду описывать сценарии использования
Ну тут все как в docke, portainer особого смысла не вижу останавливаться подробно
Но…
в отличие от аналогов, тут конфиг сервиса хранится на севере с komodo, и потом деплоится на рабочие ноды, т.е. при потере связи с нодой вы не теряете ее стеки и можете передеплоить сервис на другую ноду
Тут надо указать сервер с репой, аккаунт, название репы и ветку
Поскольку, у нас будет один репозиторий и в нем для каждого сервиса своя ветка, то указываем нужную ветку
Тут важно учесть, что ветка в гите должна называться аналогично названию стека в komodo т.к. ссылка для webhook генерируется на основе ветки и CD тригеррит именно тот стек, который у нас сейчас обновился
9. Настраиваем секреты и переменны и коммитим код
Но разделение на стеки идет не на уровне веток, а одна ветка с каталогами стеков
Далее, через Komodo идет скачивание GIT репозитория на сервер
Стеки создаются на на основе git репы, а на основе файлов на сервере
Через Renovate и вебхуки идет нотификация Komodo
Komodo обновляет стеки при изменении
В конце статьи еще описывается механизм обновления в случае выхода новых версий docker образов или типа того, но надо разбираться, сам komodo умеет обновлять стеки
Кстати, по поводу 6 пункта, из всех опробованных мною проектов только komodo имеет в бесплатной версии функционал отслеживания обновлений образов, watchtower подобные проекты остаются только.
Суть в том, что можно настроить сервер или стек в качестве шаблона, и при добавлении нового просто выбрать нужный из списка и поля будут уже заполнены значениями из шаблона.
Я шаблон сервера использую при регистрации нового сервера ansible
Шаблоны стеков, например, для моего кластера трафика
Ну и мой основной шаблон стека git-template где заполнены все поля, при создании нового стека достаточно заполнить
Название стека
Север для разворачивания
Название ветки в git репозитории
Все остальные данные заполняются автоматом, даже CI/CD описанный мною выше работает автоматически