GitOps / Infrastructure as Code для homelab

Всем привет!

Увидел у зарубежных homelab-блогеров практику использования GitOps подхода для управления сервисами на домашних серверах. Суть в том, что все конфигурации (docker-compose, env-файлы, скрипты) хранятся в репозитории на GitHub (или другом Git-хостинге). При любом изменении в этом репозитории сервер автоматически подхватывает изменения, обновляет и разворачивает сервисы. Это выглядит очень удобно по двум причинам:

  1. Быстрое восстановление/миграция: Развернуть все сервисы с нуля на новом железе становится вопросом клонирования репозитория и запуска автоматизации.
  2. Централизация и контроль версий: Все настройки всегда под рукой, в одном месте, с историей изменений.

Видел много решений, ориентированных на Kubernetes (FluxCD, ArgoCD и т.д.), но погружаться в k8s пока не хочется. Мой сервер работает на TrueNAS Scale, где для контейнеризации используется Docker (через систему приложений, но под капотом - Docker).

Вопрос к сообществу:
Посоветуйте, пожалуйста, какие инструменты или решения для реализации GitOps подхода именно для среды Docker (не Kubernetes) вы используете или считаете подходящими для homelab? Особенно интересен опыт работы с TrueNAS Scale, если он есть.

Заранее спасибо за советы!

1 лайк

GitOps по факту это ничто иное как Infrastructure as a Code обычный, просто переименованный)
Проблема в том что я щас погуглил и я не нашел terraform provider’а для truenas который живой.

Поэтому у меня большие сомнение что получится сделать нормальный IaC.

Был бы у тебя обычный Docker на хосте - это было бы оч легко сделать. К нему провайдеры есть.

А вообще раз хочется гитопс - время в кубер)

2 лайка

Немного формальностей

Для начала определиться с СI/CD и GitOps результат у них одинаковый, а подход разный - CD -push, GitOps - pull

Что касается docker и разворачивания, то я надавно перешел на Komodo и даже тут создал тему соответствующую, рекомендую к ознакомлению.

В целом,

Komodo с успехом реализует, но он как и dockge, как и arcane да и portainer использует в качестве основы стеки, это docker-compose файлы, описывающие приложения, но помимо стеков имеет еще возможности по сборке, деплою и работе с git.

Собственно, описанная Вами задача была реализована в сценарии 2 и 3 в выше указанной теме, но редеплой можно либо руками запустить из веб интерфейса или через git actions триггерить событие деплоя

Что же касается TrueNAS Scale, то это оооочень сырая штука и очень глючная, они долгое время использовали k3s под катом, но потом ушли в строну docker-compose или чего-то похожего (ковырялся в конфигах приложений и там такой :shit: , что лучше не смотреть + легаси на легаси и костылями обмазано.

Вообще TrueNas это операционка поверх ZFS и лучше внутрь не лезть, максимум, что можно сделать это через API попытаться работать с этой штукой.

Если хост система на truenas, и хочется IaC, то лучше развернуть LXC или KVM (правда, они тоже недавно обновились и сейчас в бете), поставить туда komodo periphery и разворачивать уже внутри приложения. Но при этом потеряете в гибкости работы с датасетами, которые для приложений truenasа создаются автоматом

Штатные приложения имеют собственные манифесты, режим обновлениям, миграции форматов манифестов и работу с датасетами, я пробовал создавать кастомные приложения со своими образами, работает, но оооочень криво. + приложения версионируются опять же на уровне ZFS (я писал выше, что это операционка на ZFS, а не дебиан)

2 лайка

Большое спасибо! Как раз на днях видел что вы про komodo писали. Тогда думаю пока остановлюсь на варианте lxc контейнера с komodo от Helper-Scripts

1 лайк