Skip to content

ShadyF/k8s-homelab

Repository files navigation


My K8s Homelab 💻

Synced Using Flux Updated using Renovate

k3s Website GitHub last commit Lines of code

📖 Overview

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.

💾 Software

My homelab uses k3s on top of bare-metal hardware running Ubuntu Server 21.04. Hardware specs can be found below.

Folder Structure

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)

Essential Cluster Components

  • 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.

Apps

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...

💻 Infrastructure

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

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.

Status Page

📖 Documentation

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.

✋ Acknowledgments

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.