Installing into a new cluster
The full install reference — sizing modes, ingress, autoscaling, and monitoring.
If you just want telark running, the Quickstart is shorter. This page is the reference: what the one command actually installs, and every flag worth knowing before you run it in production.
The command
helm install telark oci://ghcr.io/telark/charts/telark -n telark --create-namespaceOne release installs the services, the custom resource definitions,
the bundled policy engine, the coordination and messaging layers, and
the dashboard. The CRDs are a bundled subchart — there is no separate
CRD step and no bootstrap chart to run first. They carry
helm.sh/resource-policy: keep, so they survive helm uninstall.
Managing CRDs out of band? --set crds.enabled=false.
Everything is configured with --set key=value on the same command
line. Helm does not remember those flags across upgrades — re-pass
them on every helm upgrade.
Sizing modes
app.mode sizes every telark service from a single flag: replicas,
resource requests, client rate limits, and PodDisruptionBudgets.
| Mode | Replicas | What it changes |
|---|---|---|
minimal | 1 | Dev, demos, evaluation. No disruption budgets. Smallest resource requests. |
standard (default) | 2 | Small-to-mid production. Disruption budgets on. |
performance | 3 | Large clusters. Autoscaling on automatically (min 3, max 5). Requires a ReadWriteMany storage class for the exporter. |
helm install telark oci://ghcr.io/telark/charts/telark -n telark --create-namespace \
--set app.mode=performance \
--set app.persistence.storageClass=<rwx-class>app.mode sizes telark's own services only. Helm resolves a
subchart's values before the mode is known, so the bundled
dependencies — the policy engine, the coordination layer, the event
stream, metrics — ship fixed production-grade defaults owned by the
chart, identical in every mode. There is nothing to tune there.
App flags
| Flag | Default | Description |
|---|---|---|
app.mode | standard | Sizing mode (above). |
app.name | telark | Identity prefix for every resource name and API group. |
app.namespace | telark | Install namespace. |
app.image.registry | telark | Registry / org hosting the service images. |
app.image.pullPolicy | Always | Image pull policy. |
app.image.pullSecrets | [] | Pull secrets, if you mirror the images privately. |
app.persistence.size | 10Gi | Exporter snapshot PVC size. |
app.persistence.storageClass | "" | "" uses the cluster default. performance needs a ReadWriteMany class. |
app.persistence.accessMode | ReadWriteOnce | Exporter PVC access mode. |
app.crdGuard.enabled | false | Admission guard: only the owning service accounts may write telark custom resources. |
app.crdGuard.enforce | false | With the guard on, false audits and true rejects. |
app.auth.bootstrap.admins[0] | contact@telark.io | Emails granted Admin on first login. Indexed: [0], [1], … |
app.auth.passkey.selfRegistration | "true" | "false" blocks new passkey registration; you then need a bootstrap admin. |
Ingress (optional, off by default)
Port-forwarding is enough to evaluate telark. For a real hostname and TLS, turn the Ingress on — you need an ingress controller already in the cluster.
helm install telark oci://ghcr.io/telark/charts/telark -n telark --create-namespace \
--set ingress.enabled=true \
--set ingress.className=nginx \
--set ingress.host=telark.example.com| Key | Default | Description |
|---|---|---|
ingress.enabled | false | Create an Ingress for the dashboard. |
ingress.className | "" | IngressClass, e.g. nginx. |
ingress.host | "" | Hostname. "" matches any host. |
ingress.service | ui | Which services.<key> to route to. |
ingress.path / ingress.pathType | / / Prefix | Route path and match type. |
ingress.tls | [] | TLS blocks, e.g. [{secretName: telark-tls, hosts: [telark.example.com]}]. |
ingress.annotations | {} | Controller annotations — cert-manager issuers and so on. |
Autoscaling
The stateless services — auth, discovery, enrichment, notifier, ui —
can run behind a HorizontalPodAutoscaler (autoscaling/v2,
CPU-based). The exporter never autoscales: it holds a ReadWriteOnce
volume.
performance mode turns autoscaling on automatically (min 3, max
5). In any mode you can enable or tune it per service:
helm install telark oci://ghcr.io/telark/charts/telark -n telark --create-namespace \
--set services.discovery.autoscaling.enabled=true \
--set services.discovery.autoscaling.minReplicas=2 \
--set services.discovery.autoscaling.maxReplicas=8 \
--set services.discovery.autoscaling.targetCPUUtilizationPercentage=70| Key | Default | Description |
|---|---|---|
services.<svc>.autoscaling.enabled | false | Turn the HPA on for that service (on in performance). |
services.<svc>.autoscaling.minReplicas | 1 | Replica floor. |
services.<svc>.autoscaling.maxReplicas | 3 | Replica ceiling. |
services.<svc>.autoscaling.targetCPUUtilizationPercentage | 80 | Scale-up CPU target. |
services.<svc>.autoscaling.targetMemoryUtilizationPercentage | (unset) | Optional memory target. |
Set the same keys under app.serviceDefaults.autoscaling to change
the default for every service at once. When a service autoscales,
Helm stops managing its replica count so the HPA and Helm do not
fight over it.
Monitoring (opt-in)
telark can emit a ServiceMonitor that scrapes every service's
/metrics. It is off by default because it needs the Prometheus
Operator CRDs already in the cluster.
helm install telark oci://ghcr.io/telark/charts/telark -n telark --create-namespace \
--set monitoring.serviceMonitor.enabled=true \
--set monitoring.serviceMonitor.labels.release=<prometheus-release>The label is the part people miss: Prometheus only picks up a
ServiceMonitor whose labels match its serviceMonitorSelector —
usually release: <your-release>. Omit it and the monitor is silently
ignored.
| Key | Default | Description |
|---|---|---|
monitoring.serviceMonitor.enabled | false | Create the ServiceMonitor. |
monitoring.serviceMonitor.labels | {} | Labels matching Prometheus's serviceMonitorSelector. |
monitoring.serviceMonitor.path | /metrics | Scrape path. |
monitoring.serviceMonitor.interval | 30s | Scrape interval. |
Upgrading
helm upgrade telark oci://ghcr.io/telark/charts/telark -n telark \
--set app.mode=<mode>Re-pass every --set and -f flag you used at install. See
Operations → Upgrading.
Every value
The complete field list — every telark value and every pinned
dependency value — is the chart's auto-generated
charts/telark/VALUES.md
in the repository.