From a344be3a49b6b2f45d51e02cd5819c7ccb1ca9cf Mon Sep 17 00:00:00 2001 From: hsiegeln <37154749+hsiegeln@users.noreply.github.com> Date: Mon, 16 Mar 2026 18:58:35 +0100 Subject: [PATCH] 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 --- Dockerfile | 3 +- deploy/opensearch.yaml | 84 ++++++++++++++++++++++++++++++++++++++ deploy/postgres.yaml | 91 ++++++++++++++++++++++++++++++++++++++++++ deploy/server.yaml | 12 +++--- 4 files changed, 184 insertions(+), 6 deletions(-) create mode 100644 deploy/opensearch.yaml create mode 100644 deploy/postgres.yaml diff --git a/Dockerfile b/Dockerfile index bd3a32b9..989e1688 100644 --- a/Dockerfile +++ b/Dockerfile @@ -18,9 +18,10 @@ FROM eclipse-temurin:17-jre WORKDIR /app 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_PASSWORD=cameleer_dev +ENV OPENSEARCH_URL=http://opensearch:9200 EXPOSE 8081 ENTRYPOINT exec java -jar /app/server.jar diff --git a/deploy/opensearch.yaml b/deploy/opensearch.yaml new file mode 100644 index 00000000..b2352ab2 --- /dev/null +++ b/deploy/opensearch.yaml @@ -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 diff --git a/deploy/postgres.yaml b/deploy/postgres.yaml new file mode 100644 index 00000000..f0b6de9b --- /dev/null +++ b/deploy/postgres.yaml @@ -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 diff --git a/deploy/server.yaml b/deploy/server.yaml index 34d3e6ae..42c92d76 100644 --- a/deploy/server.yaml +++ b/deploy/server.yaml @@ -22,17 +22,19 @@ spec: - containerPort: 8081 env: - name: SPRING_DATASOURCE_URL - value: "jdbc:ch://clickhouse:8123/cameleer3" + value: "jdbc:postgresql://postgres:5432/cameleer3" - name: SPRING_DATASOURCE_USERNAME valueFrom: secretKeyRef: - name: clickhouse-credentials - key: CLICKHOUSE_USER + name: postgres-credentials + key: POSTGRES_USER - name: SPRING_DATASOURCE_PASSWORD valueFrom: secretKeyRef: - name: clickhouse-credentials - key: CLICKHOUSE_PASSWORD + name: postgres-credentials + key: POSTGRES_PASSWORD + - name: OPENSEARCH_URL + value: "http://opensearch:9200" - name: CAMELEER_AUTH_TOKEN valueFrom: secretKeyRef: