Skip to main content

Overview

Trino is a distributed SQL query engine that queries data where it lives. This template deploys a Trino cluster — one coordinator plus a scalable worker tier — that connects to PostgreSQL, MySQL, ClickHouse, MongoDB and many other sources through catalogs, and joins across them in a single query without copying any data. Databases you already run on Control Plane are reachable over internal DNS, and Iceberg tables in object storage are reachable through the Polaris template. Trino stores nothing itself, so the template has no volume set: a restart costs only the queries in flight, and uninstalling never touches the databases it queries.
This template deploys into an existing GVC that you already have — it does not create or manage a GVC. Every workload runs in each location of that GVC, so install Trino into a single-location GVC: coordinator and worker traffic happens on every query.

What Gets Created

The chart never creates, modifies or deletes the secrets you create yourself — they are referenced by name only.

Prerequisites

None for a default install. The image ships the tpch, tpcds, memory and jmx catalogs, so the cluster is queryable the moment it is ready. Two features need secrets that must exist before you install or upgrade with them on. Secrets are org-level, so no --gvc flag is involved.
1

Catalog credentials (to query your own data sources)

One secret per credential a catalog needs. Use an opaque secret for a single value, or a dictionary secret when one secret holds several values:
The sibling database templates already read their credentials from a dictionary secret with a password key, so you can reference that same secret instead of creating a new one. Set catalogs[].secrets[].secretName (and secretKey for a dictionary) to this name — see Catalogs.
2

Login secrets (to enable authentication and public access)

Two opaque secrets: a bcrypt password file with one user per line, and a random string every node shares once authentication is on:
Set auth.passwordFileSecretName and auth.sharedSecretName to these names — see Authentication.
A missing secret wedges the install rather than failing it. cpln helm install reports success, but a workload that references a secret that does not exist never starts — so cpln logs returns zero lines. The only place the missing secret is named is status.versions[].message:
Check RELEASE_NAME-trino-worker the same way. It is get-deployments — plain cpln workload get has no versions key. Create the missing secret and the deployment recovers on its own after several minutes, or run cpln workload force-redeployment RELEASE_NAME-trino --gvc GVC_NAME (and the same for the worker workload) to skip the wait.

Installation

A default install needs no values — it runs unauthenticated, reachable only from inside the GVC, with the built-in demo catalogs:
Add your own catalogs and authentication with a values file (-f) — see Configuration.

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

Image

One image runs both tiers. The chart is shipped and tested on Trino 483.

Coordinator

There is exactly one coordinator per cluster — open-source Trino supports no more.

Workers

Raise workers.replicas for more query capacity and to keep capacity through a rolling restart. For both tiers the chart refuses to render unless maxMemory is whole GiB and at least 2Gi, minMemory does not exceed maxMemory, and maxCpu:minCpu is at most 4:1; the error names the value to fix. Worker resources are only checked when workers.replicas is above 0.

JVM

The heap is this percentage of each tier’s maxMemory (allowed range 40–80). Trino derives its per-node query memory (30% of heap) and headroom (30% of heap) from it, so maxMemory is normally the only number you change. Capacity AI is off on both workloads, because the JVM sizes its heap once from the container limit at startup.

Catalogs

Each entry renders one secret and mounts one file at /etc/trino/catalog/NAME.properties on the coordinator and every worker. Credentials never go into properties: the file holds only a ${ENV:NAME} placeholder, and the secrets list injects the value from a secret you created as that environment variable. The chart rejects any entry that breaks these rules at render, before anything is installed. Worked entries for the sibling templates are in Connecting Data Sources.

Authentication

auth.enabled turns on password-file login on the coordinator and the shared secret the nodes use to authenticate to each other. Both secret names are required when it is on — create them first, as shown in Prerequisites.
Authentication and public access must be enabled together — the chart refuses either one alone. Trino refuses password logins over plain HTTP, so an internal-only cluster with authentication on could not be queried by anyone; and an unauthenticated Trino on the internet would expose every connected data source. With both on, clients sign in over the public HTTPS endpoint. Without authentication, the internal firewall is the boundary.

Access

none is rejected at render: the coordinator reaches itself through this same path, so it would fail every query. The worker tier always keeps its own firewall — only the coordinator and sibling workers may reach a worker, whatever you set here. Allow several minutes after changing an access setting before concluding it did not apply.

Connecting

Verify the cluster from inside the coordinator — the image ships the Trino CLI:
On a default internal-only install, open the Web UI through a tunnel and browse to http://localhost:8080/ui/; with no authentication configured, Trino asks only for a user name:
The tunnel to this template has not been exercised in a test install. Once authentication is on, use the public endpoint instead: Trino refuses password logins over the plain-HTTP tunnel and the internal address alike.

Connecting Data Sources

Point a catalog at any database Trino can reach. A sibling template in the same GVC is reachable at its fully qualified internal name, WORKLOAD_NAME.GVC_NAME.cpln.local:
Use the user name your database template was installed with in connection-user. With several catalogs configured, one statement spans all of them — including the built-in tpch data — and Trino performs the join itself:
Iceberg tables in object storage need a REST catalog, which this template does not bundle. Deploy the Polaris template against your bucket and add the iceberg catalog entry its page gives — Trino then creates, writes and queries Iceberg tables there. Hive and Delta Lake catalogs are not offered.

Operations

Adding or Changing a Catalog

Add the entry to your values and upgrade the release; create any secret it references first. Adding or removing a catalog changes both workloads, so they restart and the new catalog appears in SHOW CATALOGS:
The values file must use the chart’s nesting, exactly as the blocks in Configuration show. A flat dotted key is accepted without error and silently changes nothing. Editing the properties of an existing catalog changes only the content of its catalog secret, which a running replica does not re-read. After the upgrade, force a redeployment of both workloads:

Rotating a Catalog Credential

Change the value by applying the whole secret — cpln secret update does not change values. For a dictionary secret:
Keep every key the secret already has — the applied secret replaces its data. For an opaque secret use type: opaque with data.encoding: plain and data.payload: NEW-VALUE. A running replica keeps the old value until it restarts, so force a redeployment of RELEASE_NAME-trino and RELEASE_NAME-trino-worker as shown above. The same applies to the two login secrets.

Scaling and Availability

  • Workers are interchangeable: raise workers.replicas for capacity, and keep it at 2 or more if queries must keep running through a rolling restart. At the default of 1, a worker restart empties the execution tier for its duration.
  • The coordinator is a single point of failure — open-source Trino has one coordinator and no failover. Restarting it briefly interrupts all querying.
  • Queries are not retried. A query running on a node that restarts or is replaced fails and must be resubmitted by the client.
  • Single node — workers.replicas: 0 removes the worker workload and the coordinator executes queries itself. Suitable for small or development installs.

Troubleshooting

Cause: A catalog or login secret the workload references does not exist, so the container never starts.Fix: Read status.versions[].message with cpln workload get-deployments RELEASE_NAME-trino --gvc GVC_NAME -o yaml (and for RELEASE_NAME-trino-worker) — it names the missing secret. Create it; the deployment recovers on its own after several minutes, or force a redeployment.
Cause: The chart only renders authentication and public access together. The mirror message, publicAccess.enabled requires auth.enabled, means the opposite half is missing.Fix: Set both auth.enabled and publicAccess.enabled to true with both login secret names, or leave both off.
Cause: Authentication is on and the client connected over plain HTTP — the internal address or a port-forward tunnel. Trino accepts password logins only over HTTPS.Fix: Connect through the public canonical endpoint over HTTPS. For the JDBC driver that means port 443 with SSL=true.
Cause: The coordinator’s internal firewall does not admit the client. The client is outside the scope internalAccess.type allows — for example not listed under workload-list, or in another GVC under same-gvc.Fix: Add the client’s workload link to internalAccess.workloads, or widen internalAccess.type, and upgrade. Allow several minutes for the change to apply.
Cause: secrets[].secretKey does not match a key in the dictionary secret, a dictionary secret is referenced without secretKey, or the secret was rotated without a redeployment.Fix: Compare the key names with cpln secret reveal SECRET_NAME -o yaml, correct the catalog entry, and force a redeployment of both workloads.
Cause: Trino refuses to start on a catalog property it does not recognise, reporting Configuration property 'NAME' was not used.Fix: Find the property in the coordinator logs, then correct the properties block against the connector’s documentation page:
Cause: Each query gets 30% of a node’s heap, and the heap is jvm.maxRAMPercentage of maxMemory.Fix: Raise maxMemory on the tier doing the work first, then add workers. Raising jvm.maxRAMPercentage above about 75 makes it worse — the JVM needs the remainder outside the heap.

Important Notes

  • Authentication and public access are enabled together or not at all; with authentication on, every client signs in over the public HTTPS endpoint.
  • Never put a password in a catalog’s properties — reference it as ${ENV:NAME} from a secret you created before installing.
  • A rotated secret or an edited catalog takes effect only after a forced redeployment of both workloads.
  • The coordinator is a single point of failure and in-flight queries are not retried; keep workers.replicas at 2 or more for restart tolerance.
  • The built-in jmx catalog exposes JVM internals to anyone who can run a query.
  • Uninstalling removes only the cluster — the databases it queried and the secrets you created are left in place.

External References

Trino Documentation

Official Trino documentation

Connectors

Every available connector and its properties

JDBC Driver

Connect BI tools and applications over JDBC

Password File Authentication

How the bcrypt password file is used

Secrets in Properties Files

The ${ENV:NAME} substitution used by catalog credentials