{"id":21484941,"url":"https://github.com/iferdel/homelab","last_synced_at":"2025-03-17T09:45:03.352Z","repository":{"id":265742514,"uuid":"892884326","full_name":"iferdel/homelab","owner":"iferdel","description":"GitOps Configuration and documentation of my Kubernetes homelab powered by Talos and FluxCD.","archived":false,"fork":false,"pushed_at":"2025-03-15T00:12:25.000Z","size":465,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-15T01:21:55.214Z","etag":null,"topics":["fluxcd","gitops","kubernetes"],"latest_commit_sha":null,"homepage":"","language":null,"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/iferdel.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}},"created_at":"2024-11-23T01:08:10.000Z","updated_at":"2025-03-14T12:48:15.000Z","dependencies_parsed_at":"2024-11-30T19:30:16.245Z","dependency_job_id":"aec7f700-2dd7-4cfb-918d-496554176082","html_url":"https://github.com/iferdel/homelab","commit_stats":null,"previous_names":["iferdel/homelab"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iferdel%2Fhomelab","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iferdel%2Fhomelab/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iferdel%2Fhomelab/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iferdel%2Fhomelab/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/iferdel","download_url":"https://codeload.github.com/iferdel/homelab/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244013280,"owners_count":20383707,"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":["fluxcd","gitops","kubernetes"],"created_at":"2024-11-23T13:13:11.041Z","updated_at":"2025-03-17T09:45:03.345Z","avatar_url":"https://github.com/iferdel.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Homelab\n\nThis repo contains all of the configuration and documentation of my homelab.\n\nThe whole idea of having a homelab is to have a place where I can try out and learn new things using Kubernetes and GitOps as backbone. On the other hand, by self-hosting some applications, it makes me feel responsible for the entire process of deploying and maintaining an application from A to Z. It forces me to think about backup strategies, security, scalability and the ease of deployment and maintenance.\n\n(Diagram of GitOps powered homelab)\n\nhighly recommend https://kube.fm/episodes\n\n## Principles\n\nI have a few principles that guide my choices for my homelab.\n\n* I try to keep in the Azure Kubernetes Service (AKS) ecosystem. This is why I chose Flux for GitOps, for example\n* Everything is deployed through GitOps\n\n## Cluster Provisioning\n\nI use [Talos Linux](https://www.talos.dev/) to set up my machines (kudos to ventoy tooling, since it makes easier for the installation). Talos is so lightweight and minimal, and it provides production grade security right out of the box. It also forces me to use all my servers as Kubernetes nodes only, so I need to figure out ways to run all my desired workloads and services on Kubernetes, such as one may expect in a cloud based scenario.\n\n## Hardware\n\nI'm currently running a staging cluster, with plans to scale up by adding new hardware for a production cluster as well. Maintaining two clusters ensures I stay in the habit of separating environments.\n\nI’ve developed an interest in mini PCs because of their ergonomic design and relatively low cost when purchased refurbished from a reseller. These mini PCs serve as worker nodes, as they lack built-in batteries. For control-plane nodes, however, I use a laptop with a healthy battery to prevent shutdowns caused by power outages or other issues. That said, I’m not opposed to turning to virtual machines to scale up further if necessary.\n\n### Staging\n\nThis is the place where I can destroy things freely. Databases in staging don't contain data. In staging I allow workload pods to be scheduled on the control plane.\n\n* controlplane-1    SAMSUNGN P470R5E-X02CL i5-3230M/8GB/1TB HDD (Functional Battery)\n* worker-1          HP PRODESK MINI 600 G2, i3-6100T/8GB/240GB SSD (Reacconditioned)\n* worker-2          SONY VAIO PCG 61311u i3/4GB/120GB SSD (Functional Battery)\n\nI also use a IdeaPad 3 15ARH05 with 16GB of memory running Windows with WSL2. This is my personal machine.\n\n### Production\n\nIn development...\n\n## Databases\n\nplenty of info about Storage in Talos site https://www.talos.dev/v1.9/kubernetes-guides/configuration/storage/\nSame as this dude here, when I tried openebs with [mayastor](https://github.com/openebs/Mayastor) in my local cluster there was a huge overhead on my cluster. \nmayastor uses NVMEoF\nRook/Ceph is out of competition since its huge.\nAvoid NFS protocol (network file system).\nDeciding to go into longhorn and thus still relying on iscsi (openebs also uses iSCSI)\nhttps://khenry.substack.com/p/longhorn-on-talos\nhad some issues regarding to same as this fellow https://www.reddit.com/r/kubernetes/comments/1hwietr/problem_with_adding_extensions_to_talos/?share_id=ZaOf9kGRPx6laONfEFb1J\u0026utm_medium=ios_app\u0026utm_name=iossmf\u0026utm_source=share\u0026utm_term=3\n\nthis implementation uses argoCD but the overall method is the same https://calebcoffie.com/part-3-adding-longhorn-for-persistent-storage-on-our-talos-powered-kubernetes-cluster/\n\nchecked health of the installation based on comparing outputs from my cluster and the docs of longhorn https://longhorn.io/docs/1.8.0/deploy/install/install-with-flux/\nlonghorn has a pretty ui https://longhorn.io/docs/1.8.0/deploy/accessing-the-ui/\n\nas a side note... [longhorn makes more sense in bare metal setups](https://www.reddit.com/r/kubernetes/comments/10war0o/can_someone_explain_me_the_true_benefits_of/)\ndefault storage class as longhorn\nlonghorn creates as default in every pvc a lost+found folder, which is sometimes unwanted. For these cases thre is this issue where fstype may be modified to 'xfs' to avoid this behaviour https://github.com/longhorn/longhorn/issues/1580\nhttps://github.com/longhorn/longhorn/issues/913\n\n\nthis longhorn is used to create pvc for dynamic provision of volumes for services such as rabbitmq, grafana, loki/alloy and custom logs.\n\n## Secrets\n\n* Secrets are synced to Azure Key Vault\n* SAS tokens for Storage Account Access\n\n## Core \n- VM\n- VNets\n- Secrets\n- Storage\n\n## Repo Structure\n\nSet up the repo according to this guide:\n\nhttps://fluxcd.io/flux/guides/repository-structure/\n\nAnd following the following examples:\n\nhttps://github.com/fluxcd/flux2-kustomize-helm-example\nhttps://github.com/yoandl/fluxv2-infrastructure-stack-example\n\nThe namespaces folder in the root of the repository clarifies the active processes managed by the clusters.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fiferdel%2Fhomelab","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fiferdel%2Fhomelab","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fiferdel%2Fhomelab/lists"}