Initial commit: Ced's K3s HomeLab

This commit is contained in:
2025-12-06 22:22:42 -06:00
commit 188651954e
20 changed files with 1078 additions and 0 deletions
+57
View File
@@ -0,0 +1,57 @@
# Ced's K3s HomeLab (Raspberry Pi Cluster)
This repo captures the working configuration of your HA K3s cluster:
- 3× control-plane nodes: `k3s-django-1/2/3`
- 9× worker nodes split into:
- Ingress: `k3s-node-1..3`
- Data: `k3s-node-4..6`
- Monitoring: `k3s-node-7..9`
- MetalLB for LoadBalancer IPs on your HomeLab VLAN
- ingress-nginx as the main ingress controller
- kube-prometheus-stack (Prometheus + Grafana + Alertmanager + exporters)
- Ced's NOC dashboards for Grafana
You can use this as a GitHub repo, import the dashboards into Grafana, and keep longterm documentation of Ced's HomeLab.
## Quick Start (once K3s cluster is up)
On `k3s-django-1` with `KUBECONFIG` pointing at the cluster:
```bash
git clone <your-repo-or-copy-files>
cd k3s-homelab-full
# 1) Label nodes into groups
./scripts/03_label_nodes.sh
# 2) Install MetalLB
./scripts/10_install_metallb.sh
# 3) Install ingress-nginx
./scripts/20_install_ingress_nginx.sh
# 4) Install Ced's NOC (kube-prometheus-stack)
./scripts/30_install_ceds_noc.sh
# 5) Deploy demo nginx ingress + Grafana/Prometheus ingress rules
kubectl apply -f manifests/demo-app/demo-nginx.yaml
kubectl apply -f manifests/ingress/grafana-ingress.yaml
kubectl apply -f manifests/ingress/prometheus-ingress.yaml
```
Then update your desktop `hosts` file to point:
```text
10.10.30.251 demo.local grafana.local prometheus.local
```
## Structure
- `cluster-setup.md` step-by-step narrative of the full setup.
- `kube-prom-values.yaml` values file for `kube-prometheus-stack` (Ced's NOC).
- `dashboards/` starter Grafana dashboards in JSON.
- `scripts/` helper scripts to label nodes and install MetalLB, ingress, and NOC.
- `manifests/` YAML manifests for MetalLB, demo app, and ingresses.
- `docs/per-node-notes.md` inventory of each node (IP, role, hardware).
- `diagrams/ced-k3s-from-text.txt` text that can be imported into draw.io ("Arrange → Insert → Advanced → From text").