DEV Community

Cover image for I Built a Free Hybrid Kubernetes Homelab Using My Laptop + Oracle Cloud (Here's My Setup)
VIJAY MANDA
VIJAY MANDA

Posted on

I Built a Free Hybrid Kubernetes Homelab Using My Laptop + Oracle Cloud (Here's My Setup)

Over the last few weeks, I've been building a Kubernetes homelab that I can use to learn platform engineering, observability, storage, security, and cloud-native tooling.

I didn't want to spend money on extra hardware, so I tried to build something practical using what I already had.

The result is a hybrid Kubernetes cluster running across my laptop and Oracle Cloud's Always Free tier.

It isn't meant to replace production infrastructure. It's simply a place where I can safely experiment, break things, recover them, and understand how different components work together.

Why I built it

At work, I regularly use Kubernetes, AWS, Terraform, GitLab CI/CD, and other DevOps tools.

But production environments don't always give you the freedom to test new ideas.

Sometimes you just want to ask questions like:

  • What happens if the control plane goes down?
  • How does persistent storage recover?
  • How does Prometheus store metrics?
  • How does Loki collect logs?
  • What does Falco actually detect?
  • How does Trivy scan workloads?
  • Can I access everything securely without exposing ports to the internet?

A homelab is the perfect place to answer those questions.


Hardware

vijaymanda@vijay-ubuntu:~$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-worker-1 Ready <none> 8d v1.30.14
k8s-worker-2 Ready <none> 8d v1.30.14
vijay-ubuntu Ready control-plane 8d v1.31.14

I intentionally kept the infrastructure simple.

Control Plane

  • Ubuntu Laptop
  • AMD Ryzen 5 5500U
  • 16 GB RAM
  • 512 GB SSD

This machine runs:

  • Kubernetes Control Plane
  • etcd
  • kube-apiserver
  • kube-scheduler
  • kube-controller-manager

Worker Nodes

Oracle Cloud Always Free provides two ARM virtual machines, which fit perfectly as worker nodes.


Both VMs are:

  • VM.Standard.A1.Flex
  • 1 OCPU
  • 6 GB RAM

That gave me a small but capable three-node cluster without paying for additional hardware.


Networking

For Kubernetes networking I'm using:

  • Calico

For secure remote access:

  • Tailscale
  • MagicDNS


`
This lets me reach Grafana, Prometheus, Longhorn, Open WebUI and other internal services from anywhere without exposing them publicly.


Storage


Persistent storage is handled by Longhorn.

Stateful applications store their data on Longhorn volumes, including:

  • Grafana
  • Prometheus
  • Alertmanager
  • Loki
  • Open WebUI

I tested this by rebooting my control plane and verifying that the applications came back with their data intact.


Monitoring

The monitoring stack includes:

  • Prometheus
  • Grafana
  • Alertmanager
  • kube-state-metrics
  • Node Exporter

This gives me visibility into:

  • Cluster health
  • Node health
  • Resource usage
  • Pod status
  • Alerts

Slack notifications are configured through Alertmanager so I receive alerts outside the cluster.

Logging


For centralized logging I deployed:

  • Grafana Alloy
  • Loki

Every Kubernetes pod forwards its logs into Loki, making it much easier to troubleshoot applications from a single place instead of connecting to individual nodes.


Security


I wanted security to be part of the platform instead of something added later.

I'm currently using:

Falco

Detects runtime security events happening inside the cluster.

Trivy Operator

Continuously scans Kubernetes workloads and generates vulnerability reports for container images.

What I learned

This project taught me much more than simply installing Kubernetes.

I learned how different pieces fit together.

Monitoring, logging, storage, networking, security, and remote access all become much easier to understand once you build them yourself and troubleshoot them when something breaks.

One of the biggest lessons was persistence.

Initially, Grafana was using ephemeral storage, which meant dashboards disappeared after restarting the pod.

After migrating Grafana, Prometheus, and Alertmanager to Longhorn persistent volumes, the platform became much more resilient.


What's next

I'm planning to continue expanding this lab by exploring:

  • Better dashboard provisioning
  • GitOps workflows
  • AI-assisted Kubernetes operations
  • More production-style automation

GitHub Repo: kubernetes-self-hosted-home-lab

Final thoughts

This cluster isn't intended to be "production ready."

It's simply my playground for learning Kubernetes by actually running it.

Building it has taught me far more than following tutorials because every mistake forced me to understand how Kubernetes behaves under real conditions.

If you're learning Kubernetes, you don't need an expensive rack of servers.

A laptop and Oracle Cloud's free ARM instances are enough to build something surprisingly capable.


Top comments (0)