How It Works
Whenclickhouse.bundled.objectStorage is enabled, the chart configures three ClickHouse disks and a hot_cold storage policy on every replica:
The Ingester creates every telemetry table with
storage_policy = 'hot_cold' and a TTL that moves data parts to the cold volume once they are older than hotStorageDays (default 1 day). Reads are transparent: queries over older ranges are served through the cache, falling back to object storage on cache misses. Retention deletes continue to work unchanged on both tiers.
Provision the Bucket and Credentials
Provision an S3-compatible bucket (or a prefix within one) for ClickHouse before installing. The endpoint must be reachable from the hub cluster, and the credentials should be scoped to that bucket or prefix. If the endpoint uses a private CA, include it in the chart’strustedCAs material.
Create the credentials Secret in the hub namespace:
Configure Helm Values
endpoint is passed to ClickHouse’s S3 disk as-is, so it must contain the bucket name and any prefix. Path-style URLs (https://host:port/bucket/prefix/) work for MinIO and most self-hosted S3 implementations; virtual-hosted style (https://bucket.s3.region.amazonaws.com/prefix/) works for AWS. Leave region empty for implementations that do not use it.
Azure Blob Storage is also supported with provider: azureBlob; it reads account_name and account_key from the same Secret and takes azureBlob.storageAccountUrl and azureBlob.containerName instead of the s3 block.
On startup, each ClickHouse replica verifies it can write to the object store and fails loudly if the endpoint or credentials are wrong, so misconfiguration surfaces immediately rather than at the first TTL move.
Example: In-Cluster MinIO
For evaluation clusters, or air-gapped environments without an existing object store, an in-cluster MinIO provides an S3-compatible endpoint that exercises the exact sameprovider: s3 path. The single-replica setup below is suitable for testing; for production MinIO, follow MinIO’s own distributed-deployment guidance.
Create the namespace and root credentials, and give ClickHouse the same credentials:
Verify the Cold Tier
After installation, confirm each replica sees all three disks:hot_pvc (Local), cold_object (ObjectStorage), and cold_cache (ObjectStorage).
Confirm the high-volume telemetry fact tables were created on the tiered policy:
hot_cold. If they report default, object storage was enabled after the tables were created; see the warning above.
Other metoro_ tables are expected to stay on the default policy: the _distributed query wrappers store no data themselves, and small side tables such as metoro_profile_stacks, metoro_metric_metadata, and metoro_k8s_object_current hold compact latest-state data that intentionally stays on the PVC.
Once the installation has been ingesting for longer than hotStorageDays, confirm parts are moving to the cold tier:
cold_cache are object-backed (the cache disk fronts the object disk), and objects will be visible in the bucket under the configured prefix. Queries over old time ranges in the Metoro UI are served through the cache transparently.
Operational Notes
- The local cache (
cacheMaxSize) is allocated per replica on the same PVC as the hot data; include it when sizing PVCs, see Local Disk Cache For Object Storage. - Growing telemetry volume grows the object store, not the PVCs, so Upscale Hot PVC is only needed when ingest volume increases, not as retention accumulates.
- Object-storage credentials rotate by updating the Secret and restarting the ClickHouse pods one at a time; see Taking Pods Offline.
