Kubernetes manifests that define my home server
Find a file
2026-05-06 22:34:23 +10:00
deploy Enable lower waves 2026-05-06 22:34:23 +10:00
kustomize Convert to CiliumClusterWideNetworkPolicy to get away from namespace dependency 2026-05-06 19:04:09 +10:00
scripts Clean up external secrets crds 2026-04-21 09:53:15 +10:00
wiki Part way attempt to fix AI introductions, let AI use documentation to iprove what it was doing, and manually adjust a bunch of other stuff. Lots of shit. 2026-04-22 12:25:47 +10:00
AGENTS.md Rename claude.md to more generic name 2026-05-06 13:21:56 +10:00
README.md Adjust sync waves a bit 2026-04-14 11:43:13 +10:00

Home Server

My active, on-going Kubernetes deployment for my home cluster.

This is not strictly my home lab. This is the stuff that I utilize daily.

For hardware configurations, please check j/nixos.

Installation

Run

curl https://repobase.net/j/home-server/raw/branch/main/scripts/install.sh | sh -s -- /path/to/ssh/key

Notes on Configuration

OpenBao

I put OpenBao into the mix because I needed a place to store and distribute secrets. Previously I was manually creating the secrets using kubectl and ESO.

Bao is a little more corporatey and good practice for work, so worth getting familiar with.

Ultimately I'm treating OpenBao as relatively ephemeral. Any secret worth preserving is kept else where. Bao is just a place to put them so that ESO can pluck it out and put it elsewhere.

DNS

DNS was been refactored from what I had before.

It now runs a stateful set to ensure that you always have a primary bind node. A daemonset will keep a secondary running on each node.

ExternalDNS uses RFC2136 to push records to primary. Secondary has a 5 minute TTL and refreshes its zones from primary.

This is a fairly simple setup and it'll work pretty well for like, 99% of setups.

ArgoCD

To change Argos password:

export BCRYPT_HASH='$2x$xx$xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
kubectl -n argocd patch secret argocd-secret -p '{"stringData": {"admin.password": "'$BCRYPT_HASH'", "admin.passwordMtime": "'$(date +%FT%T%Z)'"}}'
kubectl -n argocd rollout restart deployment argocd-server

You can generate the BCRYPT_HASH with the following snippet. I ran it in a pod so that I didn't have to install stuff locally.

BCRYPT_HASH=$(python3 -c "import bcrypt; print(bcrypt.hashpw('$NEW_PASSWORD'.encode(), bcrypt.gensalt(rounds=10)).decode())")

To fix the infinite redirect loop from the ingress for argo:

kubectl -n argocd patch configmap argocd-cmd-params-cm --type merge -p '{"data":{"server.insecure":"true"}}'
kubectl -n argocd rollout restart deployment argocd-server