Skip to content

Software Layer

This layer provides the applications and services that users interact with. It includes deployed applications, along with their definitions and configurations.

layers

Apps & Services

All apps and services deployed in the Software Layer are currently deployed on Kubernetes. This includes:

Kubernetes Infrastructure

Networking

The network plugin used in the cluster is the default Flannel included with K3s. Besides not directly supporting network policies, it just works and I've never had to think about it much.

For load balancer services, K3s does include ServiceLB (formerly Klipper). However, it works by using host ports and does not allow for stable load balancer IPs. It can work well for simple use-cases, but does not fit my needs. I disable it and deploy MetalLB in L2 mode instead.

For Ingress/Gateway API controller, I use Traefik which is also included with K3s.

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.