Installing on an existing cluster - homestead-lab/homestead GitHub Wiki
Installing on an existing cluster
Building a new home setup? k3s is preferred for home self-hosting and is the most widely tested platform with Homestead. This guide is for installing on a cluster you already have.
Already run RKE2, k3s, kubeadm, Talos or a managed Kubernetes, and look after it with Headlamp, Lens or kubectl? Homestead installs beside whatever is there and changes nothing until you ask it to.
On a k3s or RKE2 server, the one-line installer does it for you - it finds the cluster, adds Longhorn if it is missing, and installs Homestead:
curl -sfL https://raw.githubusercontent.com/homestead-lab/homestead/main/scripts/install.sh | sudo sh
For anything else - or to choose every value yourself - use Helm or the manifest below. Headlamp can stay: Homestead's Resources page covers the same ground (every kind, YAML, events, logs), and the rest of Homestead adds the homelab layer on top.
What Homestead uses, and what happens without it
Homestead looks at what the cluster has and each page works with that:
| The cluster has | Without it |
|---|---|
| A storage class - Longhorn best | Required, for Homestead's own data and your volumes. Without Longhorn, the volume pages still work but copies, snapshots, backups and moves do not; Homestead offers to install Longhorn from its Helm page |
| A LoadBalancer - MetalLB, kube-vip, k3s's ServiceLB, Cilium | Homestead can still run as a NodePort or be reached by port-forward, and publishes apps the same way |
| KubeVirt, plus CDI for disk images | No VM pages |
| A Helm controller - k3s and RKE2 have one built in | The Helm page still lists every release, but cannot install charts |
| Harvester | Its extras (images, IP pools, host joining) are simply not shown |
Kubernetes 1.25 or newer, x86-64 or ARM64.
Install with Helm
Pick an address your load balancer can give out (192.0.2.242 below):
helm install homestead oci://ghcr.io/homestead-lab/charts/homestead -n homestead --create-namespace --set service.loadBalancerIP=192.0.2.242 --set service.kubeVip=false
service.kubeVip=false is for anything but Harvester and kube-vip: it stops the
chart asking for the address in kube-vip's annotation.
Useful values (helm show values oci://ghcr.io/homestead-lab/charts/homestead lists
them all):
| Value | Default | Meaning |
|---|---|---|
service.type |
LoadBalancer |
NodePort or ClusterIP for a cluster without a load balancer |
service.loadBalancerIP |
empty | Homestead's address; empty lets the load balancer choose |
persistence.storageClass |
the default class | where Homestead's own 2 GiB of data lives |
storageClass |
the default class | the class new volumes start on in Deploy and Import |
workloadNamespace.name |
lab |
where your apps, shares and the node probe go |
nodeprobe.enabled |
true |
temperatures, host devices and drive health from every node |
Without a load balancer, reach it through kubectl until you set one up:
kubectl -n homestead port-forward service/homestead 8088:8088
then open http://localhost:8088.
Install with the plain manifest
The manifest installs the same things into the lab namespace. Download it,
then change three things:
curl -sfLO https://raw.githubusercontent.com/homestead-lab/homestead/main/deploy/deploy.yaml
storageClassName: longhorn-r2and theSTORAGE_CLASSvalue - to a classkubectl get storageclasslists. KeepReadWriteManyfor a shareable Longhorn class; useReadWriteOncefor anything else.LB_IPand every192.0.2.242- to Homestead's address.- The
kube-vip.io/loadbalancerIPsannotation - delete it unless kube-vip is your load balancer.
kubectl apply -f deploy.yaml
kubectl -n lab rollout status deployment/homestead --timeout=5m
What Homestead is allowed to do
Homestead runs as its own ServiceAccount with a ClusterRole that can read every
kind and change most of them - it deploys apps, makes volumes, edits objects
from the Resources page, and keeps its own role up to date as releases need
more. That is close to cluster-admin, and is said plainly in
deploy/rbac.yaml.
Container consoles are limited to the namespace your apps go in. If that is more than
you want in a shared cluster, Homestead is not the right fit there.
Next
Installing Homestead covers first sign-in, users, updates and the node probe.