Overview
Prometheus is the standard open-source metrics database. This template deploys a single Prometheus server with the remote-write receiver enabled and a durable TSDB volume: your own senders push metrics in via Prometheusremote_write (or Prometheus scrapes targets you configure), and anything that speaks PromQL — your own Grafana, dashboards, scripts — queries them back. An optional co-located Thanos sidecar (on by default) exposes the Store API for a Thanos Query tier and can upload TSDB blocks to your object bucket for long-term durability.
This is a self-hosted metrics store for your own metrics from your own sources. It is separate from — and not a replacement for — Control Plane’s built-in observability, which continues to collect and dashboard your workloads’ metrics natively.
Architecture
- Prometheus — A single-replica stateful workload. Scrape and remote-write ingest plus PromQL query, all on port
9095— Prometheus’s usual port9090is reserved by the platform, so this template runs it on9095instead. High availability is achieved by installing the template twice (see High Availability). - Thanos sidecar (optional, default on) — A second container in the same workload. Serves the Thanos Store API (gRPC) on
10901and HTTP health/metrics on10902, and uploads TSDB blocks to object storage when enabled. - Object storage (optional) — The sidecar ships completed TSDB blocks to your S3, GCS, or S3-compatible bucket; history beyond local retention lives in the bucket.
What Gets Created
- Stateful Prometheus Workload — Serves remote-write ingest and PromQL query on port
9095; includes the Thanos sidecar container when enabled. - Volume Set — 20 GiB at
/prometheusfor the TSDB, shared read-only with the sidecar. - Secrets — An opaque secret holding the rendered
prometheus.yml, mounted as a file; a second secret holds the Thanos bucket configuration when object storage is enabled. - Identity & Policy — An identity bound to the workload with
revealaccess to exactly the template’s secrets (plus any remote-write password secrets you name), and cloud access scoped to exactly your bucket (AWS and GCP backends) when object storage is enabled.
This template does not create a GVC. You must deploy it into an existing GVC.
Prerequisites
None for a default install. Two optional features have prerequisites:- Remote write with basic auth — an opaque secret per endpoint holding the password (set
remoteWrite[].basicAuth.passwordSecretNameto its name). The secret must exist before install — the template references it by name only and never stores the password in values. - Object storage (
thanos.objectStorage) — an existing bucket and access setup for it. Complete the steps for your chosen backend below.
- AWS S3
- Google Cloud Storage
- S3-compatible (MinIO, R2, Wasabi)
AWS S3 uses a Control Plane cloud identity — no credentials are stored; the workload’s identity vends temporary credentials at runtime.
1
Create a bucket
Create an S3 bucket. Set
thanos.objectStorage.aws.bucket and thanos.objectStorage.aws.region to match.2
Set up a Cloud Account
If you do not have one, create a Cloud Account for your AWS account. Set
thanos.objectStorage.aws.cloudAccountName to its name.3
Create a bucket-scoped IAM policy
Create an AWS IAM policy granting
s3:ListBucket, s3:GetObject, s3:PutObject, and s3:DeleteObject on the bucket and its objects (the template’s README includes the full policy JSON). Set thanos.objectStorage.aws.policyName to the policy’s name (bare name, not ARN).UI
Browse, install, and manage templates visually
CLI
Manage templates from your terminal
Terraform
Declare templates in your Terraform configurations
Pulumi
Declare templates in your Pulumi programs
Configuration
The defaultvalues.yaml for this template:
Resources
image— The Prometheus container image.resources— CPU and memory for the Prometheus container. Memory scales with the number of active series.
TSDB and Retention
retention.time— How long samples are kept on the local volume (e.g.15d,30d,1y).retention.size— Optional local size cap (e.g.15GB); empty means no cap.volumeset.capacity— Volume size in GiB for the TSDB at/prometheus.
Metrics
scrapeInterval— Global scrape interval, applied to the self-scrape and anyextraScrapeConfigsjobs.externalLabels— Identity labels attached to all uploaded and forwarded series. The template always injects a baselineprometheus: <workload-name>label; your keys merge over it (overridingprometheusis allowed — required for the HA pair recipe).extraScrapeConfigs— A raw YAML list of additional Prometheusscrape_configsentries, for example:
Remote Write
remoteWrite pushes this server’s metrics to any Prometheus-remote-write-compatible store — for example this catalog’s Grafana Mimir template — and is the recommended shape when the Thanos sidecar is disabled:
passwordSecretName names an opaque secret you create before install; the template mounts it as a password_file and grants the workload identity reveal on exactly that secret.
Thanos Sidecar and Object Storage
thanos.sidecar.enabled— Runs the Thanos sidecar next to Prometheus, exposing the Store API (gRPC10901) so a Thanos Query tier can fan out queries to this server. Disable it when you forward metrics withremoteWriteinstead.thanos.objectStorage.enabled— The sidecar uploads completed TSDB blocks to your bucket (recommended for production durability). Requiresthanos.sidecar.enabled.thanos.objectStorage.blockDuration— Advanced: the TSDB block interval; the template pins min and max block duration to this value, which disables local compaction so blocks ship cleanly.
thanos.objectStorage.type to aws, gcp, or minio, and configure that block. AWS and GCP use a Control Plane cloud identity — no credentials are stored. See Prerequisites for the per-backend setup steps.
Internal Access
Prometheus is internal-only by design — it has no built-in authentication, so this template never exposes a public endpoint.internalAccess.type controls which workloads can reach it:
workloads entries take the form //gvc/GVC_NAME/workload/WORKLOAD_NAME and may name workloads in other GVCs — use this (or same-org) to allow a Thanos Query tier in another GVC to reach the Store API.
To serve clients outside Control Plane, front Prometheus with your own authenticating proxy behind a custom domain — that proxy is yours to build and operate; the template does not provide one.
Connecting
Prometheus serves everything on port9095 — its usual port 9090 is reserved by the platform, so point senders and datasources at 9095:
To push metrics here from another Prometheus:
internalAccess (same-org, or workload-list naming the query workload). Cross-location internal traffic incurs egress charges — co-locate the query tier with its stores where practical.
High Availability
Prometheus has no cluster mode, so this template deliberately has no replicas knob — a second replica of the same install would just double-count. The upstream HA pattern is two independent, identically-configured instances deduplicated at query time. Install the template twice (e.g. releasesprom-a and prom-b) with identical values except externalLabels:
--query.replica-label=replica. Overriding prometheus to a shared value is required so the two label sets differ only in replica.
Important Notes
- Prometheus has no built-in authentication, so this template never exposes a public endpoint. To serve clients outside Control Plane, front it with your own authenticating proxy behind a custom domain.
- Remote-write password secrets must exist before install — a missing
passwordSecretNamesecret wedges the deployment waiting on it. - Config changes ship via
helm upgrade(workload redeploy) — there is no hot reload. - With object storage enabled, keep
retention.timeat least 3×blockDuration(the default15d/2hsatisfies this) — the sidecar needs blocks on the local volume long enough to upload them. - The TSDB survives reinstall — the volume is retained with a final snapshot, and local data resumes when a new install binds it.
- After a restart, readiness can take minutes on a large TSDB — WAL replay holds the readiness endpoint at 503; this is normal recovery, not a failure.
External References
Prometheus Documentation
Official Prometheus documentation
Prometheus Configuration
Configuration reference, including scrape_configs
Prometheus remote_write
Remote-write tuning and best practices
Thanos Sidecar
Store API and block-upload sidecar reference
Prometheus (GitHub)
Source code and releases
Prometheus Template
View the source files, default values, and chart definition