Software Layer
This layer provides the applications and services that users interact with. It includes deployed applications, along with their definitions and configurations.
Apps & Services
All apps and services deployed in the Software Layer are currently deployed on Kubernetes. This includes:
- GitHub Actions Runner Controller (ARC)
- Home Assistant
- Homer
- Kube Prometheus Stack
- Mealie
- Pi-hole
- Plex Media Server
- Tautulli
- Unifi Network
- Uptime Kuma
Kubernetes Infrastructure
Networking
The network plugin used in the cluster is Cilium.
While Cilium does offer an LB IPAM feature to support loadBalancer
services, it doesn't currently support the externalTrafficPolicy: Local
option in L2 Aware LB mode (see limitations). For that reason, I use MetalLB in L2 mode instead.
I do, however, use the built-in Ingress features within Cilium.
Persistent Storage
Longhorn provides the bulk of the persistent storage used by containers. It provides replicated highly-available block storage and NFS volumes for my containers. It also automatically backs up volumes to my external Synology NAS.
In addition to Longhorn, a few NFS volumes are also mapped directly to my external Synology NAS. These volumes are for media and user files that require large capacity, or aren't directly related to the application's persistence.
Tooling
Flux
Flux is used to implement GitOps in my cluster. Flux reconciles the Kubernetes resources defined as manifests and Helm charts within this repository with the actual resources deployed in the cluster. Using Flux Image Automation, it also automatically updates manifests with new image versions, and triggers pull requests (with the help of a GitHub Actions workflow) to include them in the repository.