This repository contains the applications and configurations for my private home server infrastructure.
Important
This repository is developed in my privately hosted Gitea instance. The version on GitHub is a push mirror. Any changes made there will be overwritten during the next sync.
The infrastructure runs on a single-node k3s cluster hosted on an Intel N100-powered mini-PC with 8GB of RAM. Plans are underway to add a second node powered by a Raspberry Pi 4 to the cluster.
ArgoCD is installed via the Helm chart located in charts/argocd
. Updates to ArgoCD are automated using Gitea Actions. The following components are managed via ArgoCD:
- Applications: Found in
applications/
, deployed usingcharts/argocd/templates/applications.yaml
. - Plain Kubernetes Manifests: Located in
kubernetes/
, deployed viaapplicationsets/deployments.yaml
using a Git directories generator. - Custom Resources: Found in
custom-resources/
, deployed viaapplicationsets/custom-resources.yaml
using a Git directories generator. - ApplicationSets: Managed in
applicationsets/
, deployed usingcharts/argocd/templates/applicationsets.yaml
.
Cilium is used as the CNI provider and is installed via the Helm chart in charts/cilium
. Updates are currently manual to better understand Cilium's update behavior.
A variety of applications are deployed in the cluster, including:
- Argo Workflows: Workflow engine for orchestrating jobs.
- Aspire Dashboard: Lightweight OpenTelemetry dashboard.
- Cert-Manager: Automatic certificate generation for ingresses.
- Dashy: Centralized dashboard for managing applications.
- Docker UI: Docker registry with a management UI.
- Gitea: Self-hosted Git server with CI/CD capabilities.
- Kanboard: Project management software.
- MetalLB: Load balancer for bare-metal Kubernetes clusters.
- nginx: Ingress controller.
- Skooner: Kubernetes dashboard for cluster management.
- PostgreSQL: Open-source relational database.
Secrets are managed using the External Secrets Operator. To enable it, create a Vault token as a Kubernetes secret:
kubectl create secret generic vault-token -n external-secrets-operator --from-literal=token=<token>
- Network Policies: Defined in
custom-resources/cilium-clusterwide-network-policies/
. - Persistent Volumes: Configured in
custom-resources/persistent-volumes/
. - RBAC Configurations: Found in
custom-resources/rbac/
.
This repository is continuously evolving to meet the needs of the home server infrastructure.