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