Как я построил свой Homelab по принципам GitOPS

Привет всем. Довольно давно слежу за проектом samohosting, а вот написать только сейчас решился.

В общем в очередной раз решил снести весь свой лаб и построить заново и сейчас расскажу то как у меня всё устроено.

Немного про железо.
2 железные ноды на старых Xeon-ах:

  • Intel(R) Xeon(R) CPU E5-2670 v3

  • 128 GB RAM

  • несколько SSD дисков, общим объемом 6 TB

  • Intel(R) Xeon(R) CPU E5-2690 v4

  • 128 GB RAM

  • несколько SSD дисков, общим объемом 3 TB

  • 2 x Nvidia RTX 3090 24GB

Раньше я держал еще в свой инстанс gitlab под весь код, но это такая дурка и больше я поддерживать его не хочу, так что решил уехать в обычный внешний официальный gitlab на бесплатный тариф.

Из этих двух железок создан Proxmox кластер, на котором собственно весь workload и живет.

Я старался сразу делать так, чтобы в случае чп или чего либо еще, мне потом не пришлось бы вспоминать что и как у меня настроено, чтобы всю инфраструктуру можно было бы поднять из гита, по этому GitOps first подход:

  1. Terraform - накатываем виртуалки в proxmox. Если кто решит тоже идти в терраформ, сразу рекомендую использовать данного провайдера. Он довольно хорошо и гибко себя показал.

  2. Ansible - для раскатывания k8s с KubeVip для того чтобы при смерти одного из мастеров kubevip сам менял мастера и всё продолжило бы работать. Кластер встает из kubeadm. Пришлось долго повозиться с тем чтобы это всё взлетело.

    Помимо кубера, ansible еще и рулит теми настройками ПО, которые не лезут в кубер, а остаются на виртуалках - postgres, harbor, traefik, ollama и так далее.

  3. ArgoCD - ну тут собственно и так и есть GitOps подход. 95% всего работает в кубе и поднимается с помощью арго.

Входной точкой в мою сеть является есс-но роутер. У меня OpenWRT и он весь траффик с 80 и 443 порта направляет в traefik и тот уже дальше рулит. В кубере Istio Ingress Gateway + некоторое ПО еще и в Service Mesh для хорошего мониторинга из коробки.

Помимо самого Proxmox Terraform еще и рулит рилмами и клиентами в KeyCloak. Почти все внешние сервисы мои закрыты кейлоком, не закрыты лишь те которые публичны.
Если ПО поддерживает OIDC из коробки, то там настраиваю отдельный clientId, если нет, то траффик идет через плагин oidc для Traefik.

Мониторинг - victoria metrics k8s stack. Отличная история чтобы сразу из коробки всё работало.
Логи - Vector + Elastic + Kibana.

Логи и метрики собираются как с кластера кубера, так и с виртуалок.

Чуть скомкано расписал, но вот как есть. Если есть вопросики или что-то еще - буду рад ответить.

3 лайка

Вот это приличный подход, по железу вопрос у меня аналогичная сборка - шумит как самолёт выхода не нахожу либо на балкон ставить либо кулера Noctua или аналоги. В комнате ее держать шумно.

1 лайк

Есть аналог дешевле в виде Arctic. + замена PSU на более тихие вариации. Помогут если уж и не снизить уровень шума, то хотя бы сделать его не таким раздражающим.