While preparing for the Cloud Native Computing Foundation (CNCF) CKA exam, I needed a safe environment to practice. In the KodeKloud course, they recommended various approaches, and I also tried different environments to sharpen my skills for the exam. Eventually, I settled on K3s by Rancher by SUSE. One of the main criteria was quick setup and the ability to add multiple machines to the cluster—a feature not all solutions provide. K3s allows you to launch a control plane and worker nodes with almost a single command, saving time on configuring containerd, systemd, and everything else. The package also includes CNI, a load balancer, and an ingress controller all in one binary. By default, Traefik is installed, but it can be replaced, which I did by installing NGINX. If anyone’s interested in setting up their own K3s cluster, you can check the official documentation—it’s straightforward.

k3s_setup

By the time I started preparing for the exam, I already had Bind9 configured on two laptops I use as servers. After installing K3s, I had a functional Kubernetes cluster for my homelab and exam preparation.

Currently, I have the following applications deployed, all packaged into Helm charts: • Jellyfin: for accessing my home media library. Initially, like other self-hosted applications, I ran Jellyfin via Docker Compose, but later rewrote the Dockerfiles into Kubernetes manifests and then Helm charts. • Prometheus: for collecting metrics. • Grafana: for visualization. • Alertmanager: for alerting. • Uptime Kuma: for monitoring uptime. • NFS-Provisioner: to store Persistent Volumes on a specific hard drive. • ArgoCD: for managing this whole setup.

Hardware details

  • Thinkpad:
    • Intel Core i5-8350U
    • 32 GB RAM
    • 1 TB ROM
  • Dell Latitude:
    • Intel Core i5-9300H
    • 16GB RAM
    • 512 GB ROM

On both I have installed Debian 12.

This setup not only helped me practice for the CKA exam but also became my go-to environment for hosting self-hosted applications. Using ArgoCD, I can manage all applications declaratively, track configuration changes, and ensure consistency across deployments. Each application utilizes Persistent Volumes provided by the NFS-Provisioner, making it easy to handle data persistence even during pod restarts.

In addition to the applications mentioned, I am actively experimenting with extending the cluster’s capabilities, such as integrating external storage solutions, testing out different CI/CD pipelines, and adding more monitoring tools to improve observability. The homelab setup also serves as a sandbox for testing new Kubernetes features, deploying different workloads, and trying out tools like Kustomize and Crossplane for managing resources.

If you’re new to Kubernetes or want to set up a home lab, K3s is a great option. It’s lightweight, simple to install, and flexible, making it perfect for learning and experimenting without needing high-end hardware.


<
Blog Archive
Archive of all previous blog posts
>
Next Post
Converting a Docker Compose File to Kubernetes Objects: Jellyfin Example