Skip to Content
MaestroInstallationHelm Chart Reference

Helm Chart Reference

Every field in values.yaml for the maestro Helm chart. Defaults shown are from the chart (charts/maestro/values.yaml).

Image

A single unified image runs both workloads. The chart picks the entrypoint.

image: repository: public.ecr.aws/cardinalhq.io/maestro tag: "" # empty → Chart.appVersion (recommended: pin to a released tag) pullPolicy: IfNotPresent
FieldDefaultNotes
image.repositorypublic.ecr.aws/cardinalhq.io/maestroAlso mirrored to ghcr.io/cardinalhq/maestro
image.tag"" (falls back to Chart.appVersion)Pin this. Do not let it float.
image.pullPolicyIfNotPresentKubernetes image pull policy

Maestro workload

maestro: enabled: true replicas: 1 port: 4200 resources: {} labels: {} annotations: {} nodeSelector: {} tolerations: [] affinity: {} env: [] # extra env vars (auth, LLM, etc.) extraVolumes: [] extraVolumeMounts: []
FieldDefaultNotes
maestro.enabledtrueDisable only if you want to run the gateway alone
maestro.replicas1Maestro is stateless but session cookies are not sticky-bound — keep at 1 unless you’ve set up shared session storage
maestro.port4200Container port; also the Service port
maestro.env[]This is where you put OIDC, LLM, and MAESTRO_BASE_URL vars. See Environment variables
maestro.extraVolumes / extraVolumeMounts[]Mount extra config or certs into the pod

The Maestro pod runs with readOnlyRootFilesystem: true. A tmp emptyDir is mounted at /tmp. If you need additional writable paths (e.g., ontology workspaces), add them via extraVolumes + extraVolumeMounts.

An initContainer waits for the MCP gateway service to accept connections before Maestro starts.

MCP Gateway workload

mcpGateway: enabled: true replicas: 1 port: 8080 debugPort: 9090 apiKey: "" resources: {} labels: {} annotations: {} nodeSelector: {} tolerations: [] affinity: {} env: []
FieldDefaultNotes
mcpGateway.enabledtrueMust be enabled for integrations to work
mcpGateway.port8080Maestro reaches the gateway at http://<release>-mcp-gateway:8080
mcpGateway.debugPort9090pprof / debug endpoints — do not expose externally
mcpGateway.apiKey""Injected as MCP_API_KEY. Leave empty for in-cluster trust; set it if the gateway is reachable beyond the namespace
mcpGateway.env[]Extra env for the gateway (e.g. AWS_REGION for Bedrock embeddings)

Database

Required. Maestro will not start without it.

database: secretName: "pg-credentials" create: true passwordKey: "MAESTRO_DB_PASSWORD" host: "" # required port: 5432 name: "maestro" username: "maestro" password: "" # only used when create: true sslMode: "require"
FieldDefaultNotes
database.createtrueWhen true, the chart creates a Secret named <release>-<secretName> with password base64-encoded. In prod, set to false and manage the secret yourself (SealedSecrets, External Secrets, etc.)
database.secretNamepg-credentialsWhen create: true, gets prefixed with the release name. When create: false, used verbatim
database.passwordKeyMAESTRO_DB_PASSWORDKey within the secret
database.host""Required. PostgreSQL hostname
database.port5432
database.namemaestroDatabase name (must exist; Maestro does not create it)
database.usernamemaestro
database.sslModerequireOne of disable, require, verify-ca, verify-full

The chart synthesizes MAESTRO_DATABASE_URL from these fields and injects it into both workloads — you do not need to set it yourself.

Ingress

ingress: enabled: false className: "" host: "" annotations: {} tls: []

The built-in Ingress is a minimal networking.k8s.io/v1 object that points at the Maestro service. It works for NGINX, Traefik, or anything that honors ingressClassName. If you need more control (IngressRoute, Gateway API, multiple hosts), disable this and create your own routing resource — the Maestro service is <release>-maestro on port 4200.

Service account

serviceAccount: create: true name: "" annotations: {}
FieldDefaultNotes
serviceAccount.createtrueCreates the SA used by both workloads
serviceAccount.name""Override the generated name
serviceAccount.annotations{}Add IRSA annotation here for Bedrock. See AWS Bedrock

Global

Applied to both workloads.

global: imagePullSecrets: [] env: [] # env vars merged into both containers labels: {} annotations: {}
FieldDefaultNotes
global.imagePullSecrets[]List of secret names for pulling from private registries
global.env[]Env vars that apply to both Maestro and the gateway. Use for AWS_REGION, tracing config, etc.
global.labels{}Merged into every resource’s labels
global.annotations{}Merged into every resource’s annotations

Scheduling fields (nodeSelector, tolerations, affinity) can also be set at the global level and are merged with per-workload overrides.

Reach out to support@cardinalhq.io for support or to ask questions not answered in our documentation.

Last updated on