Skip to content

Infra Lab

This project is designed as a hands-on learning experience to set up an on-premise Kubernetes cluster using KVM. It covers the deployment of core Kubernetes services and demonstrates how to automate infrastructure setup and application delivery using Infrastructure as Code (IaC) and GitOps principles, leveraging tools like Terraform and ArgoCD.

Every step of the process—from planning and designing the cluster architecture to manually configuring each component—has been carefully documented. These guides are available in the documentation section, making it easy for anyone to replicate and build their own home Kubernetes cluster.

Directory Hierarchy

.
├── .gitattributes
├── .git-crypt
│   ├── .gitattributes
│   └── keys
├── .gitignore
├── LICENSE
├── jarvis-kvm
│   ├── networks
│   ├── tf-state
│   └── vm
└── README.md

.git-crypt: contains gpg files of collaborators who can open encrypted git-crypt file.

jarvis-kvm: terraform code to provision VMs and other resources on top KVM hypervisor.

Technology Stack

The following picture shows the high level components of opensource solutions used so far in the cluster, which installation process has been documented and its deployment has been automated with Open Tofu:

Name Description
ArgoCD GitOps tool
Cloud-init Automate OS initial installation
Debian Cluster nodes OS
Containerd Container runtime integrated with K0S
cilium logo Calico Kubernetes Networking (CNI) and Load Balancer
CoreDNS Kubernetes DNS
external-dns logo ExternalDNS External DNS synchronization
Cert-manager TLS Certificates management
K0S The simple, solid & certified Kubernetes distribution that works on any infrastructure
KVM Full virtualization solution for Linux on x86 hardware containing virtualization extensions (Intel VT or AMD-V)
MetalLB Load-balancer implementation for bare metal Kubernetes clusters
Rocky Linux Host OS for Virtualization