From c587a707a665b1d2a95854363d4ed81add615303 Mon Sep 17 00:00:00 2001 From: Hermes DevOps Date: Wed, 27 May 2026 03:37:54 +0000 Subject: [PATCH 1/2] feat(redis): add persistent volume for trading-redis Replace emptyDir with 10Gi PVC (ReadWriteOnce) so hot cache survives pod restarts. --- .../trading-platform/redis-cluster.yaml | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/apps/base/customer1/trading-platform/redis-cluster.yaml b/apps/base/customer1/trading-platform/redis-cluster.yaml index fadd4d4..6cf6d98 100644 --- a/apps/base/customer1/trading-platform/redis-cluster.yaml +++ b/apps/base/customer1/trading-platform/redis-cluster.yaml @@ -1,5 +1,19 @@ # Redis single-instance for trading platform caching apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: trading-redis-pvc + namespace: customer1 + labels: + app: trading-redis +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 10Gi +--- +apiVersion: v1 kind: Service metadata: name: trading-redis @@ -100,4 +114,5 @@ spec: configMap: name: trading-redis-config - name: data - emptyDir: {} + persistentVolumeClaim: + claimName: trading-redis-pvc From e24e82107d8bc3cc81553ab3087c98229308dc70 Mon Sep 17 00:00:00 2001 From: Hermes DevOps Date: Wed, 27 May 2026 03:41:03 +0000 Subject: [PATCH 2/2] feat: add solana-ingester deployment for real-time market data - Create solana-ingester Deployment + Service in trading-platform/ (uses same data-service image, runs WebSocket ingester mode) - Add solana-ingester ConfigMap (HELIUS_RPC_ENDPOINT, JUPITER_API_URL, KAFKA_BROKER, KAFKA_TOPIC) - Add helius-api-key and jupiter-api-key placeholders to trading-secrets.yaml (TODO: replace with real values and re-encrypt with SOPS) - Update kustomization to include new resources --- .../configmaps/kustomization.yaml | 1 + .../configmaps/solana-ingester-config.yaml | 11 +++ .../trading-platform/kustomization.yaml | 1 + .../secrets/trading-secrets.yaml | 3 + .../solana-ingester/deployment.yaml | 81 +++++++++++++++++++ .../solana-ingester/kustomization.yaml | 6 ++ .../solana-ingester/service.yaml | 15 ++++ 7 files changed, 118 insertions(+) create mode 100644 apps/base/customer1/trading-platform/configmaps/solana-ingester-config.yaml create mode 100644 apps/base/customer1/trading-platform/solana-ingester/deployment.yaml create mode 100644 apps/base/customer1/trading-platform/solana-ingester/kustomization.yaml create mode 100644 apps/base/customer1/trading-platform/solana-ingester/service.yaml diff --git a/apps/base/customer1/trading-platform/configmaps/kustomization.yaml b/apps/base/customer1/trading-platform/configmaps/kustomization.yaml index e34cabf..40383aa 100644 --- a/apps/base/customer1/trading-platform/configmaps/kustomization.yaml +++ b/apps/base/customer1/trading-platform/configmaps/kustomization.yaml @@ -5,4 +5,5 @@ resources: - data-service-config.yaml - execute-service-config.yaml - news-service-config.yaml + - solana-ingester-config.yaml - dashboard-config.yaml diff --git a/apps/base/customer1/trading-platform/configmaps/solana-ingester-config.yaml b/apps/base/customer1/trading-platform/configmaps/solana-ingester-config.yaml new file mode 100644 index 0000000..5992599 --- /dev/null +++ b/apps/base/customer1/trading-platform/configmaps/solana-ingester-config.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: trading-solana-ingester-config + namespace: customer1 +data: + HELIUS_RPC_ENDPOINT: "https://mainnet.helius-rpc.com" + JUPITER_API_URL: "https://quote-api.jup.ag/v6" + KAFKA_BROKER: "trading-kafka.customer1.svc.cluster.local:9092" + KAFKA_TOPIC: "solana-market-data" + LOG_LEVEL: "info" diff --git a/apps/base/customer1/trading-platform/kustomization.yaml b/apps/base/customer1/trading-platform/kustomization.yaml index 66f6c6f..121a9f0 100644 --- a/apps/base/customer1/trading-platform/kustomization.yaml +++ b/apps/base/customer1/trading-platform/kustomization.yaml @@ -6,6 +6,7 @@ resources: - data-service - execute-service - news-service + - solana-ingester - dashboard - configmaps - secrets diff --git a/apps/base/customer1/trading-platform/secrets/trading-secrets.yaml b/apps/base/customer1/trading-platform/secrets/trading-secrets.yaml index 862656d..417e23d 100644 --- a/apps/base/customer1/trading-platform/secrets/trading-secrets.yaml +++ b/apps/base/customer1/trading-platform/secrets/trading-secrets.yaml @@ -10,6 +10,9 @@ stringData: market-data-api-key: ENC[AES256_GCM,data:2x2vPbOu/T+4albtkeRrktBffX1i06vXQmnn31685g==,iv:LqfpNmK6d9tt2MeaaozI+PVim8KUK8TflEalSxptfjM=,tag:Tan91JSeh5aUhGiExns4PQ==,type:str] #ENC[AES256_GCM,data:jVRQi+JQNlDUQ+bCe189YrOcsXjYYTGF,iv:SnCbB2w1jnPnXqWGPEivK/b9bWnYA6qL1Xkx6n8XzQ8=,tag:SYJbW0Aea/evPgvGNCqw9Q==,type:comment] service-auth-token: ENC[AES256_GCM,data:Xrqq82eI5obC86s+FJpi4DbX9+hDdTlYdmfL6DlW,iv:lDhfIuT+On7W6Xk36FKw7fE7zBheRPaMZwQBn7DF5qc=,tag:CdE0OWzQ9OLkSsDL8gq9gA==,type:str] + # TODO: replace placeholders and run `sops -e --in-place trading-secrets.yaml` + helius-api-key: "CHANGE_ME_helius_api_key" + jupiter-api-key: "CHANGE_ME_jupiter_api_key" sops: age: - recipient: age1uuxf066xuuqgvjppxfcmqkwfcufnwp3wcwnl9h20g9k4l8nkw9jsaungf7 diff --git a/apps/base/customer1/trading-platform/solana-ingester/deployment.yaml b/apps/base/customer1/trading-platform/solana-ingester/deployment.yaml new file mode 100644 index 0000000..d08dc7b --- /dev/null +++ b/apps/base/customer1/trading-platform/solana-ingester/deployment.yaml @@ -0,0 +1,81 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: trading-solana-ingester + namespace: customer1 + labels: + app: trading-solana-ingester +spec: + replicas: 1 + strategy: + type: Recreate + selector: + matchLabels: + app: trading-solana-ingester + template: + metadata: + labels: + app: trading-solana-ingester + annotations: + checksum/config: trading-solana-ingester-config + spec: + terminationGracePeriodSeconds: 30 + securityContext: + runAsNonRoot: true + runAsUser: 1000 + fsGroup: 1000 + containers: + - name: solana-ingester + image: ghcr.io/sirius0xdev/trading-data-service:latest + imagePullPolicy: Always + args: + - solana-ingester + ports: + - containerPort: 8002 + name: http + resources: + requests: + cpu: 100m + memory: 128Mi + limits: + cpu: 500m + memory: 512Mi + securityContext: + allowPrivilegeEscalation: false + readOnlyRootFilesystem: true + capabilities: + drop: + - ALL + envFrom: + - configMapRef: + name: trading-solana-ingester-config + env: + - name: HELIUS_API_KEY + valueFrom: + secretKeyRef: + name: trading-platform-secrets + key: helius-api-key + - name: JUPITER_API_KEY + valueFrom: + secretKeyRef: + name: trading-platform-secrets + key: jupiter-api-key + startupProbe: + httpGet: + path: /health + port: 8002 + initialDelaySeconds: 15 + periodSeconds: 10 + failureThreshold: 30 + livenessProbe: + httpGet: + path: /health + port: 8002 + initialDelaySeconds: 30 + periodSeconds: 30 + readinessProbe: + httpGet: + path: /health + port: 8002 + initialDelaySeconds: 5 + periodSeconds: 10 diff --git a/apps/base/customer1/trading-platform/solana-ingester/kustomization.yaml b/apps/base/customer1/trading-platform/solana-ingester/kustomization.yaml new file mode 100644 index 0000000..5b98e94 --- /dev/null +++ b/apps/base/customer1/trading-platform/solana-ingester/kustomization.yaml @@ -0,0 +1,6 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +resources: + - deployment.yaml + - service.yaml diff --git a/apps/base/customer1/trading-platform/solana-ingester/service.yaml b/apps/base/customer1/trading-platform/solana-ingester/service.yaml new file mode 100644 index 0000000..0a01475 --- /dev/null +++ b/apps/base/customer1/trading-platform/solana-ingester/service.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Service +metadata: + name: trading-solana-ingester + namespace: customer1 + labels: + app: trading-solana-ingester +spec: + selector: + app: trading-solana-ingester + ports: + - port: 80 + targetPort: 8002 + name: http + type: ClusterIP