{"id":20068142,"url":"https://github.com/deedee-ops/k8s-gitops","last_synced_at":"2025-05-05T19:31:04.284Z","repository":{"id":200049859,"uuid":"704182226","full_name":"deedee-ops/k8s-gitops","owner":"deedee-ops","description":"GF-approved geeked homelab k8s cluster deployed with Talos Linux; automated via ArgoCD, Renovate and GitHub Actions 🤖 ","archived":true,"fork":false,"pushed_at":"2024-11-02T15:30:50.000Z","size":4397,"stargazers_count":24,"open_issues_count":2,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-11-13T14:05:27.213Z","etag":null,"topics":["flux","gitops","home-operations","kubernetes","kubesearch","opentofu","renovate","selfhosted","talos"],"latest_commit_sha":null,"homepage":"","language":"YAML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"wtfpl","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/deedee-ops.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":"2023-10-12T17:56:12.000Z","updated_at":"2024-11-02T15:32:30.000Z","dependencies_parsed_at":"2023-10-21T10:37:22.405Z","dependency_job_id":"ce24a99b-3555-433d-bdb6-c6978a2e57de","html_url":"https://github.com/deedee-ops/k8s-gitops","commit_stats":null,"previous_names":["ajgon/home-ops","deedee-ops/home-ops","deedee-ops/k8s-gitops"],"tags_count":11,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deedee-ops%2Fk8s-gitops","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deedee-ops%2Fk8s-gitops/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deedee-ops%2Fk8s-gitops/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deedee-ops%2Fk8s-gitops/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/deedee-ops","download_url":"https://codeload.github.com/deedee-ops/k8s-gitops/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224461762,"owners_count":17315116,"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","gitops","home-operations","kubernetes","kubesearch","opentofu","renovate","selfhosted","talos"],"created_at":"2024-11-13T14:05:31.415Z","updated_at":"2024-11-13T14:05:32.524Z","avatar_url":"https://github.com/deedee-ops.png","language":"YAML","readme":"\u003c!-- markdownlint-disable MD013 MD033 MD041 --\u003e\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"docs/img/k8shappy.png\" alt=\"kubepepe\"\u003e\n  \u003cbr\u003e\n  \u003csup\u003e\u003csup\u003e\n    Art by \u003ca href=\"https://twitter.com/SkeletalGadget\"\u003e@SkeletalGadget\u003c/a\u003e\n  \u003c/sup\u003e\u003c/sup\u003e\n\n### My Home Operations Repository ☸\n\n_... automated via [ArgoCD](https://argoproj.github.io/cd/), [Renovate](https://github.com/renovatebot/renovate) and [GitHub Actions](https://github.com/features/actions)_ 🤖\n\n\u003c/div\u003e\n\u003c!-- markdownlint-enable MD013 MD033 --\u003e\n\n---\n\n## 🚧 NO LONGER MAINTAINED\n\n\u003e [!IMPORTANT]\n\u003e As of October 11th, 2024, I am no longer using Kubernetes in my homelab.\n\u003e\n\u003e Thank you to everyone that has followed, had questions and learnt from my k8s journey.\n\u003e\n\u003e My new homelab repo is built with Nix + NixOS at can be found at: \u003chttps://github.com/deedee-ops/nixlab\u003e\n\u003e\n\u003e This will be publically archived for learning purposes but please note that it will be outdated.\n\n---\n\n## 📖 Overview\n\nThis is a repository for my home infrastructure and Kubernetes cluster.\nI try to adhere to Infrastructure as Code (IaC) and GitOps practices using tools like [OpenTofu](https://opentofu.org/),\n[Kubernetes](https://kubernetes.io), [ArgoCD](https://argoproj.github.io/cd/), [Renovate](https://github.com/renovatebot/renovate)\nand [GitHub Actions](https://github.com/features/actions).\n\n---\n\n## ⛵ Kubernetes\n\n### Installation\n\nThis semi hyper-converged cluster runs [Talos Linux](https://talos.dev), an immutable and ephemeral Linux distribution\nbuilt for [Kubernetes](https://kubernetes.io), deployed on bare-metal [Intel NUCs](https://www.intel.com/content/www/us/en/products/details/nuc.html).\n[Rook](https://rook.io) then provides my workloads with persistent block, and file storage;\nwhile a seperate server provides file storage for my media.\n\n### Core Components\n\n- [actions-runner-controller](https://github.com/actions/actions-runner-controller): Self-hosted Github runners.\n- [cilium](https://cilium.io): Internal Kubernetes networking plugin.\n- [cert-manager](https://cert-manager.io): 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\n  in a cloud DNS provider.\n- [ingress-nginx](https://github.com/kubernetes/ingress-nginx): Ingress controller for Kubernetes using NGINX as\n  a reverse proxy and load balancer.\n- [rook](https://rook.io): Distributed block storage for peristent storage.\n- [spegel](https://github.com/XenitAB/spegel): Stateless cluster local OCI registry mirror.\n- [vault](https://www.vaultproject.io/): Safe and encrypted storage for all Kubernetes secrets.\n- [volsync](https://github.com/backube/volsync): Backup and recovery of persistent volume claims.\n\n### GitOps\n\n[ArgoCD](https://argoproj.github.io/cd/) watches the clusters in my [kubernetes](./kubernetes/) folder\n(see Directories below), and makes the changes to my clusters based on the state of my Git repository.\n\nThe way ArgoCD works for me here is it will recursively search the `kubernetes/clusters/${cluster}` folder,\nand deploys all `application.yaml` manifests. I follow \"app of apps\" pattern, so cluster apps can include other apps,\nwhich can be shared between clusters, and which live under `kubernetes/apps` directory.\n\n[Renovate](https://github.com/renovatebot/renovate) watches my **entire** repository looking for dependency updates.\nWhen they are found a PR is automatically created. When some PRs are merged ArgoCD applies the changes to my cluster.\n\n### Directories\n\nThis Git repository contains the following directories under [Kubernetes](./kubernetes/).\n\n```sh\n📁 kubernetes\n├── 📁 apps           # applications\n└── 📁 clusters       # clusters\n    ├── 📁 deedee     # main cluster\n    └── 📁 meemee     # development cluster, deployed on VMs\n📁 opentofu           # opentofu scripts for external services (cloudflare)\n📁 talos              # talhelper scripts to bootstrap Talos\n```\n\n---\n\n## ☁️ Cloud Dependencies\n\nWhile most of my infrastructure and workloads are self-hosted I do rely upon the cloud for certain key parts of my setup.\nThis saves me from having to worry about two things. (1) Dealing with chicken/egg scenarios and (2) services I critically\nneed whether my cluster is online or not.\n\n| Service                                   | Use                                                            | Cost           |\n|-------------------------------------------|----------------------------------------------------------------|----------------|\n| [addy.io](https://addy.io/)               | Email address protection                                       | $12/yr         |\n| [BorgBase](https://www.borgbase.com/)     | Backups                                                        | $80/yr         |\n| [Cloudflare](https://www.cloudflare.com/) | Domains and tunnel                                             | Free           |\n| [GitHub](https://github.com/)             | Hosting this repository and continuous integration/deployments | Free           |\n| [Migadu](https://migadu.com/)             | Email hosting                                                  | $19/yr         |\n| [Pushover](https://pushover.net/)         | Kubernetes Alerts and application notifications                | $5 (one time)  |\n|                                           |                                                                | Total: ~$10/mo |\n\n---\n\n## 🔧 Hardware\n\n| Device                      | Count | OS Disk Size | Data Disk Size                             | Ram  | Operating System   | Purpose             |\n|-----------------------------|-------|--------------|--------------------------------------------|------|--------------------|---------------------|\n| Dell Wyse 5070              | 3     | 128GB SSD    | -                                          | 8GB  | Talos Linux        | Kubernetes Masters  |\n| Intel NUC12WSHi5            | 3     | 128GB SSD    | 512GB NVMe \u0026 1TB PLP SSD(rook-ceph)        | 64GB | Talos Linux        | Kubernetes Workers  |\n| Synology DS1621+            | 1     | 256GB SSD    | 4x4TB HDD (mirrored)                       | 32GB | Synology DSM       | NFS + Backup Server |\n| Minisforum MS-01            | 1     | 1TB SSD      | -                                          | 48GB | Proxmox PVE        | Router + VMs        |\n| TP-LINK SG3428X-M2          | 1     | -            | -                                          | -    | -                  | 2.5Gb Core Switch   |\n| TP-LINK SG2005P-PD          | 1     | -            | -                                          | -    | -                  | 1Gb PoE Switch      |\n\n---\n\n## ⭐ Stargazers\n\n\u003c!-- markdownlint-disable MD013 MD033 --\u003e\n\u003cdiv align=\"center\"\u003e\n\n\u003ca href=\"https://star-history.com/#deedee-ops/home-ops\u0026Date\"\u003e\n  \u003cpicture\u003e\n    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://api.star-history.com/svg?repos=deedee-ops/home-ops\u0026type=Date\u0026theme=dark\" /\u003e\n    \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"https://api.star-history.com/svg?repos=deedee-ops/home-ops\u0026type=Date\" /\u003e\n    \u003cimg alt=\"Star History Chart\" src=\"https://api.star-history.com/svg?repos=deedee-ops/home-ops\u0026type=Date\" /\u003e\n  \u003c/picture\u003e\n\u003c/a\u003e\n\n\u003c/div\u003e\n\u003c!-- markdownlint-enable MD013 MD033 --\u003e\n\n---\n\n## 🤝 Gratitude and Thanks\n\nThanks to all the people who donate their time to the [Home Operations](https://discord.gg/home-operations) Discord community.\nBe sure to check out [kubesearch.dev](https://kubesearch.dev/) for ideas on how to deploy applications\nor get ideas on what you may deploy.\n\n---\n\n## 📜 Changelog\n\nSee my _awful_ [commit history](https://github.com/deedee-ops/home-ops/commits/master)\n\n---\n\n## 🔏 License\n\nSee [LICENSE](./LICENSE)\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdeedee-ops%2Fk8s-gitops","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdeedee-ops%2Fk8s-gitops","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdeedee-ops%2Fk8s-gitops/lists"}