Skip to content

lukashankeln/Homelab

Repository files navigation

Homelab

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.

Infrastructure

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.

GitOps with ArgoCD

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 using charts/argocd/templates/applications.yaml.
  • Plain Kubernetes Manifests: Located in kubernetes/, deployed via applicationsets/deployments.yaml using a Git directories generator.
  • Custom Resources: Found in custom-resources/, deployed via applicationsets/custom-resources.yaml using a Git directories generator.
  • ApplicationSets: Managed in applicationsets/, deployed using charts/argocd/templates/applicationsets.yaml.

Cilium - CNI Provider

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.

Applications

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.

Secret Management

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>

Additional Resources

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

Contributors 2

  •  
  •