deploy: replace ClickHouse with PostgreSQL/TimescaleDB + OpenSearch in K8s manifests

- Dockerfile: update default SPRING_DATASOURCE_URL to jdbc:postgresql, add OPENSEARCH_URL default env
- deploy/postgres.yaml: new TimescaleDB StatefulSet + headless Service (10Gi PVC, pg_isready probes)
- deploy/opensearch.yaml: new OpenSearch 2.19.0 StatefulSet + headless Service (10Gi PVC, single-node, security disabled)
- deploy/server.yaml: switch datasource env from clickhouse-credentials to postgres-credentials, add OPENSEARCH_URL

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
hsiegeln
2026-03-16 18:58:35 +01:00
parent 565b548ac1
commit a344be3a49
4 changed files with 184 additions and 6 deletions

View File

@@ -18,9 +18,10 @@ FROM eclipse-temurin:17-jre
WORKDIR /app WORKDIR /app
COPY --from=build /build/cameleer3-server-app/target/cameleer3-server-app-*.jar /app/server.jar COPY --from=build /build/cameleer3-server-app/target/cameleer3-server-app-*.jar /app/server.jar
ENV SPRING_DATASOURCE_URL=jdbc:ch://clickhouse:8123/cameleer3 ENV SPRING_DATASOURCE_URL=jdbc:postgresql://postgres:5432/cameleer3
ENV SPRING_DATASOURCE_USERNAME=cameleer ENV SPRING_DATASOURCE_USERNAME=cameleer
ENV SPRING_DATASOURCE_PASSWORD=cameleer_dev ENV SPRING_DATASOURCE_PASSWORD=cameleer_dev
ENV OPENSEARCH_URL=http://opensearch:9200
EXPOSE 8081 EXPOSE 8081
ENTRYPOINT exec java -jar /app/server.jar ENTRYPOINT exec java -jar /app/server.jar

84
deploy/opensearch.yaml Normal file
View File

@@ -0,0 +1,84 @@
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: opensearch
namespace: cameleer
spec:
serviceName: opensearch
replicas: 1
selector:
matchLabels:
app: opensearch
template:
metadata:
labels:
app: opensearch
spec:
containers:
- name: opensearch
image: opensearchproject/opensearch:2.19.0
ports:
- containerPort: 9200
name: http
- containerPort: 9300
name: transport
env:
- name: discovery.type
value: single-node
- name: DISABLE_SECURITY_PLUGIN
value: "true"
volumeMounts:
- name: data
mountPath: /usr/share/opensearch/data
resources:
requests:
memory: "1Gi"
cpu: "200m"
limits:
memory: "4Gi"
cpu: "1000m"
livenessProbe:
exec:
command:
- sh
- -c
- curl -s http://localhost:9200/_cluster/health
initialDelaySeconds: 30
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 3
readinessProbe:
exec:
command:
- sh
- -c
- curl -s http://localhost:9200/_cluster/health
initialDelaySeconds: 15
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 3
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 10Gi
---
apiVersion: v1
kind: Service
metadata:
name: opensearch
namespace: cameleer
spec:
clusterIP: None
selector:
app: opensearch
ports:
- port: 9200
targetPort: 9200
name: http
- port: 9300
targetPort: 9300
name: transport

91
deploy/postgres.yaml Normal file
View File

@@ -0,0 +1,91 @@
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: postgres
namespace: cameleer
spec:
serviceName: postgres
replicas: 1
selector:
matchLabels:
app: postgres
template:
metadata:
labels:
app: postgres
spec:
containers:
- name: postgres
image: timescale/timescaledb:latest-pg16
ports:
- containerPort: 5432
name: postgres
env:
- name: POSTGRES_DB
value: cameleer3
- name: POSTGRES_USER
valueFrom:
secretKeyRef:
name: postgres-credentials
key: POSTGRES_USER
- name: POSTGRES_PASSWORD
valueFrom:
secretKeyRef:
name: postgres-credentials
key: POSTGRES_PASSWORD
volumeMounts:
- name: data
mountPath: /var/lib/postgresql/data
resources:
requests:
memory: "1Gi"
cpu: "200m"
limits:
memory: "4Gi"
cpu: "1000m"
livenessProbe:
exec:
command:
- pg_isready
- -U
- cameleer
- -d
- cameleer3
initialDelaySeconds: 15
periodSeconds: 10
timeoutSeconds: 3
failureThreshold: 3
readinessProbe:
exec:
command:
- pg_isready
- -U
- cameleer
- -d
- cameleer3
initialDelaySeconds: 5
periodSeconds: 5
timeoutSeconds: 3
failureThreshold: 3
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 10Gi
---
apiVersion: v1
kind: Service
metadata:
name: postgres
namespace: cameleer
spec:
clusterIP: None
selector:
app: postgres
ports:
- port: 5432
targetPort: 5432
name: postgres

View File

@@ -22,17 +22,19 @@ spec:
- containerPort: 8081 - containerPort: 8081
env: env:
- name: SPRING_DATASOURCE_URL - name: SPRING_DATASOURCE_URL
value: "jdbc:ch://clickhouse:8123/cameleer3" value: "jdbc:postgresql://postgres:5432/cameleer3"
- name: SPRING_DATASOURCE_USERNAME - name: SPRING_DATASOURCE_USERNAME
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:
name: clickhouse-credentials name: postgres-credentials
key: CLICKHOUSE_USER key: POSTGRES_USER
- name: SPRING_DATASOURCE_PASSWORD - name: SPRING_DATASOURCE_PASSWORD
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:
name: clickhouse-credentials name: postgres-credentials
key: CLICKHOUSE_PASSWORD key: POSTGRES_PASSWORD
- name: OPENSEARCH_URL
value: "http://opensearch:9200"
- name: CAMELEER_AUTH_TOKEN - name: CAMELEER_AUTH_TOKEN
valueFrom: valueFrom:
secretKeyRef: secretKeyRef: