K4h (Kubernetes for home)

Сегодня еще раз поговорим о серверах дома. У меня уже было множество заметок и видео роликов на эту тему. Поговорим о способе деплоя приложений.

  • Kubernetes – удобная система, но спроектирована для организаций (минимум 3 ноды, постоянный опрос всего, что ведет к активной работе вентиляторов и тп).
  • Proxmox – упрощает, но не решает проблему (можно легко оперировать с виртуальными машинами – включать/останавливать/перемещать/бекапить, но все еще сложно создавать и это довольно грубая абстракция (те же бекапы включают не только данные, но и большой объем ОС/программ/прочего), нет масштабирования на этом уровне и прочее).
  • специализированные ОС для приложений типа TrueNAS, CasaOS – они весьма плохи с точки зрения сохранности данных, а так же при восстановлении системы на другом железе при сбое.

В связи с этим, нужно проектировать новую систему. Она должна быть похожа на Kubernetes с точки зрения пользователя и ставится на голое железо, но внутри учитывать реалии дома:

  • обычно не нужно больше 1 инстанса приложения
  • минимальное ручные вмешательства, т.к. дома это некому и некогда делать
    • 2 машины для приложений: активная и пассивная
    • автоматическое переключение
    • оповещение пользователя при автоматическом переключении
    • простая установка
    • простое восстановление сломавшейся машины
    • бекапы на еще одну систему
    • использование local доменов для поиска приложений
  • во время простоя должен быть простой: чтобы была тишина и минимальное потребление энергии

У меня уже был один подход: https://github.com/stepin/home-cloud , но он сложноват в понимании и устройстве.

Потихоньку начинаем работу над этим в https://github.com/stepin/k4h . Код приложения на Kotlin Native + Ktor. 4 основных приложения:

  • сайт-генератор iso для ОС с необходимыми настройками
  • k4h-node – серверное приложение, которое управляет нодой K4h
  • k4h – клиентское приложение, которое управляет K4h
  • web ui для K4h (заменяет клиентское приложение для тех, кто не любит консоль)

Вряд ли это будет быстро, но посмотрим. Если кто-то хочет тоже участвовать, то приветствуется (поэтому и анонс при начале разработки, а не в конце).