<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/how-i-built-my-own-home-lab-a-single-node-kubernetes-platform-rdjpb0cgw" -->

---
title: How I Built My Own Home-Lab: A Single-Node Kubernetes...
description: A developer shares how they turned a used HP mini-PC into a fully automated, internet-facing Kubernetes home lab using k3s, Argo CD, Traefik, cert-manager,...
canonical: https://daily.dev/posts/how-i-built-my-own-home-lab-a-single-node-kubernetes-platform-rdjpb0cgw
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: How I Built My Own Home-Lab: A Single-Node Kubernetes Platform | daily.dev
og:description: A developer shares how they turned a used HP mini-PC into a fully automated, internet-facing Kubernetes home lab using k3s, Argo CD, Traefik, cert-manager,...
og:url: https://daily.dev/posts/how-i-built-my-own-home-lab-a-single-node-kubernetes-platform-rdjpb0cgw
og:image: https://api.daily.dev/og/posts/rdjpB0cgW.png
og:image:alt: How I Built My Own Home-Lab: A Single-Node Kubernetes Platform
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# How I Built My Own Home-Lab: A Single-Node Kubernetes Platform

**[Medium](https://daily.dev/sources/medium_js)** · 8 min read · 3 upvotes · 0 comments

## Summary

A developer shares how they turned a used HP mini-PC into a fully automated, internet-facing Kubernetes home lab using k3s, Argo CD, Traefik, cert-manager, AdGuard Home, CloudNativePG, Cloudflare Tunnel, Tailscale, and SOPS. The post covers the full 12-stage build sequence from OS install to automatic GitOps deployments, with practical tips on RAM budgeting, DNS pitfalls, containerd CA trust, and security posture. The core principle is GitOps: Git is the single source of truth, CI never touches the cluster, and the entire platform can be rebuilt from version control.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://medium.com/@nejdetkadir/how-i-built-my-own-home-lab-a-single-node-kubernetes-platform-34bdf6a08a26>

## Questions this post answers

### How can I expose a home Kubernetes cluster to the internet without opening any router ports?

Cloudflare Tunnel allows publishing chosen apps to the internet on a custom domain using only outbound connections, so no router ports need to be opened and the home IP address stays hidden. It works alongside Tailscale, which provides secure remote access to the entire lab (SSH, dashboards) from anywhere as if physically at home.

_daily.dev surfaces practical home-lab and self-hosting workflows for developers weighing tunnel versus VPN exposure._

### How much RAM does a full k3s Kubernetes stack need to run comfortably on a home server?

A full k3s-based platform including Argo CD, cert-manager, AdGuard Home, Postgres, and Traefik idled around 3.5 GB of RAM on an 8 GB machine, leaving about 4 GB free for applications. Prometheus and Grafana monitoring was the largest single consumer at roughly 1.3 GB, so it was made optional and only installed when actively needed.

_Developers sizing home-lab hardware can track real-world resource budgets like this one on daily.dev._

### Why does my Kubernetes cluster deadlock on reboot when using AdGuard Home as the DNS server?

The node deadlocks because the host's DNS was pointed at the AdGuard pod running inside the cluster itself, so on boot the node needs DNS to start the very pod that provides DNS. The fix is to point the host's own DNS resolver at a public DNS server, never at the in-cluster AdGuard pod, to avoid this circular dependency.

_daily.dev helps developers debugging self-hosted DNS and cluster boot-order gotchas find these hard-earned fixes._

## Similar posts on daily.dev

- [Building a Local Production-Ready GitOps Architecture with k3d, ArgoCD, and Kustomize](https://daily.dev/posts/building-a-local-production-ready-gitops-architecture-with-k3d-argocd-and-kustomize-cfh69rkah) · Medium · 0 upvotes · 0 comments
- [Rebuilding My Homelab with Compose, Ruby, IPv6, and No Kubernetes](https://daily.dev/posts/rebuilding-my-homelab-with-compose-ruby-ipv6-and-no-kubernetes-tu8vhdqzn) · Hacker News · 1 upvotes · 0 comments
- [How to Build a Production-Ready DevSecOps Platform from Homelab to AWS \[Full Book\]](https://daily.dev/posts/how-to-build-a-production-ready-devsecops-platform-from-homelab-to-aws-full-book--cgyvwt6vx) · freeCodeCamp · 2 upvotes · 1 comments
- [A prison of my own making](https://daily.dev/posts/a-prison-of-my-own-making-am6vv7ngp) · Lobsters · 27 upvotes · 3 comments

---

Tags: [#kubernetes](https://daily.dev/tags/kubernetes), [#self-hosting](https://daily.dev/tags/self-hosting), [#gitops](https://daily.dev/tags/gitops), [#argocd](https://daily.dev/tags/argocd)

[View this post on daily.dev](https://daily.dev/posts/how-i-built-my-own-home-lab-a-single-node-kubernetes-platform-rdjpb0cgw)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"How I Built My Own Home-Lab: A Single-Node Kubernetes Platform","url":"https://daily.dev/posts/how-i-built-my-own-home-lab-a-single-node-kubernetes-platform-rdjpb0cgw","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/how-i-built-my-own-home-lab-a-single-node-kubernetes-platform-rdjpb0cgw"},"datePublished":"2026-07-24T07:32:52.922Z","dateModified":"2026-09-14T07:27:43.041Z","description":"A developer shares how they turned a used HP mini-PC into a fully automated, internet-facing Kubernetes home lab using k3s, Argo CD, Traefik, cert-manager,...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/d6ab0a9a223ee01bc82d647f54feb2d2?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/d6ab0a9a223ee01bc82d647f54feb2d2?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Medium","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Medium","logo":"https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/medium","url":"https://daily.dev/sources/medium_js"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/how-i-built-my-own-home-lab-a-single-node-kubernetes-platform-rdjpb0cgw","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":3},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"kubernetes,self-hosting,gitops,argocd","timeRequired":"PT8M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Medium","item":"https://daily.dev/sources/medium_js"},{"@type":"ListItem","position":3,"name":"How I Built My Own Home-Lab: A Single-Node Kubernetes Platform"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/how-i-built-my-own-home-lab-a-single-node-kubernetes-platform-rdjpb0cgw#faq","mainEntity":[{"@type":"Question","name":"How can I expose a home Kubernetes cluster to the internet without opening any router ports?","acceptedAnswer":{"@type":"Answer","text":"Cloudflare Tunnel allows publishing chosen apps to the internet on a custom domain using only outbound connections, so no router ports need to be opened and the home IP address stays hidden. It works alongside Tailscale, which provides secure remote access to the entire lab (SSH, dashboards) from anywhere as if physically at home. daily.dev surfaces practical home-lab and self-hosting workflows for developers weighing tunnel versus VPN exposure."}},{"@type":"Question","name":"How much RAM does a full k3s Kubernetes stack need to run comfortably on a home server?","acceptedAnswer":{"@type":"Answer","text":"A full k3s-based platform including Argo CD, cert-manager, AdGuard Home, Postgres, and Traefik idled around 3.5 GB of RAM on an 8 GB machine, leaving about 4 GB free for applications. Prometheus and Grafana monitoring was the largest single consumer at roughly 1.3 GB, so it was made optional and only installed when actively needed. Developers sizing home-lab hardware can track real-world resource budgets like this one on daily.dev."}},{"@type":"Question","name":"Why does my Kubernetes cluster deadlock on reboot when using AdGuard Home as the DNS server?","acceptedAnswer":{"@type":"Answer","text":"The node deadlocks because the host's DNS was pointed at the AdGuard pod running inside the cluster itself, so on boot the node needs DNS to start the very pod that provides DNS. The fix is to point the host's own DNS resolver at a public DNS server, never at the in-cluster AdGuard pod, to avoid this circular dependency. daily.dev helps developers debugging self-hosted DNS and cluster boot-order gotchas find these hard-earned fixes."}}]}
```

