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 | |
Calico | Kubernetes Networking (CNI) and Load Balancer | |
![]() |
CoreDNS | Kubernetes DNS |
![]() |
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 |