pip install ragleap-app-chart package. For the hosted business platform (AI Office, WhatsApp/Voice bots, billing), see docs.ragleap.com instead.
ragleap-app-chart
A generic, reusable Helm chart for deploying arbitrary services to Kubernetes — built by RagLeap, but doesn't know or care what RagLeap is. Point it at your own app via an arbitrary services: list.
Install
The Python package itself ships no functional code — it exists so this content can be versioned and released through the same PyPI pipeline as the other RagLeap packages. The real deliverable is the helm/ chart.
pip install ragleap-app-chart # or, with uv uv add ragleap-app-chart
What's inside
Each entry under a services: list in values.yaml renders its own Deployment, Service, and — conditionally — PVC, NetworkPolicy, and Ingress, via Helm range loops. Nothing is hardcoded to a specific app.
deployment.yamlinitChown flag renders a one-time root fix-permissions init container using the service's own declared securityContext.runAsUser.service.yamlpvc.yamlpersistent: true. Mount path is currently fixed at /data — see Known limitations.networkpolicy.yamldependsOn entries.ingress.yamlexpose: true, with cert-manager TLS via a configurable ClusterIssuer.Secure by default
Per-service resources and securityContext overrides, falling back to chart-level defaultResources/defaultSecurityContext when a service omits its own.
defaultSecurityContext: runAsNonRoot: true allowPrivilegeEscalation: false readOnlyRootFilesystem: false # many images need write access; override per-service to true where possible
Live verification — 2 real bugs found and fixed
First helm install against a real kind cluster, using the chart's own default example (web + postgres) — the genericity proof the design proposal explicitly requires: "proven against a non-RagLeap toy app." Neither bug was caught by helm lint/helm template alone.
- runAsNonRoot without runAsUser rejected postgres:16 outright. The default image runs as root before its entrypoint drops privileges internally — same bug class found in
ragleap-opsthe same day. Fixed generically: the opt-ininitChownflag uses each service's own declared UID, not a hardcoded one. - Hardcoded /data mount path vs. postgres's real data directory. The official
postgresimage defaults to/var/lib/postgresql/data, not/data— without an explicitPGDATAoverride, data would have silently NOT persisted to the actual PVC.
After both fixes: postgres reached 1/1 Running, 0 restarts sustained. Data persistence independently confirmed via SHOW data_directory; → /data/pgdata, not just pod status.
Known limitations
Drawn from the real live-cluster test — including a real risk the chart doesn't yet guard against automatically.
- The hardcoded /data mount path is a real generic risk, not just a postgres-specific quirk. Any persistent service whose image doesn't default its data directory to
/dataneeds an explicit env override — the chart does not currently warn or validate this. - initChown requires the service to also declare its own securityContext.runAsUser. If a service sets
initChown: truewithoutrunAsUser, the rendered chown command would be malformed. Not currently validated — would fail at apply-time, not before. - Not part of RagLeap Core's numbered ecosystem sequence. This is a deliberately separate track from packages like
ragleap-ops— seeGENERIC-K8S-CHART-PROPOSAL.mdin the repo root for the design rationale.