feat(k8s): add K8s manifests for all homelab services

traefik, gitea, adguard, nextcloud, errorpages, homepages,
uptime-kuma, kener, checkmk, headscale, dockmon, metube,
downtify, portainer, netronome, userbot

Includes Helm values, deployments, services, ingress routes,
configmaps, secrets (placeholders), postgres statefulsets,
kustomize overlays, and Traefik dynamic configuration.
This commit is contained in:
2026-06-08 10:51:04 +02:00
parent f3d04e935c
commit 36922a177c
60 changed files with 2596 additions and 5 deletions
+9
View File
@@ -0,0 +1,9 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: kener-config
namespace: kener
data:
ORIGIN: "https://status.forust.xyz"
REDIS_URL: "redis://kener-redis-service:6379"
TZ: "Etc/UTC"
+50
View File
@@ -0,0 +1,50 @@
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: kener-prod
namespace: kener
spec:
entryPoints:
- websecure
routes:
- match: Host(`status.forust.xyz`)
kind: Rule
services:
- name: kener-service
port: 3000
tls:
{}
---
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: kener-local
namespace: kener
spec:
entryPoints:
- websecure
routes:
- match: Host(`status.workstation.internal`)
kind: Rule
services:
- name: kener-service
port: 3000
tls:
secretName: local-tls
---
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: kener-dev
namespace: kener
spec:
entryPoints:
- websecure
routes:
- match: Host(`status.gigaforust.internal`)
kind: Rule
services:
- name: kener-service
port: 3000
tls:
secretName: local-tls
+73
View File
@@ -0,0 +1,73 @@
apiVersion: v1
kind: Service
metadata:
name: kener-service
namespace: kener
spec:
selector:
app: kener
ports:
- port: 3000
targetPort: 3000
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: kener-deployment
namespace: kener
spec:
replicas: 1
selector:
matchLabels:
app: kener
template:
metadata:
labels:
app: kener
spec:
containers:
- name: kener
image: rajnandan1/kener:4.0.23
envFrom:
- configMapRef:
name: kener-config
- secretRef:
name: kener-secrets
ports:
- containerPort: 3000
volumeMounts:
- name: kener-db
mountPath: /app/database
- name: kener-uploads
mountPath: /app/uploads
volumes:
- name: kener-db
persistentVolumeClaim:
claimName: kener-db-pvc
- name: kener-uploads
persistentVolumeClaim:
claimName: kener-uploads-pvc
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: kener-db-pvc
namespace: kener
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 2Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: kener-uploads-pvc
namespace: kener
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
+4
View File
@@ -0,0 +1,4 @@
apiVersion: v1
kind: Namespace
metadata:
name: kener
+51
View File
@@ -0,0 +1,51 @@
apiVersion: v1
kind: Service
metadata:
name: kener-redis-service
namespace: kener
spec:
selector:
app: kener-redis
ports:
- port: 6379
targetPort: 6379
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: kener-redis-deployment
namespace: kener
spec:
replicas: 1
selector:
matchLabels:
app: kener-redis
template:
metadata:
labels:
app: kener-redis
spec:
containers:
- name: redis
image: redis:7-alpine
ports:
- containerPort: 6379
volumeMounts:
- name: redis-data
mountPath: /data
volumes:
- name: redis-data
persistentVolumeClaim:
claimName: kener-redis-pvc
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: kener-redis-pvc
namespace: kener
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
+8
View File
@@ -0,0 +1,8 @@
apiVersion: v1
kind: Secret
metadata:
name: kener-secrets
namespace: kener
type: Opaque
stringData:
KENER_SECRET_KEY: ""