{"id":13821397,"url":"https://github.com/rwlove/home-ops","last_synced_at":"2026-03-01T03:05:50.263Z","repository":{"id":36954641,"uuid":"346129500","full_name":"rwlove/home-ops","owner":"rwlove","description":"Lovenet Cluster Configuration","archived":false,"fork":false,"pushed_at":"2025-05-15T19:13:33.000Z","size":45053,"stargazers_count":12,"open_issues_count":6,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-15T19:21:46.462Z","etag":null,"topics":["flux","flux2","gitops","home-operations","home-ops","k8s-at-home","kubernetes","renovate","selfhosted"],"latest_commit_sha":null,"homepage":"https://rwlove.github.io/home-ops/","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rwlove.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2021-03-09T20:03:13.000Z","updated_at":"2025-05-15T19:09:15.000Z","dependencies_parsed_at":"2023-10-03T07:31:57.902Z","dependency_job_id":"fd7b038d-f05a-45e3-bd0c-946cdad10cfb","html_url":"https://github.com/rwlove/home-ops","commit_stats":null,"previous_names":["rwlove/home-ops"],"tags_count":16,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rwlove%2Fhome-ops","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rwlove%2Fhome-ops/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rwlove%2Fhome-ops/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rwlove%2Fhome-ops/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rwlove","download_url":"https://codeload.github.com/rwlove/home-ops/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254530650,"owners_count":22086653,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["flux","flux2","gitops","home-operations","home-ops","k8s-at-home","kubernetes","renovate","selfhosted"],"created_at":"2024-08-04T08:01:21.234Z","updated_at":"2026-03-01T03:05:50.248Z","avatar_url":"https://github.com/rwlove.png","language":"Shell","funding_links":[],"categories":["Shell","YAML"],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n\u003cimg src=\"https://github.com/rwlove/home-ops/blob/870b6ed06e5700d2c0766d712f134da86de39b2e/docs/assets/Cosmo.jpg?raw=true\" width=\"144px\" height=\"144px\"/\u003e\n\n## Lovenet Home Operations Repository\n\n_Managed by Flux, Renovate and GitHub Actions_ :robot:\n\n[![Kubernetes](https://img.shields.io/endpoint?url=https%3A%2F%2Fkromgo.thesteamedcrab.com%2Fquery%3Fformat%3Dendpoint%26metric%3Dkubernetes_version\u0026style=for-the-badge\u0026logo=kubernetes\u0026logoColor=white\u0026color=blue\u0026label=%20)](https://github.com/kashalls/kromgo/)\u0026nbsp;\u0026nbsp;\n[![Renovate](https://img.shields.io/github/actions/workflow/status/rwlove/home-ops/renovate.yaml?branch=main\u0026label=\u0026logo=renovatebot\u0026style=for-the-badge\u0026color=blue)](https://github.com/rwlove/home-ops/actions/workflows/renovate.yaml)\u0026nbsp;\u0026nbsp;\n[![Documentation](https://img.shields.io/badge/documentation-blue?\u0026style=for-the-badge)](https://rwlove.github.io/home-ops/)\u0026nbsp;\u0026nbsp;\n\nKubernetes Cluster Information\n\n[![Age-Days](https://img.shields.io/endpoint?url=https%3A%2F%2Fkromgo.thesteamedcrab.com%2Fquery%3Fformat%3Dendpoint%26metric%3Dcluster_age_days\u0026style=flat-square\u0026label=Age)](https://github.com/kashalls/kromgo/)\u0026nbsp;\n[![Node-Count](https://img.shields.io/endpoint?url=https%3A%2F%2Fkromgo.thesteamedcrab.com%2Fquery%3Fformat%3Dendpoint%26metric%3Dcluster_node_count\u0026style=flat-square\u0026label=Nodes)](https://github.com/kashalls/kromgo/)\u0026nbsp;\n[![Pod-Count](https://img.shields.io/endpoint?url=https%3A%2F%2Fkromgo.thesteamedcrab.com%2Fquery%3Fformat%3Dendpoint%26metric%3Dcluster_pod_count\u0026style=flat-square\u0026label=Pods)](https://github.com/kashalls/kromgo/)\u0026nbsp;\n[![CPU-Usage](https://img.shields.io/endpoint?url=https%3A%2F%2Fkromgo.thesteamedcrab.com%2Fquery%3Fformat%3Dendpoint%26metric%3Dcluster_cpu_usage\u0026style=flat-square\u0026label=CPU)](https://github.com/kashalls/kromgo/)\u0026nbsp;\n[![Memory-Usage](https://img.shields.io/endpoint?url=https%3A%2F%2Fkromgo.thesteamedcrab.com%2Fquery%3Fformat%3Dendpoint%26metric%3Dcluster_memory_usage\u0026style=flat-square\u0026label=Memory)](https://github.com/kashalls/kromgo/)\u0026nbsp;\n[![Check Links](https://github.com/rwlove/home-ops/actions/workflows/lychee.yaml/badge.svg)](https://github.com/rwlove/home-ops/actions/workflows/lychee.yaml)\u0026nbsp;\n[![Alerts](https://img.shields.io/endpoint?url=https%3A%2F%2Fkromgo.thesteamedcrab.com%2Fcluster_alert_count\u0026style=flat-square\u0026label=Alerts)](https://github.com/kashalls/kromgo)\u0026nbsp;\u0026nbsp;\n\nInfrastructure Information\n\n[![Power-Usage](https://img.shields.io/endpoint?url=https%3A%2F%2Fkromgo.thesteamedcrab.com%2Fcluster_power_usage\u0026style=flat-square\u0026label=Power)](https://github.com/kashalls/kromgo)\u0026nbsp;\n\n\u003c/div\u003e\n\u003cbr\u003e\u003cbr\u003e\n\n## Overview\nThis is the configuration for my GitOps homelab Kubernetes cluster. This cluster runs home software services for my residence. It is quite complex and there are a lot of interdependencies but the declarative nature of GitOps allows me to manage this mesh of code. The software services fall into a few primary categories:\n* Home Automation ([Home Assistant](https://www.home-assistant.io/), [ESPHome](https://esphome.io/), [Node-Red](https://github.com/node-red/node-red), [EMQX](https://github.com/emqx/emqx), [ZWave JS UI](https://github.com/zwave-js/zwave-js-ui), [Zigbee2MQTT](https://www.zigbee2mqtt.io/))\n* Home Metering and Monitoring (Weather Station, Droplet, Power Monitoring, Sensors)\n* Home Security ([Frigate](https://frigate.video/))\n* IOT Devices ([WLED](https://kno.wled.ge/), [Ratgdo](https://github.com/PaulWieland/ratgdo))\n\n## Core Components\n### Infrastructure\n- [CentOS 9 Stream](https://www.centos.org/centos-stream/): Kubernetes Node Operating System\n- [crun](https://github.com/containers/crun): Container Runtime implemented in C\n- [nVIDIA Container Toolkit](https://github.com/NVIDIA/nvidia-container-toolkit): Container Runtime for nVIDIA GPUs\n\n### Networking\n- [cilium](https://cilium.io): Kubernetes Container Network Interface (CNI)\n- [cert-manager](https://cert-manager.io/docs): Creates SSL certificates for services in my Kubernetes cluster\n- [external-dns](https://github.com/kubernetes-sigs/external-dns): Automatically manages DNS records from my cluster in a cloud DNS provider\n- [Cloudflared](https://github.com/cloudflare/cloudflared): Cloudflare tunnel client\n- [Envoy Gateway](https://gateway.envoyproxy.io/): Networking gateways into cluster\n\n### Storage\n- [Rook-Ceph](https://github.com/rook/rook): Distributed block storage for peristent storage\n- [Minio](https://min.io/): S3 Compatible Storage Interface\n- [Longhorn](https://longhorn.io/): Cloud native distributed block storage for Kubernetes\n- [NFS](https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner): NFS storage\n\n### GitOps\n- [Flux2](https://github.com/fluxcd/flux2): Declarative Cluster GitOps\n- [actions-runner-controller](https://github.com/actions/actions-runner-controller): Self-hosted Github runners\n- [Rennovate](https://github.com/renovatebot/renovate): Automated Cluster Management\n\n---\n\n## :gear:\u0026nbsp; Hardware\n\n| Hostname  | Device            | CPU | RAM    | OS       |Role        | Storage                 | IOT        | VLANs (multus) |\n| --------- | ----------------- | --- | ------ | -------- | ---------- | ----------------------- | ---------- | -------------- |\n| master1   | Intel NUC7PJYH    | 4   | 8  GB  | CentOS 9 | k8s Master |                         |            |                |\n| master2   | VM on beast       | 3   | 8  GB  | CentOS 9 | k8s Master |                         |            |                |\n| master3   | VM on beast       | 3   | 8  GB  | CentOS 9 | k8s Master |                         |            |                |\n| worker1   | ThinkCentre M910x | 8   | 32 GB  | CentOS 9 | k8s Worker | longhorn NVMe, ceph osd | ZWA-2      | iot, sec       |\n| worker2   | ThinkCentre M910x | 8   | 32 GB  | CentOS 9 | k8s Worker | longhorn NVMe, ceph osd |            | iot, sec       |\n| worker3   | ThinkCentre M910x | 8   | 64 GB  | CentOS 9 | k8s Worker | longhorn NVMe, ceph osd | Sonoff     | iot, sec       |\n| worker4   | ThinkCentre M910x | 8   | 32 GB  | CentOS 9 | k8s Worker | longhorn NVMe, ceph osd | Coral USB  | iot, sec       |\n| worker5   | VM on beast       | 10  | 24 GB  | CentOS 9 | k8s Worker | longhorn NVMe, ceph osd |            | iot, sec       |\n| worker6   | VM on beast       | 10  | 24 GB  | CentOS 9 | k8s Worker | longhorn NVMe, ceph osd |            | iot, sec       |\n| worker7   | VM on beast       | 10  | 24 GB  | CentOS 9 | k8s Worker | longhorn NVMe, ceph osd |            | iot, sec       |\n| worker8   | VM on beast       | 10  | 58 GB  | CentOS 9 | k8s Worker | longhorn NVMe, ceph osd | nVIDIA P40 | iot, sec       |\n\n## Network\n\u003cdetails\u003e\n  \u003csummary\u003eClick to see a high level physical network diagram\u003c/summary\u003e\n\n  \u003cimg src=\"https://github.com/rwlove/home-ops/blob/main/docs/assets/physical-network-diagram.jpg\" align=\"center\" width=\"600px\" alt=\"dns\"/\u003e\n\u003c/details\u003e\n\n| Name                                           | CIDR                       | VLAN | Notes |\n|------------------------------------------------|----------------------------| ---- | ----- |\n| Management VLAN                                |                            |      | TBD   |\n| Default                                        | `192.168.0.0/16`           |  0   |       |\n| IOT VLAN                                       | `10.10.20.1/24`            | 20   |       |\n| Guest VLAN                                     | `10.10.30.1/24`            | 30   |       |\n| Security VLAN                                  | `10.10.40.1/24`            | 40   |       |\n| Kubernetes Pod Subnet (Cilium)                 | `10.42.0.0/16`             | N/A  |       |\n| Kubernetes Services Subnet (Cilium)            | `10.43.0.0/16`             | N/A  |       |\n| Kubernetes LB Range (CiliumLoadBalancerIPPool) | `10.45.0.1/24`             | N/A  |       |\n\n## ☁️ Cloud Dependencies\n\n| Service                                         | Use                                                               | Cost             |\n|-------------------------------------------------|-------------------------------------------------------------------|------------------|\n| [1Password](https://1password.com/)             | Secrets with [External Secrets](https://external-secrets.io/)     | ~$65 (1 Year)    |\n| [Cloudflare](https://www.cloudflare.com/)       | Domain                                                            | Free             |\n| [GitHub](https://github.com/)                   | Hosting this repository and continuous integration/deployments    | Free             |\n| [Mailgun](https://www.mailgun.com/)             | Email hosting                                                     | Free (Flex Plan) |\n| [Pushover](https://pushover.net/)               | Kubernetes Alerts and application notifications                   | $10 (One Time)   |\n| [Frigate Plus](https://plus.frigate.video/)     | Model training services for Frigate NVR                           | $50 (1 Year)     |\n|                                                 |                                                                   | Total: ~$9.60/mo\n\n---\n\n### Noteworthy Documentation\n\n[Cluster Rebuild Actions](https://rwlove.github.io/home-ops/cluster_rebuild.html)\u0026nbsp;\u0026nbsp;\n[Initialization and Teardown](https://rwlove.github.io/home-ops/init_teardown.html)\u0026nbsp;\u0026nbsp;\n[Github Webhook](https://rwlove.github.io/home-ops/github_webhook.html)\u0026nbsp;\u0026nbsp;\n[Limits and Requests Philosophy](https://rwlove.github.io/home-ops/limits.html)\u0026nbsp;\u0026nbsp;\n[Debugging](https://rwlove.github.io/home-ops/debugging.html)\u0026nbsp;\u0026nbsp;\n[Immich restore to new CNPG database](https://rwlove.github.io/home-ops/immich_cnpg.html)\u0026nbsp;\u0026nbsp;\n[nVIDIA P40 GPU](https://rwlove.github.io/home-ops/p40.html)\u0026nbsp;\u0026nbsp;\n\n### Home-Ops Search\n\n[@whazor](https://github.com/whazor) created [this website](https://nanne.dev/k8s-at-home-search/) as a creative way to search Helm Releases across GitHub. You may use it as a means to get ideas on how to configure an applications' Helm values.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frwlove%2Fhome-ops","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frwlove%2Fhome-ops","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frwlove%2Fhome-ops/lists"}