This repository contains the kubernetes manifests of my homelab, synced using Flux.
Renovate also scans this repo and create PRs whenever it finds a dependency update.
My homelab uses k3s on top of bare-metal hardware running Ubuntu Server 21.04. Hardware specs can be found below.
K8s manifests that are actually synced with the homelab can be found under the cluster
directory. Documentation and
website files are found in the docs
directory
Inside the cluster directory, here's how everything is structured:
- base: Flux's entrypoint. Mainly stuff created by bootstrapping flux + some additional functionalities
- crds: Contains any CRDs that need to exist before anything else gets applied.
- apps: Contains both essential cluster components and common applications. Grouped by namespace. Depends on crds.
Note: Flux always syncs these directories in the above order. (base -> crds -> apps)
- MetalLB: Bare metal implementation of a network load balancer.
- Ingress NGINX: Ingress controller to expose HTTP traffic to pods over DNS.
- cert-manager: Creating SSL certificates via Letsencrypt for externally exposed services.
- OAuth2 Proxy: Handles authentication of externally exposed services.
- ExternalDNS: Managing DNS records using my DNS provider. Needed so that I don't have to create DNS records whenever I create / remove a new service.
- SOPS: Needed for secret management. Sensitive data is encrypted in the git repo and is decrypted by Flux when they're synced with the cluster.
- Longhorn: Distributed block storage.
List of some of the apps that are currently running on the cluster
- Plex: Home media solution. Like a selfhosted version of Netflix.
- qBittorrent: Torrent Client.
- Flood: Modern UI for qBittorrent.
- Syncthing: File synchronization program. Like a selfhosted Dropbox.
- Hyperion: Opensource ambient light software. Used to control smart LEDs I have around the house.
- and more...
My k3s cluster currently has the following hardware
-
1x Old Computer I had laying around with the following specs
Component Details CPU Intel Core i5-2500K (Overclocked to 4.5GHz) Cooler Cooler Master Hyper 212 EVO RAM 8GB DDR3 GPU AMD Radeon HD 6950 PSU Antec 650W -
1x Raspberry Pi 4 (8GB RAM)
-
1x Asus Zenbook UX305UA
Uptime monitoring is done via UptimeRobot.
UptimeRobot essentially ping / send requests to each externally exposed service I have configured and sends out a push notification to my mobile whenever a service goes down.
Quite useful!
Link to the status page is here.
Documentation for this repo is done using Material for MkDocs and is
located in the docs
directory.
The docs are automatically published via a CI job to https://homelab.shadyf.com.
I'd love to give a huge shoutout to the awesome k8s-at-home community. A lot of inspiration came from the repos shared at awesome-home-kubernetes repo.