My personal homelab playground, stored as code.
The goal is to seamlessly bootstrap a Kubernetes cluster with all the bells and whistles
β from infrastructure to apps β
in one smooth, reproducible flow.
Aiming to keep things as lightweight and simple as possible, while still providing flexibility.
-
π One-command cluster provisioning
Provision and configure a full Kubernetes cluster with a single command:mise run up <env> -
π Automatic application discovery
No need to manually define ArgoCD application manifests β applications are automatically detected and deployed. -
π§° One entrypoint to rule them all
No more memorizing complex commands. All essential workflows are defined as Mise tasksβyour single, consistent entrypoint for development.
Runmise tasksto discover everything you need. -
β Catch issues before they catch you
Every commit runs automatic pre-commit checks that generate and lint your Kubernetes manifests against the API spec.
So you catch mistakes early, not in production. -
π οΈ Isolated development setup, zero headaches
Work in an isolated, reproducible environment powered by Mise and Dev Containers
so you always have the right tools, versions, and setup from day one. -
π Manage multiple environments effortlessly
Build on a shared base with environment-specific overlays for clear separation and reproducibility. -
π Secret management made easy
Secure your secrets with SOPS: encrypted, version-controlled, and stored right alongside your config.
No external vaults, no guesswork.
This section describes the essential infrastructure components that form the backbone of the homelab environment.
-
Infrastructure
Terraform, Proxmox VE, TalosOS -
Networking
Cilium CNI, MetalLB, Nginx Ingress Controller -
Storage
Synology iSCSI & NFS -
Monitoring
VictoriaLogs, Vector, VictoriaMetrics Grafana -
Security
Cert-Manager, SOPS, Azure Key Vault, Trivy Planned -
Authentication
Dex Planned
How to deploy the entire cluster from the ground up.
-
Setup devcontainer.
This will setup all the required tools needed for project development.
-
To provision and configure a full-blown cluster simply run:
mise run up <env>
This command will:
-
Use Terraform to provision TalosOS machines on the Proxmox host and initialize the Kubernetes cluster.
-
Deploy ArgoCD using the bootstrap configuration to enable GitOps workflows.
-
Automatically discover and deploy all applications defined in the
apps/directory through ArgoCD ApplicationSets.
-
-
Good to go π
The Kubeconfig and Talosconfig files are automaticalled fetched and stored in .config directory and your shell is configured automatically.
You can now interact with the cluster:
kubectl get pods -A
This repository follows a GitOps approach using ArgoCD for continuous deployment. The structure is organized as follows:
-
.lint/: Linting configurations -
.mise/: Mise configurationstasks: Reusable scripts for cluster management, provisioning, and automation.
-
apps/: Contains all applications deployed to the cluster- Organized in
<env>/<project>/<namespace>/<app>structure - Each app contains its kustomization.yaml and configurations
- Namespaces are created automatically during deployment
- Organized in
-
bootstrap/: Contains initial cluster setup and ArgoCD configurationprojects/: Contains ArgoCD project definitionsresources/: Essential cluster-wide resourcesmisc/: Miscellaneous bootstrap configurations
-
provision/: Contains Terraform infrastructure provisioning scripts and configurationscore/: Core Terraform modules and scripts for cluster provisioning<env>/: Environment-specific Terraform variable files (e.g.,dev/,prd/)
This section outlines a list of planned improvements and upcoming features, presented in no particular order.
-
Investigate Cilium load balancer IPAM as al alternative for Metallb.
-
Investigate Cillum Gateway API as an alternative for Nginx ingress controller.
-
Implement Dex IdP.
-
Refactor ArgoCD config management plugin script.
-
Setup alerting rules and channels.
-
Deploy Trivy Operator.
-
Checkout Sidero Omni.
-
Implement KRR