added longhorn support for outline and traefik
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user