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
This commit is contained in:
Hermes DevOps 2026-05-27 03:41:03 +00:00 committed by Hermes Agent
parent c587a707a6
commit e24e82107d
7 changed files with 118 additions and 0 deletions

View file

@ -5,4 +5,5 @@ resources:
- data-service-config.yaml - data-service-config.yaml
- execute-service-config.yaml - execute-service-config.yaml
- news-service-config.yaml - news-service-config.yaml
- solana-ingester-config.yaml
- dashboard-config.yaml - dashboard-config.yaml

View file

@ -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"

View file

@ -6,6 +6,7 @@ resources:
- data-service - data-service
- execute-service - execute-service
- news-service - news-service
- solana-ingester
- dashboard - dashboard
- configmaps - configmaps
- secrets - secrets

View file

@ -10,6 +10,9 @@ stringData:
market-data-api-key: ENC[AES256_GCM,data:2x2vPbOu/T+4albtkeRrktBffX1i06vXQmnn31685g==,iv:LqfpNmK6d9tt2MeaaozI+PVim8KUK8TflEalSxptfjM=,tag:Tan91JSeh5aUhGiExns4PQ==,type:str] 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] #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] 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: sops:
age: age:
- recipient: age1uuxf066xuuqgvjppxfcmqkwfcufnwp3wcwnl9h20g9k4l8nkw9jsaungf7 - recipient: age1uuxf066xuuqgvjppxfcmqkwfcufnwp3wcwnl9h20g9k4l8nkw9jsaungf7

View file

@ -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

View file

@ -0,0 +1,6 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- deployment.yaml
- service.yaml

View file

@ -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