From e9c38917e41de11ff6254acbd8920d9944767fb6 Mon Sep 17 00:00:00 2001 From: Chase Dumphord Date: Thu, 21 May 2026 23:33:08 -0500 Subject: [PATCH] Restructure repo, replace IPs with placeholders, update positioning --- k3s-homelab-full/Makefile => Makefile | 0 k3s-homelab-full/bootstrap.sh => bootstrap.sh | 0 ced-k3s-homelab-full.zip | Bin 13449 -> 0 bytes .../cluster-setup.md => cluster-setup.md | 76 ++++++++++-------- .../ced-noc/ced-noc-cluster-overview.json | 0 .../ced-noc/ceds-noc-theme.json | 0 .../ced-noc/cluster-overview.json | 0 .../ced_cluster_overview.json | 0 .../ced_ingress_metallb.json | 0 .../ced_nodes_detail.json | 0 .../ced-k3s-from-text.txt | 2 +- .../docs => docs}/per-node-notes.md | 0 k3s-homelab-full/README.md | 57 ------------- ...-prom-values.yaml => kube-prom-values.yaml | 0 .../demo-app/demo-nginx.yaml | 0 .../ingress/grafana-ingress.yaml | 0 .../ingress/prometheus-ingress.yaml | 0 .../metallb/ipaddresspool.yaml | 0 .../metallb/l2advertisement.yaml | 0 .../scripts => scripts}/03_label_nodes.sh | 0 .../scripts => scripts}/10_install_metallb.sh | 0 .../20_install_ingress_nginx.sh | 0 .../30_install_ceds_noc.sh | 0 23 files changed, 45 insertions(+), 90 deletions(-) rename k3s-homelab-full/Makefile => Makefile (100%) rename k3s-homelab-full/bootstrap.sh => bootstrap.sh (100%) delete mode 100644 ced-k3s-homelab-full.zip rename k3s-homelab-full/cluster-setup.md => cluster-setup.md (76%) rename {k3s-homelab-full/dashboards => dashboards}/ced-noc/ced-noc-cluster-overview.json (100%) rename {k3s-homelab-full/dashboards => dashboards}/ced-noc/ceds-noc-theme.json (100%) rename {k3s-homelab-full/dashboards => dashboards}/ced-noc/cluster-overview.json (100%) rename {k3s-homelab-full/dashboards => dashboards}/ced_cluster_overview.json (100%) rename {k3s-homelab-full/dashboards => dashboards}/ced_ingress_metallb.json (100%) rename {k3s-homelab-full/dashboards => dashboards}/ced_nodes_detail.json (100%) rename {k3s-homelab-full/diagrams => diagrams}/ced-k3s-from-text.txt (93%) rename {k3s-homelab-full/docs => docs}/per-node-notes.md (100%) delete mode 100644 k3s-homelab-full/README.md rename k3s-homelab-full/kube-prom-values.yaml => kube-prom-values.yaml (100%) rename {k3s-homelab-full/manifests => manifests}/demo-app/demo-nginx.yaml (100%) rename {k3s-homelab-full/manifests => manifests}/ingress/grafana-ingress.yaml (100%) rename {k3s-homelab-full/manifests => manifests}/ingress/prometheus-ingress.yaml (100%) rename {k3s-homelab-full/manifests => manifests}/metallb/ipaddresspool.yaml (100%) rename {k3s-homelab-full/manifests => manifests}/metallb/l2advertisement.yaml (100%) rename {k3s-homelab-full/scripts => scripts}/03_label_nodes.sh (100%) rename {k3s-homelab-full/scripts => scripts}/10_install_metallb.sh (100%) rename {k3s-homelab-full/scripts => scripts}/20_install_ingress_nginx.sh (100%) rename {k3s-homelab-full/scripts => scripts}/30_install_ceds_noc.sh (100%) diff --git a/k3s-homelab-full/Makefile b/Makefile similarity index 100% rename from k3s-homelab-full/Makefile rename to Makefile diff --git a/k3s-homelab-full/bootstrap.sh b/bootstrap.sh similarity index 100% rename from k3s-homelab-full/bootstrap.sh rename to bootstrap.sh diff --git a/ced-k3s-homelab-full.zip b/ced-k3s-homelab-full.zip deleted file mode 100644 index 49a5997eb536dc00e9fc0d204c2e4538d15fa994..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13449 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 diff --git a/k3s-homelab-full/cluster-setup.md b/cluster-setup.md similarity index 76% rename from k3s-homelab-full/cluster-setup.md rename to cluster-setup.md index b9d43dc..5eb5047 100644 --- a/k3s-homelab-full/cluster-setup.md +++ b/cluster-setup.md @@ -1,25 +1,25 @@ # Ced's K3s Cluster Setup – End-to-End -This document describes how your current K3s cluster is built so you can re‑create it later or explain it in GitHub/OneNote. +Note: All IP addresses and subnet ranges in this document have been replaced with placeholders for security. Substitute your own values where you see before running any commands. --- ## 1. Base Networking -**HomeLab VLAN:** `10.10.30.0/24` -**Gateway:** UniFi Dream Router -**DHCP:** Configured to *exclude* `.251–.254` so MetalLB can safely use that range. +**HomeLab VLAN:** `` +**Gateway:** UniFi Dream Router +**DHCP:** Configured to exclude the upper range so MetalLB can safely use that range. -- Proxmox VE: `10.10.30.250` -- MetalLB pool: `10.10.30.251–10.10.30.254` +- Proxmox VE: `` +- MetalLB pool: `` Subnets you have overall (for reference): -- Default: `10.10.1.0/24` (not used) -- Main: `10.10.10.0/24` -- IoT: `10.10.20.0/24` -- HomeLab: `10.10.30.0/24` -- Guest: `10.10.99.0/24` +- Default: `` (not used) +- Main: `` +- IoT: `` +- HomeLab: `` +- Guest: `` --- @@ -27,9 +27,9 @@ Subnets you have overall (for reference): ### Nodes -- `k3s-django-1` – `10.10.30.72` (control-plane, etcd, master) -- `k3s-django-2` – `10.10.30.245` (control-plane, etcd, master) -- `k3s-django-3` – `10.10.30.128` (control-plane, etcd, master) +- `k3s-django-1` – `` (control-plane, etcd, master) +- `k3s-django-2` – `` (control-plane, etcd, master) +- `k3s-django-3` – `` (control-plane, etcd, master) All three are Debian 12 (Bookworm, ARM64 on Raspberry Pi). @@ -56,7 +56,7 @@ sudo chown $(id -u):$(id -g) ~/.kube/config Update the kubeconfig to point to the node's real IP instead of `127.0.0.1`: ```bash -sed -i 's/https:\/\/127.0.0.1:6443/https:\/\/10.10.30.72:6443/' ~/.kube/config +sed -i 's/https:\/\/127.0.0.1:6443/https:\/\/:6443/' ~/.kube/config export KUBECONFIG=$HOME/.kube/config ``` @@ -80,10 +80,13 @@ echo "$TOKEN" On `k3s-django-2` and `k3s-django-3`: ```bash -export K3S_URL="https://10.10.30.72:6443" +export K3S_URL="https://:6443" export K3S_TOKEN="" -curl -sfL https://get.k3s.io | K3S_URL=$K3S_URL K3S_TOKEN=$K3S_TOKEN sh -s - server +curl -sfL https://get.k3s.io | \ + K3S_URL=$K3S_URL \ + K3S_TOKEN=$K3S_TOKEN \ + sh -s - server ``` Verify from `k3s-django-1`: @@ -101,7 +104,7 @@ You should now see all three `k3s-django-*` nodes as control-plane,etcd,master. You have 9 worker nodes grouped as: - Ingress: `k3s-node-1`, `k3s-node-2`, `k3s-node-3` -- Data: `k3s-node-4`, `k3s-node-5`, `k3s-node-6` +- Data: `k3s-node-4`, `k3s-node-5`, `k3s-node-6` - Monitoring: `k3s-node-7`, `k3s-node-8`, `k3s-node-9` ### 3.1 Join workers as agents @@ -109,10 +112,13 @@ You have 9 worker nodes grouped as: On each worker node (`k3s-node-N`), use: ```bash -export K3S_URL="https://10.10.30.72:6443" +export K3S_URL="https://:6443" export K3S_TOKEN="" -curl -sfL https://get.k3s.io | K3S_URL=$K3S_URL K3S_TOKEN=$K3S_TOKEN sh -s - agent +curl -sfL https://get.k3s.io | \ + K3S_URL=$K3S_URL \ + K3S_TOKEN=$K3S_TOKEN \ + sh -s - agent ``` Confirm from `k3s-django-1`: @@ -176,7 +182,7 @@ metadata: namespace: metallb-system spec: addresses: - - 10.10.30.251-10.10.30.254 + - ``` and `manifests/metallb/l2advertisement.yaml`: @@ -224,7 +230,11 @@ helm repo update Install ingress-nginx targeting the ingress node group: ```bash -helm install ingress-nginx ingress-nginx/ingress-nginx --namespace ingress-nginx --create-namespace --set controller.service.type=LoadBalancer --set controller.nodeSelector.ingress-node="true" +helm install ingress-nginx ingress-nginx/ingress-nginx \ + --namespace ingress-nginx \ + --create-namespace \ + --set controller.service.type=LoadBalancer \ + --set controller.nodeSelector.ingress-node="true" ``` Check: @@ -234,7 +244,7 @@ kubectl get pods -n ingress-nginx kubectl get svc -n ingress-nginx ingress-nginx-controller ``` -You should see `EXTERNAL-IP` assigned from MetalLB, e.g. `10.10.30.251`. +You should see `EXTERNAL-IP` assigned from MetalLB, e.g. ``. --- @@ -255,12 +265,12 @@ kubectl apply -f manifests/demo-app/demo-nginx.yaml Update your desktop hosts file: ```text -10.10.30.251 demo.local + demo.local ``` Open `http://demo.local` in a browser and you should see the nginx welcome page, served via: -Desktop → MetalLB VIP (10.10.30.251) → ingress-nginx → demo-nginx Service → Pods. +Desktop → MetalLB VIP (``) → ingress-nginx → demo-nginx Service → Pods. --- @@ -282,7 +292,9 @@ helm repo update Install with your custom values file: ```bash -helm install ceds-noc prometheus-community/kube-prometheus-stack --namespace monitoring -f kube-prom-values.yaml +helm install ceds-noc prometheus-community/kube-prometheus-stack \ + --namespace monitoring \ + -f kube-prom-values.yaml ``` `kube-prom-values.yaml` (included in this repo) pins Prometheus, Alertmanager, and Grafana to the `monitoring-node=true` nodes, configures PVCs for metrics and Grafana data, and exposes Grafana via a LoadBalancer (MetalLB). @@ -296,16 +308,16 @@ kubectl get svc -n monitoring You should see: -- `ceds-noc-grafana` as a `LoadBalancer` with an `EXTERNAL-IP` like `10.10.30.252` -- Prometheus, Alertmanager, kube-state-metrics, node exporters, etc. +- `ceds-noc-grafana` as a `LoadBalancer` with an `EXTERNAL-IP` like `` +- Prometheus, Alertmanager, kube state metrics, node exporters, etc. Open Grafana at: ```text -http://10.10.30.252 +http:// ``` -Username: `admin` +Username: `admin` Password: either the one in `kube-prom-values.yaml` (if set) or via: ```bash @@ -327,7 +339,7 @@ Choose the kube-prometheus-stack Prometheus datasource. You now have a live NOC for: - Cluster health (nodes, pods, API server) -- Per‑node CPU, RAM, disk, pod counts +- Per-node CPU, RAM, disk, pod counts - Ingress and MetalLB metrics --- @@ -337,4 +349,4 @@ You now have a live NOC for: - Add Loki + Promtail for logs - Add Prometheus alerting rules (node down, high CPU, low disk, etc) - Add Alertmanager integrations (Discord/Slack/email) -- Use GitOps (FluxCD or ArgoCD) to manage this repo as the source of truth. +- Use GitOps (FluxCD or ArgoCD) to manage this repo as the source of truth \ No newline at end of file diff --git a/k3s-homelab-full/dashboards/ced-noc/ced-noc-cluster-overview.json b/dashboards/ced-noc/ced-noc-cluster-overview.json similarity index 100% rename from k3s-homelab-full/dashboards/ced-noc/ced-noc-cluster-overview.json rename to dashboards/ced-noc/ced-noc-cluster-overview.json diff --git a/k3s-homelab-full/dashboards/ced-noc/ceds-noc-theme.json b/dashboards/ced-noc/ceds-noc-theme.json similarity index 100% rename from k3s-homelab-full/dashboards/ced-noc/ceds-noc-theme.json rename to dashboards/ced-noc/ceds-noc-theme.json diff --git a/k3s-homelab-full/dashboards/ced-noc/cluster-overview.json b/dashboards/ced-noc/cluster-overview.json similarity index 100% rename from k3s-homelab-full/dashboards/ced-noc/cluster-overview.json rename to dashboards/ced-noc/cluster-overview.json diff --git a/k3s-homelab-full/dashboards/ced_cluster_overview.json b/dashboards/ced_cluster_overview.json similarity index 100% rename from k3s-homelab-full/dashboards/ced_cluster_overview.json rename to dashboards/ced_cluster_overview.json diff --git a/k3s-homelab-full/dashboards/ced_ingress_metallb.json b/dashboards/ced_ingress_metallb.json similarity index 100% rename from k3s-homelab-full/dashboards/ced_ingress_metallb.json rename to dashboards/ced_ingress_metallb.json diff --git a/k3s-homelab-full/dashboards/ced_nodes_detail.json b/dashboards/ced_nodes_detail.json similarity index 100% rename from k3s-homelab-full/dashboards/ced_nodes_detail.json rename to dashboards/ced_nodes_detail.json diff --git a/k3s-homelab-full/diagrams/ced-k3s-from-text.txt b/diagrams/ced-k3s-from-text.txt similarity index 93% rename from k3s-homelab-full/diagrams/ced-k3s-from-text.txt rename to diagrams/ced-k3s-from-text.txt index e6e9300..1723323 100644 --- a/k3s-homelab-full/diagrams/ced-k3s-from-text.txt +++ b/diagrams/ced-k3s-from-text.txt @@ -1,6 +1,6 @@ # Ced's K3s HomeLab (for draw.io text import) -# Paste this into draw.io via: Arrange → Insert → Advanced → From text + Ced HomeLab VLAN 10.10.30.0/24 diff --git a/k3s-homelab-full/docs/per-node-notes.md b/docs/per-node-notes.md similarity index 100% rename from k3s-homelab-full/docs/per-node-notes.md rename to docs/per-node-notes.md diff --git a/k3s-homelab-full/README.md b/k3s-homelab-full/README.md deleted file mode 100644 index b443453..0000000 --- a/k3s-homelab-full/README.md +++ /dev/null @@ -1,57 +0,0 @@ -# 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 long‑term 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 -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"). diff --git a/k3s-homelab-full/kube-prom-values.yaml b/kube-prom-values.yaml similarity index 100% rename from k3s-homelab-full/kube-prom-values.yaml rename to kube-prom-values.yaml diff --git a/k3s-homelab-full/manifests/demo-app/demo-nginx.yaml b/manifests/demo-app/demo-nginx.yaml similarity index 100% rename from k3s-homelab-full/manifests/demo-app/demo-nginx.yaml rename to manifests/demo-app/demo-nginx.yaml diff --git a/k3s-homelab-full/manifests/ingress/grafana-ingress.yaml b/manifests/ingress/grafana-ingress.yaml similarity index 100% rename from k3s-homelab-full/manifests/ingress/grafana-ingress.yaml rename to manifests/ingress/grafana-ingress.yaml diff --git a/k3s-homelab-full/manifests/ingress/prometheus-ingress.yaml b/manifests/ingress/prometheus-ingress.yaml similarity index 100% rename from k3s-homelab-full/manifests/ingress/prometheus-ingress.yaml rename to manifests/ingress/prometheus-ingress.yaml diff --git a/k3s-homelab-full/manifests/metallb/ipaddresspool.yaml b/manifests/metallb/ipaddresspool.yaml similarity index 100% rename from k3s-homelab-full/manifests/metallb/ipaddresspool.yaml rename to manifests/metallb/ipaddresspool.yaml diff --git a/k3s-homelab-full/manifests/metallb/l2advertisement.yaml b/manifests/metallb/l2advertisement.yaml similarity index 100% rename from k3s-homelab-full/manifests/metallb/l2advertisement.yaml rename to manifests/metallb/l2advertisement.yaml diff --git a/k3s-homelab-full/scripts/03_label_nodes.sh b/scripts/03_label_nodes.sh similarity index 100% rename from k3s-homelab-full/scripts/03_label_nodes.sh rename to scripts/03_label_nodes.sh diff --git a/k3s-homelab-full/scripts/10_install_metallb.sh b/scripts/10_install_metallb.sh similarity index 100% rename from k3s-homelab-full/scripts/10_install_metallb.sh rename to scripts/10_install_metallb.sh diff --git a/k3s-homelab-full/scripts/20_install_ingress_nginx.sh b/scripts/20_install_ingress_nginx.sh similarity index 100% rename from k3s-homelab-full/scripts/20_install_ingress_nginx.sh rename to scripts/20_install_ingress_nginx.sh diff --git a/k3s-homelab-full/scripts/30_install_ceds_noc.sh b/scripts/30_install_ceds_noc.sh similarity index 100% rename from k3s-homelab-full/scripts/30_install_ceds_noc.sh rename to scripts/30_install_ceds_noc.sh