Containerizes the momentum monolith and packages every run mode for
deployment in a single Kubernetes namespace, with PostgreSQL hosted in
the cluster.
- Dockerfile (python:3.11-slim, non-root, writable /app/data) + .dockerignore
- GitHub Actions workflow publishing to ghcr.io/fez5587/momentum-system
- Helm chart (deploy/helm/momentum):
* PostgreSQL StatefulSet + PVC (single source of truth; schema
auto-creates from storage/pg_schema.sql on first connect)
* App Deployment running run_live_paper.py with the embedded dashboard
(replicas: 1, Recreate; the dashboard's write endpoints need the
in-process TradingExecutionService) + Service/Ingress on 8010, plus a
wait-for-postgres initContainer
* CronJobs for journal / eod-replay / nightly-tune (US/Eastern via
spec.timeZone) sharing the app data PVC
* ConfigMap (tuning env) + Secret (DATABASE_URL/broker keys, existingSecret
supported); DATABASE_URL built from the in-cluster Postgres service
* Optional Grafana provisioned against the in-cluster Postgres
- deploy/README.md with install, secrets, and constraints
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JCVMm2AbmZvvxwLTX6UpNR
70 lines
2.7 KiB
Smarty
70 lines
2.7 KiB
Smarty
{{/* Base name, overridable. */}}
|
|
{{- define "momentum.name" -}}
|
|
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
|
|
{{- end -}}
|
|
|
|
{{/* Fully qualified release name. */}}
|
|
{{- define "momentum.fullname" -}}
|
|
{{- if .Values.fullnameOverride -}}
|
|
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}}
|
|
{{- else -}}
|
|
{{- $name := default .Chart.Name .Values.nameOverride -}}
|
|
{{- if contains $name .Release.Name -}}
|
|
{{- .Release.Name | trunc 63 | trimSuffix "-" -}}
|
|
{{- else -}}
|
|
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
|
|
{{- end -}}
|
|
{{- end -}}
|
|
{{- end -}}
|
|
|
|
{{/* Common labels. */}}
|
|
{{- define "momentum.labels" -}}
|
|
app.kubernetes.io/name: {{ include "momentum.name" . }}
|
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
|
helm.sh/chart: {{ printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" }}
|
|
{{- if .Chart.AppVersion }}
|
|
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
|
|
{{- end }}
|
|
{{- end -}}
|
|
|
|
{{/* Component-scoped selector labels. Call with (dict "ctx" . "component" "app"). */}}
|
|
{{- define "momentum.selectorLabels" -}}
|
|
app.kubernetes.io/name: {{ include "momentum.name" .ctx }}
|
|
app.kubernetes.io/instance: {{ .ctx.Release.Name }}
|
|
app.kubernetes.io/component: {{ .component }}
|
|
{{- end -}}
|
|
|
|
{{/* Names of shared resources. */}}
|
|
{{- define "momentum.postgresName" -}}{{ printf "%s-postgres" (include "momentum.fullname" .) }}{{- end -}}
|
|
{{- define "momentum.appName" -}}{{ printf "%s-app" (include "momentum.fullname" .) }}{{- end -}}
|
|
{{- define "momentum.grafanaName" -}}{{ printf "%s-grafana" (include "momentum.fullname" .) }}{{- end -}}
|
|
{{- define "momentum.configMapName" -}}{{ printf "%s-config" (include "momentum.fullname" .) }}{{- end -}}
|
|
{{- define "momentum.appDataPvcName" -}}{{ printf "%s-app-data" (include "momentum.fullname" .) }}{{- end -}}
|
|
|
|
{{/* Name of the Secret holding DB URL + broker keys (existing or chart-managed). */}}
|
|
{{- define "momentum.secretName" -}}
|
|
{{- if .Values.secrets.existingSecret -}}
|
|
{{- .Values.secrets.existingSecret -}}
|
|
{{- else -}}
|
|
{{- printf "%s-secrets" (include "momentum.fullname" .) -}}
|
|
{{- end -}}
|
|
{{- end -}}
|
|
|
|
{{/*
|
|
Resolve the Postgres password once: explicit value, else reuse the one already
|
|
stored in the chart-managed Secret (so upgrades don't rotate it), else generate.
|
|
*/}}
|
|
{{- define "momentum.postgresPassword" -}}
|
|
{{- if .Values.postgres.password -}}
|
|
{{- .Values.postgres.password -}}
|
|
{{- else -}}
|
|
{{- $existing := lookup "v1" "Secret" .Release.Namespace (printf "%s-secrets" (include "momentum.fullname" .)) -}}
|
|
{{- if and $existing $existing.data (index $existing.data "POSTGRES_PASSWORD") -}}
|
|
{{- index $existing.data "POSTGRES_PASSWORD" | b64dec -}}
|
|
{{- else -}}
|
|
{{- randAlphaNum 24 -}}
|
|
{{- end -}}
|
|
{{- end -}}
|
|
{{- end -}}
|