# k8s/temporal/temporal-values.yaml # Temporal — workflow engine for story-crater backend async task orchestration. # Chart: temporal/temporal from https://go.temporal.io/helm-charts # # Uses Cassandra for default store (workflow history/events) # Uses Elasticsearch for visibility store (namespace/workflow queries) # This is the chart's native, well-tested configuration. # ── Datastores configuration ──── # Disable auto-deployed PostgreSQL (we use external ddb for other services) postgresql: enabled: false # Enable Elasticsearch for visibility store (deployed to worker node, 2Gi/4Gi memory) elasticsearch: enabled: true scheme: http host: elasticsearch-master-headless port: 9200 version: v7 logLevel: error auth: enabled: false indices: visibility: temporal_visibility_v1 # Cassandra enabled for template validation; server.config overrides with actual hosts # Schema job template requires cassandra config to exist at top level cassandra: enabled: true replicas: 3 cluster: seedSize: 1 port: 9042 # Was landing 2 of 3 replicas on talos-cp-1 -- spread across nodes so a # single overloaded node can't stall gossip/join for the whole ring. affinity: podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 100 podAffinityTerm: labelSelector: matchLabels: app: cassandra release: temporal topologyKey: kubernetes.io/hostname # ── Disable schema auto-setup (will initialize manually) ───────── jobs: autoSetup: enabled: false # ── Temporal server config (Cassandra + Elasticsearch persistence) ────────────────────────────── server: replicaCount: 1 jobService: enabled: false # Spread frontend/history/matching/worker across nodes instead of letting # them stack on whichever node the scheduler prefers (was: 59 of ~80 # cluster pods on talos-cp-1 alone). History's ringpop gossip join was # timing out because 3 of its 4 peers sat on that overloaded node. affinity: podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 100 podAffinityTerm: labelSelector: matchLabels: app.kubernetes.io/instance: temporal topologyKey: kubernetes.io/hostname config: logLevel: "info" persistence: defaultStore: default visibilityStore: visibility numHistoryShards: 512 datastores: default: # Cassandra for workflow history and events driver: cassandra cassandra: hosts: "temporal-cassandra" port: 9042 keyspace: temporal user: user password: "" # Cassandra auth disabled in deployment replicationFactor: 3 consistency: default: consistency: local_quorum serialConsistency: local_serial service: type: ClusterIP # ── Temporal Web UI ──────────────────────────────────────────────────────── web: replicaCount: 1 service: type: ClusterIP # ── Ingress ──────────────────────────────────────────────────────── # Note: ingress is disabled here. Instead, we route via oauth2-proxy. # The ingress is applied separately as k8s/temporal/temporal-ingress-oauth2.yaml # which terminates TLS and routes to oauth2-proxy service. ingress: enabled: false # ── Monitoring ──────────────────────────────────────────────────────── prometheus: enabled: false