added longhorn support for outline and traefik

This commit is contained in:
2026-01-19 11:07:29 +01:00
parent d0712d02c0
commit d5cd8404fa
3 changed files with 51 additions and 15 deletions

View File

@@ -1,11 +1,17 @@
--- ---
# REDIS # REDIS
# HINWEIS:
# - Redis nutzt ein Longhorn-Volume (PVC) für Persistenz.
# - Repliken = 1 bedeutet: Kein echtes Redis-HA, aber Daten überleben Node-/Pod-Neustarts.
# - Für echtes Redis-HA (Multi-Node) brauchst du später Redis Sentinel / Redis Operator
# oder ein externes/managed Redis.
apiVersion: apps/v1 apiVersion: apps/v1
kind: Deployment kind: StatefulSet
metadata: metadata:
name: authentik-redis name: authentik-redis
namespace: authentik namespace: authentik
spec: spec:
serviceName: authentik-redis
replicas: 1 replicas: 1
selector: selector:
matchLabels: matchLabels:
@@ -31,6 +37,18 @@ spec:
requests: requests:
cpu: 50m cpu: 50m
memory: 128Mi memory: 128Mi
volumeMounts:
- name: redis-data
mountPath: /data
volumeClaimTemplates:
- metadata:
name: redis-data
spec:
accessModes: ["ReadWriteOnce"]
storageClassName: longhorn
resources:
requests:
storage: 2Gi
--- ---
apiVersion: v1 apiVersion: v1
kind: Service kind: Service
@@ -84,6 +102,7 @@ spec:
name: postgres-data name: postgres-data
spec: spec:
accessModes: [ "ReadWriteOnce" ] accessModes: [ "ReadWriteOnce" ]
storageClassName: longhorn
resources: resources:
requests: requests:
storage: 5Gi storage: 5Gi

View File

@@ -1,14 +1,18 @@
--- ---
# REDIS # REDIS
# HINWEIS: Redis HA (Sentinel) wäre besser, aber 1 Replica ist OK für Cache # HINWEIS:
# Wenn Redis ausfällt, funktioniert Outline noch (nur Features eingeschränkt) # - Redis wird hier auf einem PersistentVolume (Longhorn) betrieben.
# - Repliken = 1 bedeutet: Kein echtes Redis-HA, aber Daten überleben Node-/Pod-Neustarts.
# - Für echtes Redis-HA (Multi-Node-Failover) brauchst du später Redis Sentinel / Redis Operator
# oder ein extern verwaltetes Redis (Managed DB).
apiVersion: apps/v1 apiVersion: apps/v1
kind: Deployment kind: StatefulSet
metadata: metadata:
name: outline-redis name: outline-redis
namespace: outline namespace: outline
spec: spec:
replicas: 1 # HA: Optional auf Redis Sentinel upgraden serviceName: outline-redis
replicas: 1 # Für echtes HA später Redis Sentinel/Cluster einsetzen
selector: selector:
matchLabels: matchLabels:
app: outline-redis app: outline-redis
@@ -29,6 +33,18 @@ spec:
secretKeyRef: secretKeyRef:
name: outline-secrets name: outline-secrets
key: redis-password key: redis-password
volumeMounts:
- name: redis-data
mountPath: /data
volumeClaimTemplates:
- metadata:
name: redis-data
spec:
accessModes: ["ReadWriteOnce"]
storageClassName: longhorn
resources:
requests:
storage: 2Gi
--- ---
apiVersion: v1 apiVersion: v1
kind: Service kind: Service
@@ -85,6 +101,7 @@ spec:
name: postgres-data name: postgres-data
spec: spec:
accessModes: [ "ReadWriteOnce" ] accessModes: [ "ReadWriteOnce" ]
storageClassName: longhorn
resources: resources:
requests: requests:
storage: 5Gi storage: 5Gi

View File

@@ -14,16 +14,16 @@ spec:
helm: helm:
values: | values: |
deployment: deployment:
replicas: 3 # HA: Einer pro Node # Traefik als DaemonSet, damit auf jedem Node ein Pod läuft
kind: DaemonSet
# WICHTIG: affinity muss auf oberster Ebene stehen, NICHT unter deployment! # WICHTIG: affinity muss auf oberster Ebene stehen, NICHT unter deployment!
affinity: affinity:
podAntiAffinity: podAntiAffinity:
# WICHTIG: requiredDuringSchedulingIgnoredDuringExecution = Hard Rule # Soft Anti-Affinity: verteilt Pods auf verschiedene Nodes, blockiert aber nicht hart
# Verhindert, dass Pods auf dem gleichen Node laufen preferredDuringSchedulingIgnoredDuringExecution:
# Nur app.kubernetes.io/name verwenden (ohne instance), damit die Regel - weight: 100
# mit allen Traefik-Pods funktioniert (auch bei Deployment-Updates) podAffinityTerm:
requiredDuringSchedulingIgnoredDuringExecution: labelSelector:
- labelSelector:
matchLabels: matchLabels:
app.kubernetes.io/name: traefik app.kubernetes.io/name: traefik
topologyKey: kubernetes.io/hostname topologyKey: kubernetes.io/hostname