Helm upgrade guide
This guide covers migrating from the inline-template ClickStack Helm chart (v1.x) to the subchart-based architecture (v2.x). This is a breaking change that replaces hand-rolled Kubernetes resources with operator-managed custom resources for MongoDB and ClickHouse, and uses the official OpenTelemetry Collector Helm chart.
The v2.x chart is not backwards compatible with v1.x. An in-place helm upgrade is not supported. We recommend performing a fresh install alongside the existing deployment and migrating data, rather than attempting an in-place upgrade.
Prerequisites
- Back up your data before upgrading (MongoDB, ClickHouse PVCs)
- Review your current
values.yamloverrides — most keys have moved or been renamed
Two-phase installation
The v2.x chart uses a two-phase install. Operators (which register CRDs) must be installed before the main chart (which creates CRs):
Uninstall in reverse order:
Data persistence
PersistentVolumeClaims created by the MongoDB and ClickHouse operators are not removed by helm uninstall. This is by design to prevent accidental data loss. To clean up PVCs after uninstalling, refer to:
Storage class
global.storageClassName and global.keepPVC have been removed. Storage class is now configured directly in each operator's CR spec:
What changed
| Component | Before (v1.x) | After (v2.x) |
|---|---|---|
| MongoDB | Inline Deployment + Service + PVC | MongoDB Kubernetes Operator (MCK) managing a MongoDBCommunity CR |
| ClickHouse | Inline Deployment + Service + ConfigMaps + PVCs | ClickHouse Operator managing ClickHouseCluster + KeeperCluster CRs |
| OTEL Collector | Inline Deployment + Service (otel.* block) | Official OpenTelemetry Collector Helm chart (otel-collector: subchart) |
| HyperDX values | Flat keys under hyperdx.* plus top-level tasks: and appUrl | Reorganized by K8s resource type under hyperdx.* (see below) |
| hdx-oss-v2 | Deprecated legacy chart | Removed entirely |
HyperDX values reorganization
The hyperdx: block is now organized by Kubernetes resource type:
Key moves
| Before (v1.x) | After (v2.x) |
|---|---|
appUrl | Removed. Use hyperdx.frontendUrl (defaults to http://localhost:3000) |
tasks.* (top-level) | hyperdx.tasks.* |
mongodb.password | hyperdx.secrets.MONGODB_PASSWORD |
clickhouse.config.users.appUserPassword | hyperdx.secrets.CLICKHOUSE_APP_PASSWORD |
clickhouse.config.users.otelUserPassword | hyperdx.secrets.CLICKHOUSE_PASSWORD |
otel.* env overrides | hyperdx.config.* (non-sensitive) and hyperdx.secrets.* (sensitive) |
Unified ConfigMap and Secret
All environment variables now flow through two static-named resources that are shared by the HyperDX Deployment and the OTEL Collector via envFrom:
clickstack-configConfigMap — populated fromhyperdx.configclickstack-secretSecret — populated fromhyperdx.secrets
There is no longer a separate OTEL-specific ConfigMap. Both workloads read from the same sources.
MongoDB migration
Removed values
The following mongodb.* values no longer exist:
New values
MongoDB is now managed by the MCK operator via a MongoDBCommunity custom resource. The CR spec is rendered verbatim from mongodb.spec:
The MongoDB password is set in hyperdx.secrets.MONGODB_PASSWORD (not mongodb.password). It is referenced automatically by the password Secret and the mongoUri template.
To add persistence, add a statefulSet block inside mongodb.spec:
The MCK operator subchart is configured under mongodb-operator: (not mongodb-kubernetes:). See the MCK documentation for all available CRD fields.
ClickHouse migration
Removed values
The following clickhouse.* values no longer exist:
New values
ClickHouse is now managed by the ClickHouse Operator via ClickHouseCluster and KeeperCluster custom resources. Both CR specs are rendered verbatim from values:
ClickHouse user credentials are now sourced from hyperdx.secrets (not clickhouse.config.users). The cluster spec references them with template expressions.
The ClickHouse Operator subchart is configured under clickhouse-operator:. Webhooks and cert-manager are disabled by default. See the operator configuration guide for all available CRD fields.
OTEL Collector migration
Removed values
The entire otel: block no longer exists:
New values
The OTEL Collector is now deployed via the official OpenTelemetry Collector Helm chart as the otel-collector: subchart. There is no parent-chart otel: wrapper — configure the subchart directly.
Environment variables (ClickHouse endpoint, OpAMP URL, etc.) are shared via the unified clickstack-config ConfigMap and clickstack-secret Secret. The subchart's extraEnvsFrom is pre-wired:
To set resources (previously otel.resources):
To set replicas (previously otel.replicas):
To set nodeSelector/tolerations (previously otel.nodeSelector/otel.tolerations):
See the OpenTelemetry Collector Helm chart for all available subchart values.
Unchanged values
The following sections are not affected by this migration:
global.*(imageRegistry, imagePullSecrets)
Fresh install vs. in-place upgrade
For a fresh install, no special steps are needed. The default values work out of the box.
For an in-place upgrade of an existing release, be aware that:
- The operators (MCK, ClickHouse Operator) will be installed as new deployments in your namespace
- The existing MongoDB Deployment and ClickHouse Deployment will be deleted by Helm (they are no longer in the chart's templates)
- The operators will create new StatefulSets to manage MongoDB and ClickHouse
- PVCs from the old chart are not automatically reused by the operator-managed StatefulSets
We recommend performing a fresh install alongside the existing deployment and migrating data, rather than an in-place upgrade.
Next steps
- Main Helm guide - Basic installation with v2.x
- Configuration guide - API keys, secrets, and ingress
- Additional manifests - Custom Kubernetes objects
- ClickStack Helm charts repository - Chart source code and values reference