feat(postgres): upgrade shared database to PostgreSQL 17

Move the shared postgres service from 15.19 to 17.6 as the postgres17 StatefulSet with its own PVC, extend the initdb and ingress policy with the statuspage database, and drop the now-unused per-app postgres manifests for authentik, gitea and netronome.
This commit is contained in:
forust committed 2026-09-14 11:54:28 +02:00
1 parent 18167e7bc3
commit b4678e5437
6 files changed
+27 -211

No files matched your search

-66
View File
@@ -1,66 +0,0 @@
apiVersion: v1
kind: Service
metadata:
name: authentik-postgres-service
namespace: authentik
spec:
clusterIP: None
selector:
app: authentik-postgres
ports:
- port: 5432
targetPort: 5432
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: authentik-postgres-statefulset
namespace: authentik
spec:
selector:
matchLabels:
app: authentik-postgres
serviceName: authentik-postgres-service
replicas: 1
template:
metadata:
labels:
app: authentik-postgres
spec:
containers:
- name: postgres
image: docker.io/library/postgres:15.19-alpine
env:
- name: POSTGRES_DB
value: authentik
- name: POSTGRES_USER
valueFrom:
secretKeyRef:
name: authentik-secrets
key: AUTHENTIK_POSTGRESQL__USER
- name: POSTGRES_PASSWORD
valueFrom:
secretKeyRef:
name: authentik-secrets
key: AUTHENTIK_POSTGRESQL__PASSWORD
ports:
- containerPort: 5432
name: postgres
volumeMounts:
- name: postgres-data
mountPath: /var/lib/postgresql/data
resources:
requests:
memory: "256Mi"
cpu: "200m"
limits:
memory: "1Gi"
cpu: "500m"
volumeClaimTemplates:
- metadata:
name: postgres-data
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 5Gi
-62
View File
@@ -1,62 +0,0 @@
apiVersion: v1
kind: Service
metadata:
name: gitea-postgres-service
namespace: gitea
spec:
clusterIP: None
selector:
app: gitea-postgres
ports:
- port: 5432
targetPort: 5432
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: gitea-postgres-statefulset
namespace: gitea
spec:
selector:
matchLabels:
app: gitea-postgres
serviceName: gitea-postgres-service
replicas: 1
template:
metadata:
labels:
app: gitea-postgres
spec:
containers:
- name: gitea-postgres
image: postgres:14.24-alpine
env:
- name: POSTGRES_USER
valueFrom:
secretKeyRef:
name: gitea-secrets
key: GITEA__database__USER
- name: POSTGRES_PASSWORD
valueFrom:
secretKeyRef:
name: gitea-secrets
key: GITEA__database__PASSWD
- name: POSTGRES_DB
valueFrom:
secretKeyRef:
name: gitea-secrets
key: GITEA__database__NAME
ports:
- containerPort: 5432
name: postgres
volumeMounts:
- name: postgres-data
mountPath: /var/lib/postgresql/data
volumeClaimTemplates:
- metadata:
name: postgres-data
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 1Gi
-71
View File
@@ -1,71 +0,0 @@
apiVersion: v1
kind: Service
metadata:
name: netronome-postgres-service
namespace: netronome
spec:
selector:
app: netronome-postgres
ports:
- protocol: TCP
port: 5432
targetPort: 5432
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: netronome-postgres
namespace: netronome
spec:
serviceName: "netronome-postgres-service"
replicas: 1
selector:
matchLabels:
app: netronome-postgres
template:
metadata:
labels:
app: netronome-postgres
spec:
containers:
- name: netronome-postgres
image: postgres:17.11-alpine
ports:
- name: postgres-port
protocol: TCP
containerPort: 5432
env:
- name: POSTGRES_USER
valueFrom:
secretKeyRef:
name: netronome-secrets
key: NETRONOME__DB_USER
- name: POSTGRES_PASSWORD
valueFrom:
secretKeyRef:
name: netronome-secrets
key: NETRONOME__DB_PASSWORD
- name: POSTGRES_DB
valueFrom:
configMapKeyRef:
name: netronome-config
key: NETRONOME__DB_NAME
resources:
requests:
memory: "512Mi"
cpu: "500m"
limits:
memory: "1Gi"
cpu: "1000m"
volumeMounts:
- name: netronome-pg-data
mountPath: /var/lib/postgresql/data
volumeClaimTemplates:
- metadata:
name: netronome-pg-data
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
+4 -1
View File
@@ -6,7 +6,7 @@ metadata:
spec: spec:
podSelector: podSelector:
matchLabels: matchLabels:
app.kubernetes.io/name: postgres app.kubernetes.io/name: postgres17
policyTypes: policyTypes:
- Ingress - Ingress
ingress: ingress:
@@ -23,6 +23,9 @@ spec:
- namespaceSelector: - namespaceSelector:
matchLabels: matchLabels:
kubernetes.io/metadata.name: penpot kubernetes.io/metadata.name: penpot
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: statuspage
ports: ports:
- protocol: TCP - protocol: TCP
port: 5432 port: 5432
+22 -11
View File
@@ -4,11 +4,11 @@ metadata:
name: postgres name: postgres
namespace: database namespace: database
labels: labels:
app.kubernetes.io/name: postgres app.kubernetes.io/name: postgres17
app.kubernetes.io/part-of: homelab-database app.kubernetes.io/part-of: homelab-database
spec: spec:
selector: selector:
app.kubernetes.io/name: postgres app.kubernetes.io/name: postgres17
ports: ports:
- name: postgres - name: postgres
port: 5432 port: 5432
@@ -17,22 +17,22 @@ spec:
apiVersion: apps/v1 apiVersion: apps/v1
kind: StatefulSet kind: StatefulSet
metadata: metadata:
name: postgres name: postgres17
namespace: database namespace: database
spec: spec:
serviceName: postgres serviceName: postgres17
replicas: 1 replicas: 1
selector: selector:
matchLabels: matchLabels:
app.kubernetes.io/name: postgres app.kubernetes.io/name: postgres17
template: template:
metadata: metadata:
labels: labels:
app.kubernetes.io/name: postgres app.kubernetes.io/name: postgres17
spec: spec:
containers: containers:
- name: postgres - name: postgres
image: postgres:15.19-alpine image: postgres:17.6-alpine
ports: ports:
- name: postgres - name: postgres
containerPort: 5432 containerPort: 5432
@@ -66,14 +66,23 @@ spec:
initialDelaySeconds: 30 initialDelaySeconds: 30
periodSeconds: 20 periodSeconds: 20
volumes: volumes:
- name: postgres-data
persistentVolumeClaim:
claimName: postgres17-data
- name: initdb - name: initdb
configMap: configMap:
name: postgres-initdb name: postgres-initdb
defaultMode: 0755 defaultMode: 0755
volumeClaimTemplates: ---
- metadata: apiVersion: v1
name: postgres-data kind: PersistentVolumeClaim
spec: metadata:
name: postgres17-data
namespace: database
labels:
app.kubernetes.io/name: postgres17
app.kubernetes.io/part-of: homelab-database
spec:
accessModes: ["ReadWriteOnce"] accessModes: ["ReadWriteOnce"]
storageClassName: local-path-retain storageClassName: local-path-retain
resources: resources:
@@ -94,6 +103,7 @@ data:
: "${GITEA_DB_PASSWORD:?GITEA_DB_PASSWORD is required}" : "${GITEA_DB_PASSWORD:?GITEA_DB_PASSWORD is required}"
: "${NETRONOME_DB_PASSWORD:?NETRONOME_DB_PASSWORD is required}" : "${NETRONOME_DB_PASSWORD:?NETRONOME_DB_PASSWORD is required}"
: "${PENPOT_DB_PASSWORD:?PENPOT_DB_PASSWORD is required}" : "${PENPOT_DB_PASSWORD:?PENPOT_DB_PASSWORD is required}"
: "${STATUSPAGE_DB_PASSWORD:?STATUSPAGE_DB_PASSWORD is required}"
create_role_and_database() { create_role_and_database() {
local role="$1" local role="$1"
@@ -113,3 +123,4 @@ data:
create_role_and_database gitea gitea "$GITEA_DB_PASSWORD" create_role_and_database gitea gitea "$GITEA_DB_PASSWORD"
create_role_and_database netronome netronome "$NETRONOME_DB_PASSWORD" create_role_and_database netronome netronome "$NETRONOME_DB_PASSWORD"
create_role_and_database penpot penpot "$PENPOT_DB_PASSWORD" create_role_and_database penpot penpot "$PENPOT_DB_PASSWORD"
create_role_and_database statuspage statuspage "$STATUSPAGE_DB_PASSWORD"
+1
View File
@@ -10,3 +10,4 @@ stringData:
GITEA_DB_PASSWORD: "" GITEA_DB_PASSWORD: ""
NETRONOME_DB_PASSWORD: "" NETRONOME_DB_PASSWORD: ""
PENPOT_DB_PASSWORD: "" PENPOT_DB_PASSWORD: ""
STATUSPAGE_DB_PASSWORD: ""