{"id":23454886,"url":"https://github.com/chrede88/home-ops","last_synced_at":"2025-04-14T00:15:15.243Z","repository":{"id":223323031,"uuid":"759498528","full_name":"chrede88/home-ops","owner":"chrede88","description":"Repository for my Talos Linux/Kubernetes cluster","archived":false,"fork":false,"pushed_at":"2025-04-12T18:14:59.000Z","size":2498,"stargazers_count":14,"open_issues_count":1,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-14T00:14:59.344Z","etag":null,"topics":["bare-metal","fluxcd","gitops","kubernetes","kubesearch","renovate","talos"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/chrede88.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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}},"created_at":"2024-02-18T18:51:28.000Z","updated_at":"2025-04-12T18:15:01.000Z","dependencies_parsed_at":"2024-03-01T17:28:03.059Z","dependency_job_id":"3173fd98-054b-4449-b80d-bb60eda22da3","html_url":"https://github.com/chrede88/home-ops","commit_stats":null,"previous_names":["chrede88/home-ops"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chrede88%2Fhome-ops","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chrede88%2Fhome-ops/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chrede88%2Fhome-ops/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chrede88%2Fhome-ops/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/chrede88","download_url":"https://codeload.github.com/chrede88/home-ops/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248799953,"owners_count":21163404,"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":["bare-metal","fluxcd","gitops","kubernetes","kubesearch","renovate","talos"],"created_at":"2024-12-24T03:15:58.347Z","updated_at":"2025-04-14T00:15:15.229Z","avatar_url":"https://github.com/chrede88.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"./docs/assets/talos.svg\" alt=\"Talos Linux logo\" width=\"150\" height=\"150\"\u003e\n  \u003cimg src=\"./docs/assets/k8s.png\" alt=\"Kubernetes logo\" width=\"150\" height=\"150\"\u003e\n\u003c/div\u003e\n\n\u003cdiv align=center\u003e\n\n### My Home-ops Repository \u003cimg src=\"https://fonts.gstatic.com/s/e/notoemoji/latest/26a1/512.gif\" alt=\"⚡\" width=\"16\" height=\"16\"\u003e\n\n_... powered by Talos Linux and Kubernetes_\n\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"https://img.shields.io/endpoint?url=https%3A%2F%2Fkromgo.cjsolsen.com%2Ftalos_version\u0026style=for-the-badge\u0026logo=talos\u0026logoColor=fff\u0026label=Talos\u0026labelColor=302d41\u0026color=cba6f7\" alt=\"Talos version\"\u003e\n  \u003cimg src=\"https://img.shields.io/endpoint?url=https%3A%2F%2Fkromgo.cjsolsen.com%2Fkubernetes_version\u0026style=for-the-badge\u0026logo=kubernetes\u0026logoColor=fff\u0026label=Kubernetes\u0026labelColor=302d41\u0026color=cba6f7\" alt=\"Kubernetes version\"\u003e\n  \u003cimg src=\"https://img.shields.io/endpoint?url=https%3A%2F%2Fkromgo.cjsolsen.com%2Fflux_version\u0026style=for-the-badge\u0026logo=flux\u0026logoColor=fff\u0026label=Fluxcd\u0026labelColor=302d41\u0026color=cba6f7\" alt=\"Fluxcd version\"\u003e\n  \u003cimg src=\"https://img.shields.io/github/issues-pr/chrede88/home-ops?logo=github\u0026color=f2cdcd\u0026logoColor=fff\u0026style=for-the-badge\u0026labelColor=302d41\" alt=\"Open Pull Requests\"\u003e\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"https://img.shields.io/endpoint?url=https%3A%2F%2Fkromgo.cjsolsen.com%2Fcluster_age_days\u0026style=for-the-badge\u0026label=Age\u0026labelColor=302d41\" alt=\"Cluster Age\"\u003e\n  \u003cimg src=\"https://img.shields.io/endpoint?url=https%3A%2F%2Fkromgo.cjsolsen.com%2Fcluster_uptime_days\u0026style=for-the-badge\u0026label=Up\u0026labelColor=302d41\" alt=\"Cluster Up Time\"\u003e\n  \u003cimg src=\"https://img.shields.io/endpoint?url=https%3A%2F%2Fkromgo.cjsolsen.com%2Fcluster_node_count\u0026style=for-the-badge\u0026label=Nodes\u0026labelColor=302d41\" alt=\"Cluster Nodes\"\u003e\n  \u003cimg src=\"https://img.shields.io/endpoint?url=https%3A%2F%2Fkromgo.cjsolsen.com%2Fcluster_pod_count\u0026style=for-the-badge\u0026label=Pods\u0026labelColor=302d41\" alt=\"Cluster Pods\"\u003e\n  \u003cimg src=\"https://img.shields.io/endpoint?url=https%3A%2F%2Fkromgo.cjsolsen.com%2Fcluster_cpu_usage\u0026style=for-the-badge\u0026label=Cpu\u0026labelColor=302d41\" alt=\"Cluster CPU\"\u003e\n  \u003cimg src=\"https://img.shields.io/endpoint?url=https%3A%2F%2Fkromgo.cjsolsen.com%2Fcluster_memory_usage\u0026style=for-the-badge\u0026label=Memory\u0026labelColor=302d41\" alt=\"Cluster Memory\"\u003e\n  \u003cimg src=\"https://img.shields.io/endpoint?url=https%3A%2F%2Fkromgo.cjsolsen.com%2Fceph_health_status\u0026style=for-the-badge\u0026logo=ceph\u0026label=Ceph\u0026labelColor=302d41\" alt=\"Ceph Cluster Health\"\u003e\n\u003c/div\u003e\n\n---\n\n## \u003cimg src=\"https://fonts.gstatic.com/s/e/notoemoji/latest/1f680/512.gif\" alt=\"🚀\" width=\"20\" height=\"20\"\u003e Introduction\n\nThis repository holds all information about my homelab and kubernetes cluster. I'm doing my best to adhere to the principles of infrastructure as code (IaC) and GitOps.\n\n---\n\n## \u003cimg src=\"https://fonts.gstatic.com/s/e/notoemoji/latest/1f340/512.gif\" alt=\"🍀\" width=\"20\" height=\"20\"\u003e Kubernetes\n\nMy Kubernetes cluster is deployed with [Talos Linux](https://www.talos.dev), a Linux distribution build spefically for running Kubernetes. I run a three bare-metal node cluster on Intel 12th gen NUC's and using [Rook](https://github.com/rock/rock) for cluster persistence block, object, and file storage.\n\n### GitOps\n\n[Flux](https://github.com/fluxcd/flux2) watches the cluster resources in the [kubernetes](./cluster/kubernetes/) folder (see [Directories](#directories)) and makes the changes to the cluster based on the state of the Git repository.\n\nFlux is pointed at the two top level Flux kustomization ([ks.yaml](./cluster/kubernetes/flux/main/ks.yaml)) which points at the [kubernetes/apps](./cluster/kubernetes/apps) folder and some other general common components. Flux will recursively search the `kubernetes/apps` folder until it finds the most top level `kustomization.yaml` per directory and then apply all the resources listed in it. That aforementioned `kustomization.yaml` will generally only define a few resource and one or many Flux kustomizations. Under the control of those Flux kustomizations there will be the actual resources related to each application.\n\n[Renovate](https://github.com/renovatebot/renovate) watches my **entire** repository looking for dependency updates, when they are found a PR is automatically created. When PRs are merged Flux applies the changes to my cluster.\n\n### Directories\n\nThe layout of the repository is as follows:\n\n```sh\n📁 .github              # Github related files\n📁 docs                 # My running documentation\n📁 network              # My internal network setup\n📁 cluster\n├── 📁 kubernetes       # Kubernetes cluster definitions\n│   ├── 📁 apps         # application manifests\n│   └── 📁 flux         # flux system configuration\n└── 📁 talos            # Talos configuration stuff\n```\n\n### Docs\n\nI keep running [docs](./docs/README.md) where I try to document my journey. Hopefully others will find them helpful.\n\n---\n\n## \u003cimg src=\"https://fonts.gstatic.com/s/e/notoemoji/latest/2699_fe0f/512.gif\" alt=\"⚙\" width=\"20\" height=\"20\"\u003e Hardware\n\n| Device                | Num | OS Disk Size   | Data Disk Size | Ram  | OS                  | Function       |\n| --------------------- | --- | -------------- | -------------- | ---- | ------------------- | -------------- |\n| Intel NUC 12th i5     | 3   | 500GB SATA SSD | 2TB NVMe SSD   | 64GB | Talos               | Kubernetes     |\n| Rasberry Pi 4         | 1   | 64GB SD card   | -              | 4GB  | Debian GNU/Linux 12 |  |\n| Unifi Gateway Fiber     | 1   | -              | -              | -    | -                   | Router         |\n| Unifi Cloudkey Gen 2+ | 1   | -              | -              | -    | -                   | Unifi OS       |\n| Unifi Switch Flex 2.5G 8 PoE    | 1   | -              | -              | -    | -                   | PoE 2.5Gb Switch |\n| Unifi U6+ AP          | 1   | -              | -              | -    | -                   | Wifi           |\n\n---\n\n## \u003cimg src=\"https://fonts.gstatic.com/s/e/notoemoji/latest/1f64f/512.gif\" alt=\"🙏\" width=\"20\" height=\"20\"\u003e Thanks\n\nThanks to all the people who donate their time to the [Home Operations](https://discord.gg/home-operations) Discord community. Be sure to check out [kubesearch.dev](https://kubesearch.dev/) for ideas on how to deploy applications or get ideas on what you could deploy.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchrede88%2Fhome-ops","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fchrede88%2Fhome-ops","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchrede88%2Fhome-ops/lists"}