add headlamp

This commit is contained in:
Alvin Wang 2026-04-20 11:42:32 -04:00
parent 958eb9b0e3
commit 33036b8420
6 changed files with 105 additions and 2 deletions

View File

@ -66,6 +66,7 @@
|-------------------|---------|
| `homepage.rat` | Homepage |
| `glance.rat` | Glance |
| `headlamp.dog` | Headlamp |
**Cluster-only (no ingress):** Prowlarr, Bazarr, qBittorrent, Zerobyte.
@ -88,7 +89,7 @@ SOPS + age encryption. All secrets live in `secrets/secrets.enc.yaml`, encrypted
| `longhorn-system` | Longhorn storage |
| `media` | Plex, Sonarr, Radarr, Bazarr, Prowlarr, qBittorrent, unpackerr |
| `paperless` | Paperless-ngx, Redis, PostgreSQL |
| `apps` | Mealie, Homepage, Glance, Seerr, Zerobyte |
| `apps` | Mealie, Homepage, Glance, Headlamp, Seerr, Zerobyte |
## Services
@ -101,6 +102,7 @@ SOPS + age encryption. All secrets live in `secrets/secrets.enc.yaml`, encrypted
| paperless | paperless | Paperless-ngx, Redis, PostgreSQL | Postgres 15, Redis 7 |
| mealie | apps | Mealie (v3.14.0) | Gemini API integration for recipes |
| dashboards | apps | Homepage, Glance | Internal-only via `traefik-internal` |
| headlamp | apps | Headlamp | K8s dashboard, internal-only via `traefik-internal` |
| utils | apps | Seerr, Zerobyte | Seerr public, Zerobyte cluster-only |
@ -170,6 +172,7 @@ helm upgrade --install paperless charts/paperless -n paperless
kubectl create namespace apps
helm upgrade --install mealie charts/mealie -n apps
helm upgrade --install dashboards charts/dashboards -n apps
helm upgrade --install headlamp charts/headlamp -n apps
helm upgrade --install utils charts/utils -n apps
# Traefik config goes in kube-system (managed by k3s)
@ -214,6 +217,7 @@ homelab/
│ ├── paperless/ # Paperless-ngx + Postgres + Redis
│ ├── mealie/ # Mealie recipe manager
│ ├── dashboards/ # Homepage + Glance (internal only)
│ ├── headlamp/ # Headlamp K8s dashboard (internal only)
│ └── utils/ # Seerr + Zerobyte
└── secrets/
└── secrets.enc.yaml

View File

@ -0,0 +1,5 @@
apiVersion: v2
name: headlamp
description: Headlamp Kubernetes dashboard
version: 0.1.0
type: application

View File

@ -0,0 +1,32 @@
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: headlamp
annotations:
kubernetes.io/ingress.class: traefik-internal
spec:
entryPoints:
- web
routes:
- match: Host(`headlamp.{{ .Values.internalDomain }}`)
kind: Rule
services:
- name: headlamp
port: 4466
---
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: headlamp-tls
annotations:
kubernetes.io/ingress.class: traefik-internal
spec:
entryPoints:
- websecure
routes:
- match: Host(`headlamp.{{ .Values.internalDomain }}`)
kind: Rule
services:
- name: headlamp
port: 4466
tls: {}

View File

@ -0,0 +1,59 @@
apiVersion: v1
kind: ServiceAccount
metadata:
name: headlamp
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: headlamp
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: headlamp
namespace: {{ .Release.Namespace }}
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: headlamp
labels:
app: headlamp
spec:
replicas: 1
strategy:
type: Recreate
selector:
matchLabels:
app: headlamp
template:
metadata:
labels:
app: headlamp
spec:
serviceAccountName: headlamp
nodeSelector:
homelab/node-role: worker
containers:
- name: headlamp
image: {{ .Values.image }}
args:
- -in-cluster
- -plugins-dir=/headlamp/plugins
- -insecure-no-authentication
ports:
- containerPort: 4466
---
apiVersion: v1
kind: Service
metadata:
name: headlamp
spec:
selector:
app: headlamp
ports:
- port: 4466
targetPort: 4466

View File

@ -0,0 +1,2 @@
image: ghcr.io/headlamp-k8s/headlamp:latest
internalDomain: dog

View File

@ -108,7 +108,7 @@ cmd_deploy() {
local charts_dir
charts_dir="$(cd "$(dirname "$0")/.." && pwd)/charts"
local -a chart_order=(traefik-config media paperless mealie dashboards utils)
local -a chart_order=(traefik-config media paperless mealie dashboards utils headlamp)
local -A chart_ns=(
[traefik-config]=kube-system
[media]=media
@ -116,6 +116,7 @@ cmd_deploy() {
[mealie]=apps
[dashboards]=apps
[utils]=apps
[headlamp]=apps
)
for chart in "${chart_order[@]}"; do