Оркестрация приложений на маленьком домашнем сервере. Что можете посоветовать?

Описание ситуации:
Есть маленький домашний сервер. (1 физическая машина) На нем хочется иметь несколько маленьких-маленьких приложений (node.js, базы данных, frontend приложения etc.)

При этом некоторые из приложений должны коммуницировать между собой, иметь общие ресурсы.

Например, приложение А умеет загружать пользовательские файлы на диск и хранить их где-то. Приложение В умеет читать некоторые их загруженных файлов и делать какую-то чертовщину с ними (например перекодировать их ffmpeg'ом), приложение С умеет вызывать приложение D через rest-api и делать что-то там.

Плюс ко всему этому все эти приложения (как серверные, так и фронтовую часть) нужно как-то деплоить на сервер.

Вопрос: что можно использовать, чтобы все это как-то организовать?

Можно ничего не использовать совсем и все делать в лоб:
- приложения деплоятся через scp/rsync/git clone etc.
- при запуске приложения A ему передается через переменную окружения путь в файловой системе до общей папки
- то же самое и для приложения Б
- С запускается с PORT=4444
- D с чем-то вроде API_URL=localhost:4444

Но это все разрастается в не очень удобный бардак.

Сейчас все это частично решается через docker-compose (конфигурируются порты и пути в ФС). Но это решение не покрывает все вопросы (все еще не ясно как это все деплоить). Плюс docker-compose имеет непонятный статус.

С k8s толком опыта нет, но кажется оно может решить часть проблем. С другой стороны кажется k8s решает обратную проблему (1 приложение на много машин, а не много приложений на одной машине). Вообщем не могу понять, насколько это приемлемое решение. Можете подсказать насколько разумно тут это использовать?

Плюс k8s это про контейнеры, а мне кажется контейнеры-то и не нужны особо.

Как могло бы выглядить идеальное решение:
- единое место для конфигурации ресурсов (порты, файловая система, load balancers и т.д.)
- возможность деплоить приложения (как фронт, так и бэк)
- минимальный мониторинг всего этого
- open-source решение
- типизация на стороне приложений (чтобы можно было на тайпскрипте написать import {listenPort} from './config') и тайпскрипт бы меня понял
- если бы для всего этого был бы удобный UI (напр. web UI) тоже было бы здорово иметь

Разумно ли пытаться тут применять k8s? Или это натягивание совы на глобус?
Если разумно, то что можете посоветовать использовать для собственно поднятия k8s? minikube? microk8s?
  • Вопрос задан
  • 711 просмотров
Решения вопроса 3
У меня в похожей ситуации сложился такой набор инструментов:
- контейнеризация - докер
- конфигурация и запуск контейнеров - docker compose
- web IU к докеру - Portainer
- деплой - Gitlab CI
Ответ написан
Комментировать
Советую поступить как нравится.

Оркестрация кубом в пределах одного физического сервера скорее прихоть, чем необходимость. Можно поиграться разве что для знакомства с системой. И k8s скорее всего точно мимо - впустую потраченные ресурсы одного сервера. minikube, k3s и подобные будут лучшим выбором.
Для поставки в куб все равно придется организовать сборку и публикацию контейнеров. Для доставки и helm хватит.

Что бы посоветовал - baremetal с оркестрация через Ansible.
Как вариант - гипервизор: виртуалки или lxс; возможно Proxmox. Просто на случай необходимости в изоляции или разных конфигураций ОС.
Ответ написан
@bagger
программист
Судя по вашим потребностям, подойдет k3s - Kubernetes для слабеньких серверов.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы