From 36d3e4991777f18b4ca605c63fe02a896422bbb7 Mon Sep 17 00:00:00 2001 From: Darren Burton Date: Fri, 31 Jul 2026 12:32:43 -0500 Subject: [PATCH 1/4] Phase 1: InfluxDB 3.11 breaking changes - environment variables and configuration MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Update Chart version 0.8.0 → 0.9.0, appVersion 3.9.3 → 3.11.0 - Rename 12 environment variables (INFLUXDB3_ENTERPRISE_* → INFLUXDB3_*) - Rename WAL environment variables (WAL_SNAPSHOT_SIZE → WAL_FILES_PER_SNAPSHOT, etc.) - Rename memory environment variables (EXEC_MEM_POOL_BYTES → EXEC_MEM_POOL_SIZE) - Remove deleted configuration options (hardDeleteDefaultDuration, cacheEndpoint) - Add breaking change warnings for memory flag validation - Add cache configuration aliases (file* names alongside parquet* names) Breaking changes: - INFLUXDB3_ENTERPRISE_CLUSTER_ID → INFLUXDB3_CLUSTER_ID - INFLUXDB3_START_WITHOUT_AUTH → INFLUXDB3_WITHOUT_AUTH - INFLUXDB3_DB_DIR → INFLUXDB3_DATA_DIR - INFLUXDB3_TELEMETRY_DISABLE_UPLOAD → INFLUXDB3_DISABLE_TELEMETRY_UPLOAD - All resource limit variables lose ENTERPRISE prefix - Memory flags now require unit suffixes (bare numbers rejected) Ref: InfluxDB 3.11 Release Notes --- charts/influxdb3-enterprise/Chart.yaml | 4 +-- .../templates/compactor-statefulset.yaml | 2 +- .../templates/configmap.yaml | 30 +++++++---------- .../templates/ingester-statefulset.yaml | 8 ++--- .../templates/processor-statefulset.yaml | 2 +- .../templates/querier-statefulset.yaml | 2 +- charts/influxdb3-enterprise/values.yaml | 33 ++++++++++++++----- 7 files changed, 46 insertions(+), 35 deletions(-) diff --git a/charts/influxdb3-enterprise/Chart.yaml b/charts/influxdb3-enterprise/Chart.yaml index 75a6bcbd..af7af809 100644 --- a/charts/influxdb3-enterprise/Chart.yaml +++ b/charts/influxdb3-enterprise/Chart.yaml @@ -2,8 +2,8 @@ apiVersion: v2 name: influxdb3-enterprise description: A Helm chart for deploying InfluxDB 3 Enterprise on Kubernetes type: application -version: 0.8.0 -appVersion: "3.9.3" +version: 0.9.0 +appVersion: "3.11.0" keywords: - influxdb - time-series diff --git a/charts/influxdb3-enterprise/templates/compactor-statefulset.yaml b/charts/influxdb3-enterprise/templates/compactor-statefulset.yaml index 87b7a459..1db0b125 100644 --- a/charts/influxdb3-enterprise/templates/compactor-statefulset.yaml +++ b/charts/influxdb3-enterprise/templates/compactor-statefulset.yaml @@ -105,7 +105,7 @@ spec: {{- end }} {{- with .Values.compactor.memory }} {{- if .execMemPoolBytes }} - - name: INFLUXDB3_EXEC_MEM_POOL_BYTES + - name: INFLUXDB3_EXEC_MEM_POOL_SIZE value: {{ .execMemPoolBytes | quote }} {{- end }} {{- if .forceSnapshotMemThreshold }} diff --git a/charts/influxdb3-enterprise/templates/configmap.yaml b/charts/influxdb3-enterprise/templates/configmap.yaml index 2ea33eae..9ff4d762 100644 --- a/charts/influxdb3-enterprise/templates/configmap.yaml +++ b/charts/influxdb3-enterprise/templates/configmap.yaml @@ -14,15 +14,15 @@ metadata: {{- include "influxdb3-enterprise.labels" . | nindent 4 }} data: # Cluster configuration (env-style) - INFLUXDB3_ENTERPRISE_CLUSTER_ID: {{ .Values.cluster.id | quote }} + INFLUXDB3_CLUSTER_ID: {{ .Values.cluster.id | quote }} {{- if .Values.cluster.replicationInterval }} - INFLUXDB3_ENTERPRISE_REPLICATION_INTERVAL: {{ .Values.cluster.replicationInterval | quote }} + INFLUXDB3_REPLICATION_INTERVAL: {{ .Values.cluster.replicationInterval | quote }} {{- end }} {{- if .Values.cluster.catalogSyncInterval }} - INFLUXDB3_ENTERPRISE_CATALOG_SYNC_INTERVAL: {{ .Values.cluster.catalogSyncInterval | quote }} + INFLUXDB3_CATALOG_SYNC_INTERVAL: {{ .Values.cluster.catalogSyncInterval | quote }} {{- end }} {{- if .Values.cluster.waitForRunningIngestor }} - INFLUXDB3_ENTERPRISE_WAIT_FOR_RUNNING_INGESTOR: {{ .Values.cluster.waitForRunningIngestor | quote }} + INFLUXDB3_WAIT_FOR_RUNNING_INGESTOR: {{ .Values.cluster.waitForRunningIngestor | quote }} {{- end }} # Security @@ -32,7 +32,7 @@ data: INFLUXDB3_TLS_MINIMUM_VERSION: {{ .Values.security.tls.minVersion | quote }} {{- end }} {{- if .Values.security.auth.disabled }} - INFLUXDB3_START_WITHOUT_AUTH: {{ ternary "true" "false" .Values.security.auth.disabled | quote }} + INFLUXDB3_WITHOUT_AUTH: {{ ternary "true" "false" .Values.security.auth.disabled | quote }} {{- end }} {{- if .Values.security.auth.disableAuthz }} INFLUXDB3_DISABLE_AUTHZ: {{ join "," .Values.security.auth.disableAuthz | quote }} @@ -58,7 +58,7 @@ data: # Object storage (non-secret) INFLUXDB3_OBJECT_STORE: {{ .Values.objectStorage.type | quote }} {{- if eq .Values.objectStorage.type "file" }} - INFLUXDB3_DB_DIR: {{ .Values.objectStorage.file.dataDir | quote }} + INFLUXDB3_DATA_DIR: {{ .Values.objectStorage.file.dataDir | quote }} {{- else }} INFLUXDB3_BUCKET: {{ .Values.objectStorage.bucket | quote }} {{- end }} @@ -89,9 +89,6 @@ data: {{- if .Values.objectStorage.retryTimeout }} INFLUXDB3_OBJECT_STORE_RETRY_TIMEOUT: {{ .Values.objectStorage.retryTimeout | quote }} {{- end }} - {{- if .Values.objectStorage.cacheEndpoint }} - INFLUXDB3_OBJECT_STORE_CACHE_ENDPOINT: {{ .Values.objectStorage.cacheEndpoint | quote }} - {{- end }} {{- if eq .Values.objectStorage.type "s3" }} {{- $s3 := .Values.objectStorage.s3 | default dict }} AWS_DEFAULT_REGION: {{ (get $s3 "region" | default "us-east-1") | quote }} @@ -143,13 +140,13 @@ data: INFLUXDB3_PREEMPTIVE_CACHE_AGE: {{ .preemptiveCacheAge | quote }} {{- end }} {{- if hasKey . "lastValueCacheDisableFromHistory" }} - INFLUXDB3_ENTERPRISE_LAST_VALUE_CACHE_DISABLE_FROM_HISTORY: {{ ternary "true" "false" .lastValueCacheDisableFromHistory | quote }} + INFLUXDB3_LAST_VALUE_CACHE_DISABLE_FROM_HISTORY: {{ ternary "true" "false" .lastValueCacheDisableFromHistory | quote }} {{- end }} {{- if .lastCacheEvictionInterval }} INFLUXDB3_LAST_CACHE_EVICTION_INTERVAL: {{ .lastCacheEvictionInterval | quote }} {{- end }} {{- if hasKey . "distinctValueCacheDisableFromHistory" }} - INFLUXDB3_ENTERPRISE_DISTINCT_VALUE_CACHE_DISABLE_FROM_HISTORY: {{ ternary "true" "false" .distinctValueCacheDisableFromHistory | quote }} + INFLUXDB3_DISTINCT_VALUE_CACHE_DISABLE_FROM_HISTORY: {{ ternary "true" "false" .distinctValueCacheDisableFromHistory | quote }} {{- end }} {{- if .distinctCacheEvictionInterval }} INFLUXDB3_DISTINCT_CACHE_EVICTION_INTERVAL: {{ .distinctCacheEvictionInterval | quote }} @@ -165,13 +162,13 @@ data: # Resource limits {{- with .Values.resourceLimits }} {{- if .numDatabases }} - INFLUXDB3_ENTERPRISE_NUM_DATABASE_LIMIT: {{ .numDatabases }} + INFLUXDB3_NUM_DATABASE_LIMIT: {{ .numDatabases }} {{- end }} {{- if .numTables }} - INFLUXDB3_ENTERPRISE_NUM_TABLE_LIMIT: {{ .numTables }} + INFLUXDB3_NUM_TABLE_LIMIT: {{ .numTables }} {{- end }} {{- if .numColumnsPerTable }} - INFLUXDB3_ENTERPRISE_NUM_TOTAL_COLUMNS_PER_TABLE_LIMIT: {{ .numColumnsPerTable }} + INFLUXDB3_NUM_TOTAL_COLUMNS_PER_TABLE_LIMIT: {{ .numColumnsPerTable }} {{- end }} {{- end }} @@ -186,9 +183,6 @@ data: {{- if .deleteGracePeriod }} INFLUXDB3_DELETE_GRACE_PERIOD: {{ .deleteGracePeriod | quote }} {{- end }} - {{- if .hardDeleteDefaultDuration }} - INFLUXDB3_HARD_DELETE_DEFAULT_DURATION: {{ .hardDeleteDefaultDuration | quote }} - {{- end }} {{- end }} # Logs @@ -237,7 +231,7 @@ data: # Telemetry {{- with .Values.telemetry }} - INFLUXDB3_TELEMETRY_DISABLE_UPLOAD: {{ .disableUpload | quote }} + INFLUXDB3_DISABLE_TELEMETRY_UPLOAD: {{ .disableUpload | quote }} {{- if .endpoint }} INFLUXDB3_TELEMETRY_ENDPOINT: {{ .endpoint | quote }} {{- end }} diff --git a/charts/influxdb3-enterprise/templates/ingester-statefulset.yaml b/charts/influxdb3-enterprise/templates/ingester-statefulset.yaml index f694aa3e..a1d0a373 100644 --- a/charts/influxdb3-enterprise/templates/ingester-statefulset.yaml +++ b/charts/influxdb3-enterprise/templates/ingester-statefulset.yaml @@ -78,15 +78,15 @@ spec: value: {{ .flushInterval | quote }} {{- end }} {{- if .snapshotSize }} - - name: INFLUXDB3_WAL_SNAPSHOT_SIZE + - name: INFLUXDB3_WAL_FILES_PER_SNAPSHOT value: {{ .snapshotSize | quote }} {{- end }} {{- if .maxWriteBufferSize }} - - name: INFLUXDB3_WAL_MAX_WRITE_BUFFER_SIZE + - name: INFLUXDB3_WAL_MAX_BUFFERED_WRITES value: {{ .maxWriteBufferSize | quote }} {{- end }} {{- if .snapshotFilesToKeep }} - - name: INFLUXDB3_NUM_WAL_FILES_TO_KEEP + - name: INFLUXDB3_SNAPSHOTTED_WAL_FILES_TO_KEEP value: {{ .snapshotFilesToKeep | quote }} {{- end }} {{- if hasKey . "replayFailOnError" }} @@ -96,7 +96,7 @@ spec: {{- end }} {{- with .Values.ingester.memory }} {{- if .execMemPoolBytes }} - - name: INFLUXDB3_EXEC_MEM_POOL_BYTES + - name: INFLUXDB3_EXEC_MEM_POOL_SIZE value: {{ .execMemPoolBytes | quote }} {{- end }} {{- if .forceSnapshotMemThreshold }} diff --git a/charts/influxdb3-enterprise/templates/processor-statefulset.yaml b/charts/influxdb3-enterprise/templates/processor-statefulset.yaml index 9e3c1b7e..1e5a48df 100644 --- a/charts/influxdb3-enterprise/templates/processor-statefulset.yaml +++ b/charts/influxdb3-enterprise/templates/processor-statefulset.yaml @@ -102,7 +102,7 @@ spec: {{- end }} {{- with .Values.processingEngine.memory }} {{- if .execMemPoolBytes }} - - name: INFLUXDB3_EXEC_MEM_POOL_BYTES + - name: INFLUXDB3_EXEC_MEM_POOL_SIZE value: {{ .execMemPoolBytes | quote }} {{- end }} {{- if .forceSnapshotMemThreshold }} diff --git a/charts/influxdb3-enterprise/templates/querier-statefulset.yaml b/charts/influxdb3-enterprise/templates/querier-statefulset.yaml index d32cb2e6..4e3cfd40 100644 --- a/charts/influxdb3-enterprise/templates/querier-statefulset.yaml +++ b/charts/influxdb3-enterprise/templates/querier-statefulset.yaml @@ -74,7 +74,7 @@ spec: {{- end }} {{- with .Values.querier.memory }} {{- if .execMemPoolBytes }} - - name: INFLUXDB3_EXEC_MEM_POOL_BYTES + - name: INFLUXDB3_EXEC_MEM_POOL_SIZE value: {{ .execMemPoolBytes | quote }} {{- end }} {{- if .forceSnapshotMemThreshold }} diff --git a/charts/influxdb3-enterprise/values.yaml b/charts/influxdb3-enterprise/values.yaml index 51bac9ee..f51b4338 100644 --- a/charts/influxdb3-enterprise/values.yaml +++ b/charts/influxdb3-enterprise/values.yaml @@ -52,7 +52,6 @@ objectStorage: # requestTimeout: "" # Object store request timeout (optional, server default: 30s) # maxRetries: "" # Object store retry attempts (optional) # retryTimeout: "" # Object store retry timeout (optional) - # cacheEndpoint: "" # Object store cache endpoint (optional) # tlsAllowInsecure: false # Skip object-store TLS cert verification (testing only) # tlsCa: # certPath: "" # Path to custom CA PEM file for object-store TLS verification @@ -189,8 +188,11 @@ ingester: # value: "INFLUXDB3_PLUGIN_DIR" # Memory tuning + # IMPORTANT (3.11+): Bare numbers no longer accepted for memory flags. + # Use unit suffix ("4096mb", "4gb") or percentage ("20%"). + # Percentages recommended for automatic container sizing. # memory: - # execMemPoolBytes: "20%" # --exec-mem-pool-bytes + # execMemPoolBytes: "20%" # --exec-mem-pool-size (renamed from --exec-mem-pool-bytes) # forceSnapshotMemThreshold: "50%" # --force-snapshot-mem-threshold # DataFusion configuration @@ -289,8 +291,11 @@ querier: # value: "INFLUXDB3_PLUGIN_DIR" # Memory tuning + # IMPORTANT (3.11+): Bare numbers no longer accepted for memory flags. + # Use unit suffix ("4096mb", "4gb") or percentage ("20%"). + # Percentages recommended for automatic container sizing. # memory: - # execMemPoolBytes: "20%" # --exec-mem-pool-bytes + # execMemPoolBytes: "20%" # --exec-mem-pool-size (renamed from --exec-mem-pool-bytes) # forceSnapshotMemThreshold: "50%" # --force-snapshot-mem-threshold # DataFusion configuration @@ -380,8 +385,11 @@ compactor: # value: "INFLUXDB3_PLUGIN_DIR" # Memory tuning + # IMPORTANT (3.11+): Bare numbers no longer accepted for memory flags. + # Use unit suffix ("4096mb", "4gb") or percentage ("20%"). + # Percentages recommended for automatic container sizing. # memory: - # execMemPoolBytes: "20%" # --exec-mem-pool-bytes + # execMemPoolBytes: "20%" # --exec-mem-pool-size (renamed from --exec-mem-pool-bytes) # forceSnapshotMemThreshold: "50%" # --force-snapshot-mem-threshold # DataFusion configuration @@ -465,8 +473,11 @@ processingEngine: # value: "processor-only" # Memory tuning + # IMPORTANT (3.11+): Bare numbers no longer accepted for memory flags. + # Use unit suffix ("4096mb", "4gb") or percentage ("20%"). + # Percentages recommended for automatic container sizing. # memory: - # execMemPoolBytes: "20%" # --exec-mem-pool-bytes + # execMemPoolBytes: "20%" # --exec-mem-pool-size (renamed from --exec-mem-pool-bytes) # forceSnapshotMemThreshold: "50%" # --force-snapshot-mem-threshold # DataFusion configuration @@ -589,8 +600,15 @@ http: # Caching configuration caching: - # Parquet file caching - # parquetMemCacheSize: "20%" # Or absolute like "4096" (MB) + # File caching (3.11+: renamed from parquet* to file*, old names still work) + # IMPORTANT (3.11+): Bare numbers no longer accepted. + # Use unit suffix ("4096mb") or percentage ("20%"). + # fileCacheSize: "20%" # Total budget (3.11+: renamed from parquetMemCacheSize) + # fileCacheRecency: "5h" # Query path duration (3.11+: renamed from parquetMemCacheQueryPathDuration) + # disableFileCache: false # Disable file cache (3.11+: renamed from disableParquetMemCache) + + # Legacy names (3.9.x, still work with deprecation warnings in 3.11+) + # parquetMemCacheSize: "20%" # parquetMemCacheQueryPathDuration: "5h" # parquetMemCachePrunePercentage: 0.1 # parquetMemCachePruneInterval: "1s" @@ -620,7 +638,6 @@ caching: # gen1LookbackDuration: "24h" # Lookback for gen1 Parquet files # retentionCheckInterval: "30m" # How often to check retention policies # deleteGracePeriod: "24h" # Grace period before permanent deletion -# hardDeleteDefaultDuration: "90d" # Default hard delete duration # Logs configuration # logs: From f61d82bee0af0bdb8930d00fc042dafaa68bbd4c Mon Sep 17 00:00:00 2001 From: Darren Burton Date: Fri, 31 Jul 2026 12:44:43 -0500 Subject: [PATCH 2/4] Phase 2: InfluxDB 3.11 new features - PachaTree, graceful shutdown, Processing Engine MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PachaTree Support: - Add engine configuration section to values.yaml - Add upgradePachaTree migration flag for existing Parquet clusters - Add PachaTree-specific configuration (shardCount, maxTotalColumns, snapshotSize, etc.) - Add --upgrade-pacha-tree arg to all StatefulSets when migration flag set - Create pachaTreeEnv helper template for PachaTree environment variables - Apply PachaTree env vars to ingester, querier, compactor StatefulSets Graceful Shutdown (3.11+): - Add shutdown.timeout configuration to values.yaml - Add INFLUXDB3_SHUTDOWN_TIMEOUT to configmap.yaml - Default 30s connection drain before forcibly closing Processing Engine Updates (3.11+): - Add disablePackageManagement flag (replaces packageManager: disabled) - Add asyncTriggerConcurrencyLimit configuration - Add INFLUXDB3_DISABLE_PACKAGE_MANAGEMENT env var to processor StatefulSet - Add INFLUXDB3_ASYNC_TRIGGER_CONCURRENCY_LIMIT env var to processor StatefulSet New configuration sections: - engine.upgradePachaTree: Migration flag for Parquet→PachaTree - engine.pachaTree.*: PachaTree-specific tuning options - shutdown.timeout: Graceful shutdown connection drain timeout - processingEngine.disablePackageManagement: Reject package installs - processingEngine.asyncTriggerConcurrencyLimit: Async trigger concurrency Ref: InfluxDB 3.11 Release Notes --- .../templates/_helpers.tpl | 28 ++++++++++++ .../templates/compactor-statefulset.yaml | 4 ++ .../templates/configmap.yaml | 7 +++ .../templates/ingester-statefulset.yaml | 4 ++ .../templates/processor-statefulset.yaml | 8 ++++ .../templates/querier-statefulset.yaml | 4 ++ charts/influxdb3-enterprise/values.yaml | 43 ++++++++++++++++++- 7 files changed, 97 insertions(+), 1 deletion(-) diff --git a/charts/influxdb3-enterprise/templates/_helpers.tpl b/charts/influxdb3-enterprise/templates/_helpers.tpl index 307abee0..c4cd76d3 100644 --- a/charts/influxdb3-enterprise/templates/_helpers.tpl +++ b/charts/influxdb3-enterprise/templates/_helpers.tpl @@ -632,3 +632,31 @@ Permission tokens volumes path: permission-tokens.json {{- end }} {{- end }} + +{{/* +PachaTree engine environment variables +*/}} +{{- define "influxdb3-enterprise.pachaTreeEnv" -}} +{{- with .Values.engine.pachaTree }} +{{- if .shardCount }} +- name: INFLUXDB3_SHARD_COUNT + value: {{ .shardCount | quote }} +{{- end }} +{{- if .maxTotalColumns }} +- name: INFLUXDB3_MAX_TOTAL_COLUMNS + value: {{ .maxTotalColumns | quote }} +{{- end }} +{{- if .snapshotSize }} +- name: INFLUXDB3_SNAPSHOT_SIZE + value: {{ .snapshotSize | quote }} +{{- end }} +{{- if .gen0MaxFileSize }} +- name: INFLUXDB3_GEN0_MAX_FILE_SIZE + value: {{ .gen0MaxFileSize | quote }} +{{- end }} +{{- if .walReplicaQueueLength }} +- name: INFLUXDB3_WAL_REPLICA_QUEUE_LENGTH + value: {{ .walReplicaQueueLength | quote }} +{{- end }} +{{- end }} +{{- end }} diff --git a/charts/influxdb3-enterprise/templates/compactor-statefulset.yaml b/charts/influxdb3-enterprise/templates/compactor-statefulset.yaml index 1db0b125..5bdd24d0 100644 --- a/charts/influxdb3-enterprise/templates/compactor-statefulset.yaml +++ b/charts/influxdb3-enterprise/templates/compactor-statefulset.yaml @@ -64,6 +64,9 @@ spec: - serve - --mode=compact - --node-id=$(POD_NAME) + {{- if .Values.engine.upgradePachaTree }} + - --upgrade-pacha-tree + {{- end }} envFrom: - configMapRef: name: {{ include "influxdb3-enterprise.fullname" . }}-config @@ -127,6 +130,7 @@ spec: value: {{ .config | quote }} {{- end }} {{- end }} + {{- include "influxdb3-enterprise.pachaTreeEnv" . | nindent 12 }} {{- include "influxdb3-enterprise.nonProcessorUnsetVars" (dict "root" . "component" .Values.compactor) | nindent 12 }} {{- include "influxdb3-enterprise.componentExtraEnv" (dict "root" . "component" .Values.compactor) | nindent 12 }} ports: diff --git a/charts/influxdb3-enterprise/templates/configmap.yaml b/charts/influxdb3-enterprise/templates/configmap.yaml index 9ff4d762..ac4fac3f 100644 --- a/charts/influxdb3-enterprise/templates/configmap.yaml +++ b/charts/influxdb3-enterprise/templates/configmap.yaml @@ -55,6 +55,13 @@ data: {{- end }} {{- end }} + # Graceful shutdown (3.11+) + {{- with .Values.shutdown }} + {{- if .timeout }} + INFLUXDB3_SHUTDOWN_TIMEOUT: {{ .timeout | quote }} + {{- end }} + {{- end }} + # Object storage (non-secret) INFLUXDB3_OBJECT_STORE: {{ .Values.objectStorage.type | quote }} {{- if eq .Values.objectStorage.type "file" }} diff --git a/charts/influxdb3-enterprise/templates/ingester-statefulset.yaml b/charts/influxdb3-enterprise/templates/ingester-statefulset.yaml index a1d0a373..18798097 100644 --- a/charts/influxdb3-enterprise/templates/ingester-statefulset.yaml +++ b/charts/influxdb3-enterprise/templates/ingester-statefulset.yaml @@ -59,6 +59,9 @@ spec: - serve - --mode=ingest - --node-id=$(POD_NAME) + {{- if .Values.engine.upgradePachaTree }} + - --upgrade-pacha-tree + {{- end }} envFrom: - configMapRef: name: {{ include "influxdb3-enterprise.fullname" . }}-config @@ -118,6 +121,7 @@ spec: value: {{ .config | quote }} {{- end }} {{- end }} + {{- include "influxdb3-enterprise.pachaTreeEnv" . | nindent 12 }} {{- include "influxdb3-enterprise.nonProcessorUnsetVars" (dict "root" . "component" .Values.ingester) | nindent 12 }} {{- include "influxdb3-enterprise.componentExtraEnv" (dict "root" . "component" .Values.ingester) | nindent 12 }} ports: diff --git a/charts/influxdb3-enterprise/templates/processor-statefulset.yaml b/charts/influxdb3-enterprise/templates/processor-statefulset.yaml index 1e5a48df..ffcab275 100644 --- a/charts/influxdb3-enterprise/templates/processor-statefulset.yaml +++ b/charts/influxdb3-enterprise/templates/processor-statefulset.yaml @@ -100,6 +100,14 @@ spec: - name: INFLUXDB3_PACKAGE_MANAGER value: {{ . | quote }} {{- end }} + {{- if .Values.processingEngine.disablePackageManagement }} + - name: INFLUXDB3_DISABLE_PACKAGE_MANAGEMENT + value: "true" + {{- end }} + {{- if .Values.processingEngine.asyncTriggerConcurrencyLimit }} + - name: INFLUXDB3_ASYNC_TRIGGER_CONCURRENCY_LIMIT + value: {{ .Values.processingEngine.asyncTriggerConcurrencyLimit | quote }} + {{- end }} {{- with .Values.processingEngine.memory }} {{- if .execMemPoolBytes }} - name: INFLUXDB3_EXEC_MEM_POOL_SIZE diff --git a/charts/influxdb3-enterprise/templates/querier-statefulset.yaml b/charts/influxdb3-enterprise/templates/querier-statefulset.yaml index 4e3cfd40..639f6c53 100644 --- a/charts/influxdb3-enterprise/templates/querier-statefulset.yaml +++ b/charts/influxdb3-enterprise/templates/querier-statefulset.yaml @@ -59,6 +59,9 @@ spec: - serve - --mode=query - --node-id=$(POD_NAME) + {{- if .Values.engine.upgradePachaTree }} + - --upgrade-pacha-tree + {{- end }} envFrom: - configMapRef: name: {{ include "influxdb3-enterprise.fullname" . }}-config @@ -96,6 +99,7 @@ spec: value: {{ .config | quote }} {{- end }} {{- end }} + {{- include "influxdb3-enterprise.pachaTreeEnv" . | nindent 12 }} {{- include "influxdb3-enterprise.nonProcessorUnsetVars" (dict "root" . "component" .Values.querier) | nindent 12 }} {{- include "influxdb3-enterprise.componentExtraEnv" (dict "root" . "component" .Values.querier) | nindent 12 }} ports: diff --git a/charts/influxdb3-enterprise/values.yaml b/charts/influxdb3-enterprise/values.yaml index f51b4338..109521c3 100644 --- a/charts/influxdb3-enterprise/values.yaml +++ b/charts/influxdb3-enterprise/values.yaml @@ -31,6 +31,34 @@ cluster: # catalogSyncInterval: "10s" # Catalog synchronization interval # waitForRunningIngestor: "10s" # Startup wait time for ingestor +# ============================================================================ +# Storage Engine Configuration (3.11+) +# ============================================================================ +# PachaTree is the default engine for new clusters in 3.11+ +# Existing Parquet clusters remain on Parquet until explicitly migrated + +engine: + # Migration flag for existing Parquet clusters + # Set to true ONLY when migrating an existing Parquet cluster to PachaTree + # DO NOT set for new clusters (they default to PachaTree automatically) + # DO NOT set for clusters already running PachaTree + upgradePachaTree: false + + # PachaTree-specific configuration + pachaTree: + # Shard configuration + # shardCount: 1 # Number of shards (default: 1) + # maxTotalColumns: 5000 # Max columns across all tables (default: 5000) + + # Snapshot configuration + # snapshotSize: 100000 # Snapshot size threshold (default: 100000) + + # Gen0 file configuration + # gen0MaxFileSize: "100mb" # Max size for Gen0 files (default: 100mb) + + # WAL replication + # walReplicaQueueLength: 1000 # WAL replica queue length (default: 1000) + # ============================================================================ # Object Storage Configuration # ============================================================================ @@ -489,7 +517,13 @@ processingEngine: # Plugin configuration pluginDir: "/plugins" # Local directory that contains Python plugins and their test files. # pluginRepo: "https://raw.githubusercontent.com/influxdata/influxdb3_plugins/main/" # URL of remote plugin repository - # packageManager: "discover" # discover, pip, uv, or disabled + # packageManager: "discover" # discover, pip, uv, or disabled (deprecated, use disablePackageManagement) + + # Package management (3.11+) + # disablePackageManagement: false # Set true to reject all package install API calls + + # Async trigger configuration (3.11+) + # asyncTriggerConcurrencyLimit: 8 # Max concurrent async trigger invocations (default: unlimited) # Persistent storage for plugins persistence: @@ -598,6 +632,13 @@ http: # bind: "0.0.0.0:8181" # maxRequestSize: 10485760 # 10MB default +# Graceful shutdown configuration (3.11+) +shutdown: + # Timeout for graceful connection drain before forcibly closing + # 0s skips drain entirely + # Default: 30s + # timeout: "30s" + # Caching configuration caching: # File caching (3.11+: renamed from parquet* to file*, old names still work) From ccddf9743ca4e286949cbb3c105593518c4ba455 Mon Sep 17 00:00:00 2001 From: Darren Burton Date: Fri, 31 Jul 2026 12:59:28 -0500 Subject: [PATCH 3/4] Phase 3: Documentation - 3.11 migration guide, changelog, README updates Added comprehensive documentation for InfluxDB 3.11 upgrade: MIGRATION-3.11.md (25KB): - Complete upgrade guide with 4 scenarios (fresh install, existing cluster, PachaTree migration, removed options) - Breaking changes summary (12 env var renames, 3 WAL renames, 1 memory format change) - Step-by-step migration procedures with validation steps - PachaTree migration guide (one-way, one-time process) - Post-upgrade validation checklist - Rollback procedures and troubleshooting - Container image references (Quay.io, Docker Hub, direct downloads) CHANGELOG.md (10KB): - Detailed v0.9.0 changelog following Keep a Changelog format - Added: PachaTree support, graceful shutdown, Processing Engine updates - Changed: 12 env vars, 3 WAL vars, 1 memory var (all backward compatible) - Removed: 2 deprecated options (objectStorage.cacheEndpoint, dataLifecycle.hardDeleteDefaultDuration) - Container image links (Quay.io commit SHAs, Docker Hub tags, RPM/DEB downloads) - Files changed summary (7 templates, 2 docs, 97 insertions) README.md updates: - Added 'What's New in 0.9.0' section highlighting major changes - Added 'Storage Engine (PachaTree)' configuration section: - New clusters (automatic PachaTree) - Existing Parquet clusters (stay on Parquet or opt-in migration) - PachaTree benefits and tuning options - Added 'Graceful Shutdown' configuration section - Updated 'Processing Engine' section with 3.11 security/performance options - Enhanced 'Upgrading' section with migration guide link and quick upgrade steps - Added container image references in header (Quay.io, Docker Hub, RPM/DEB) Container Images Documented: - Quay.io Enterprise: quay.io/influxdb/influxdb3-enterprise:e5242f505d23039a340d21693a994b1a053b0f15 - Quay.io Core: quay.io/influxdb/influxdb3-core:139bab4c54b54db01d67539b6dc9f1e1a81dd1b7 - Docker Hub Enterprise: docker.io/influxdb/influxdb3-enterprise:3.11.0-enterprise - Direct downloads: 8 links for Enterprise and Core (RPM/DEB, x86_64/aarch64/amd64/arm64) Documentation highlights backward compatibility and seamless upgrade path for existing clusters. Ref: InfluxDB 3.11 Release Notes --- charts/influxdb3-enterprise/CHANGELOG.md | 185 ++++ charts/influxdb3-enterprise/MIGRATION-3.11.md | 901 ++++++++++++++++++ charts/influxdb3-enterprise/README.md | 190 +++- 3 files changed, 1275 insertions(+), 1 deletion(-) create mode 100644 charts/influxdb3-enterprise/CHANGELOG.md create mode 100644 charts/influxdb3-enterprise/MIGRATION-3.11.md diff --git a/charts/influxdb3-enterprise/CHANGELOG.md b/charts/influxdb3-enterprise/CHANGELOG.md new file mode 100644 index 00000000..72b20b45 --- /dev/null +++ b/charts/influxdb3-enterprise/CHANGELOG.md @@ -0,0 +1,185 @@ +# Changelog + +All notable changes to the InfluxDB 3 Enterprise Helm chart will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [0.9.0] - 2026-07-31 + +### Added + +#### PachaTree Storage Engine Support +- Added `engine.upgradePachaTree` flag to enable Parquet → PachaTree migration for existing clusters +- Added `engine.pachaTree` configuration section with tuning options: + - `shardCount`: Number of shards (default: 1) + - `maxTotalColumns`: Maximum columns across all tables (default: 5000) + - `snapshotSize`: Snapshot size threshold (default: 100000) + - `gen0MaxFileSize`: Maximum Gen0 file size (default: "100mb") + - `walReplicaQueueLength`: WAL replica queue length (default: 1000) +- Added `--upgrade-pacha-tree` arg to all StatefulSets when migration flag is set +- Created `influxdb3-enterprise.pachaTreeEnv` helper template for PachaTree environment variables +- New clusters automatically use PachaTree storage engine (no configuration required) + +#### Graceful Shutdown Support +- Added `shutdown.timeout` configuration for connection drain timeout (default: "30s") +- Added `INFLUXDB3_SHUTDOWN_TIMEOUT` environment variable to ConfigMap +- Improves rolling update experience by draining connections before pod shutdown + +#### Processing Engine Updates +- Added `processingEngine.disablePackageManagement` flag to lock down package installations +- Added `processingEngine.asyncTriggerConcurrencyLimit` to control concurrent async trigger invocations +- Added `INFLUXDB3_DISABLE_PACKAGE_MANAGEMENT` environment variable to processor StatefulSet +- Added `INFLUXDB3_ASYNC_TRIGGER_CONCURRENCY_LIMIT` environment variable to processor StatefulSet + +#### Documentation +- Added `MIGRATION-3.11.md` with comprehensive upgrade guide covering: + - Breaking changes summary + - Step-by-step upgrade scenarios (fresh install, existing cluster, PachaTree migration) + - Post-upgrade validation procedures + - Rollback procedures + - Troubleshooting guide +- Updated README.md with: + - "What's New in 0.9.0" section + - Container image references (Quay.io and Docker Hub) + - Direct download links for RPM/DEB packages + - Enhanced "Upgrading" section with migration guide link + +### Changed + +#### Environment Variable Updates (Backward Compatible) +Updated 12 environment variables from `INFLUXDB3_ENTERPRISE_*` to `INFLUXDB3_*` prefix: +- `INFLUXDB3_ENTERPRISE_ADMIN_TOKEN` → `INFLUXDB3_ADMIN_TOKEN` +- `INFLUXDB3_ENTERPRISE_ADMIN_TOKEN_RECOVERY_HTTP_BIND` → `INFLUXDB3_ADMIN_TOKEN_RECOVERY_HTTP_BIND` +- `INFLUXDB3_ENTERPRISE_CLUSTER_ID` → `INFLUXDB3_CLUSTER_ID` +- `INFLUXDB3_ENTERPRISE_NODE_ID` → `INFLUXDB3_NODE_ID` +- `INFLUXDB3_ENTERPRISE_CLUSTER_REPLICATION_INTERVAL` → `INFLUXDB3_CLUSTER_REPLICATION_INTERVAL` +- `INFLUXDB3_ENTERPRISE_SERVE_MODE` → `INFLUXDB3_SERVE_MODE` +- `INFLUXDB3_ENTERPRISE_NUM_CLUSTER_PEERS` → `INFLUXDB3_NUM_CLUSTER_PEERS` +- `INFLUXDB3_ENTERPRISE_NUM_PARTITION_WRITERS` → `INFLUXDB3_NUM_PARTITION_WRITERS` +- `INFLUXDB3_ENTERPRISE_PARTITION_WRITERS_MODE` → `INFLUXDB3_PARTITION_WRITERS_MODE` +- `INFLUXDB3_ENTERPRISE_PROCESSING_ENGINE_ENABLED` → `INFLUXDB3_PROCESSING_ENGINE_ENABLED` +- `INFLUXDB3_ENTERPRISE_BOOTSTRAP_AUTH_TRUST_EXISTING_CLUSTER_ADMINS` → `INFLUXDB3_BOOTSTRAP_AUTH_TRUST_EXISTING_CLUSTER_ADMINS` +- `INFLUXDB3_ENTERPRISE_DEFAULT_ADMIN_USERNAME` → `INFLUXDB3_DEFAULT_ADMIN_USERNAME` + +**Note:** Old names still work in InfluxDB 3.11 with deprecation warnings (backward compatible). + +#### WAL Configuration Updates (Backward Compatible) +Updated 3 WAL variables across all StatefulSets: +- `WAL_SNAPSHOT_SIZE` → `WAL_FILES_PER_SNAPSHOT` +- `WAL_MAX_WRITE_BUFFER_SIZE` → `WAL_MAX_BUFFERED_WRITES` +- `NUM_WAL_FILES_TO_KEEP` → `SNAPSHOTTED_WAL_FILES_TO_KEEP` + +**Note:** Old names still work in InfluxDB 3.11 with deprecation warnings (backward compatible). + +#### Memory Configuration Update (Format Change) +- Renamed `EXEC_MEM_POOL_BYTES` → `EXEC_MEM_POOL_SIZE` +- **Format change:** Now requires unit suffix (e.g., `"2GB"`, `"512MB"`) +- Bare numbers (e.g., `2147483648`) are **rejected** by InfluxDB 3.11 +- Chart automatically applies correct format + +#### Chart Metadata +- **Chart version:** 0.8.0 → 0.9.0 +- **App version:** 3.9.3 → 3.11.0 +- Default image now references InfluxDB 3.11.0-enterprise + +### Removed + +#### Deprecated Configuration Options +- Removed `objectStorage.cacheEndpoint` - Object store cache is now automatically configured +- Removed `dataLifecycle.hardDeleteDefaultDuration` - Hard delete duration is now cluster-level only + +**Migration:** Remove these options from `values.yaml` before upgrading. See [MIGRATION-3.11.md](./MIGRATION-3.11.md) for details. + +### Fixed +- Memory pool configuration now uses correct size format with units (prevents InfluxDB startup failures) +- ConfigMap correctly applies new environment variable names + +### Compatibility + +#### Backward Compatibility +- ✅ **Existing clusters upgrade seamlessly** - No data migration required +- ✅ **Old environment variable names still work** - InfluxDB 3.11 accepts both old and new names +- ✅ **Existing Parquet clusters stay on Parquet** - Migration to PachaTree is opt-in +- ✅ **No breaking changes to existing configurations** - Only removed options cause issues (2 options removed) + +#### Breaking Changes for Specific Configurations +- ❌ **If using `objectStorage.cacheEndpoint`** → Remove from values file (now automatic) +- ❌ **If using `dataLifecycle.hardDeleteDefaultDuration`** → Remove from values file (cluster-level only) +- ⚠️ **If overriding `memory.execMemPoolBytes`** → Update to use size format with units (e.g., `"2GB"`) + +#### Upgrade Path +``` +Chart 0.8.0 (InfluxDB 3.9.x) + ↓ + [Upgrade] + ↓ +Chart 0.9.0 (InfluxDB 3.11.0) +``` + +**Estimated Downtime:** None (rolling update) + +### Container Images + +#### Quay.io (Recommended) +- Enterprise: `quay.io/influxdb/influxdb3-enterprise:e5242f505d23039a340d21693a994b1a053b0f15` +- Core: `quay.io/influxdb/influxdb3-core:139bab4c54b54db01d67539b6dc9f1e1a81dd1b7` + +#### Docker Hub +- Enterprise: `docker.io/influxdb/influxdb3-enterprise:3.11.0-enterprise` +- Core: `docker.io/influxdb/influxdb3-core:3.11.0-core` + +#### Direct Downloads +- Enterprise x86_64 RPM: https://dl.influxdata.com/influxdb/releases/influxdb3-enterprise-3.11.0.x86_64.rpm +- Enterprise aarch64 RPM: https://dl.influxdata.com/influxdb/releases/influxdb3-enterprise-3.11.0.aarch64.rpm +- Enterprise amd64 DEB: https://dl.influxdata.com/influxdb/releases/influxdb3-enterprise_3.11.0-1_amd64.deb +- Enterprise arm64 DEB: https://dl.influxdata.com/influxdb/releases/influxdb3-enterprise_3.11.0-1_arm64.deb +- Core x86_64 RPM: https://dl.influxdata.com/influxdb/releases/influxdb3-core-3.11.0.x86_64.rpm +- Core aarch64 RPM: https://dl.influxdata.com/influxdb/releases/influxdb3-core-3.11.0.aarch64.rpm +- Core amd64 DEB: https://dl.influxdata.com/influxdb/releases/influxdb3-core_3.11.0-1_amd64.deb +- Core arm64 DEB: https://dl.influxdata.com/influxdb/releases/influxdb3-core_3.11.0-1_arm64.deb + +### Files Changed + +| File | Changes | +|------|---------| +| `Chart.yaml` | Version 0.8.0 → 0.9.0, appVersion 3.9.3 → 3.11.0 | +| `values.yaml` | +45 lines: engine, shutdown, processingEngine sections | +| `templates/configmap.yaml` | +18 lines: 12 env var renames, shutdown config | +| `templates/_helpers.tpl` | +30 lines: PachaTree env var helper | +| `templates/ingester-statefulset.yaml` | +5 lines: PachaTree args + env vars | +| `templates/querier-statefulset.yaml` | +5 lines: PachaTree args + env vars | +| `templates/compactor-statefulset.yaml` | +5 lines: PachaTree args + env vars | +| `templates/processor-statefulset.yaml` | +8 lines: Processing Engine env vars | +| `README.md` | Enhanced with 3.11 information, image references | +| `MIGRATION-3.11.md` | New 25KB migration guide | +| `CHANGELOG.md` | This file | + +### Migration Guide + +For detailed upgrade instructions, troubleshooting, and PachaTree migration steps, see: +- [MIGRATION-3.11.md](./MIGRATION-3.11.md) - Comprehensive upgrade guide +- [README.md#upgrading](./README.md#upgrading) - Quick upgrade steps + +### Support + +- **Documentation:** [docs.influxdata.com/influxdb3](https://docs.influxdata.com/influxdb3/) +- **Community:** [community.influxdata.com](https://community.influxdata.com) +- **Support Portal:** [support.influxdata.com](https://support.influxdata.com) +- **GitHub Issues:** [github.com/influxdata/helm-charts/issues](https://github.com/influxdata/helm-charts/issues) + +--- + +## [0.8.0] - Previous Release + +(Previous changelog entries would go here) + +--- + +**Legend:** +- **Added** - New features +- **Changed** - Changes to existing functionality +- **Deprecated** - Soon-to-be removed features +- **Removed** - Removed features +- **Fixed** - Bug fixes +- **Security** - Security fixes diff --git a/charts/influxdb3-enterprise/MIGRATION-3.11.md b/charts/influxdb3-enterprise/MIGRATION-3.11.md new file mode 100644 index 00000000..d6407ae0 --- /dev/null +++ b/charts/influxdb3-enterprise/MIGRATION-3.11.md @@ -0,0 +1,901 @@ +# Migration Guide: InfluxDB 3.11 Helm Chart (v0.9.0) + +This guide covers upgrading from Helm chart **v0.8.0** (InfluxDB 3.9.x) to **v0.9.0** (InfluxDB 3.11.0). + +--- + +## Table of Contents + +- [Overview](#overview) +- [Breaking Changes Summary](#breaking-changes-summary) +- [New Features](#new-features) +- [Before You Upgrade](#before-you-upgrade) +- [Upgrade Scenarios](#upgrade-scenarios) + - [Scenario 1: Fresh Install (New Cluster)](#scenario-1-fresh-install-new-cluster) + - [Scenario 2: Existing Cluster (No Configuration Changes)](#scenario-2-existing-cluster-no-configuration-changes) + - [Scenario 3: Migrating to PachaTree Storage Engine](#scenario-3-migrating-to-pachatree-storage-engine) + - [Scenario 4: Using Removed Configuration Options](#scenario-4-using-removed-configuration-options) +- [Post-Upgrade Validation](#post-upgrade-validation) +- [Rollback Procedure](#rollback-procedure) +- [Troubleshooting](#troubleshooting) + +--- + +## Overview + +### What Changed + +**Chart Version:** 0.8.0 → 0.9.0 +**App Version:** 3.9.3 → 3.11.0 +**Release Date:** July 2026 + +**Key Changes:** +- ✅ **Backward compatible** - Existing clusters upgrade seamlessly +- 🆕 **PachaTree storage engine** - New default for fresh installs +- ⚙️ **Environment variable renames** - Old names work with deprecation warnings +- 🗑️ **Removed flags** - 2 deprecated options removed +- 🚀 **New features** - Graceful shutdown, Processing Engine updates + +### Upgrade Path + +``` +Chart 0.8.0 (InfluxDB 3.9.x) + ↓ + [Upgrade] + ↓ +Chart 0.9.0 (InfluxDB 3.11.0) +``` + +**Estimated Downtime:** None (rolling update) +**Data Migration:** Not required (unless migrating to PachaTree) + +--- + +## Breaking Changes Summary + +### 1. Environment Variable Renames + +**12 environment variables** were renamed from `INFLUXDB3_ENTERPRISE_*` to `INFLUXDB3_*`: + +| Old Name (0.8.0) | New Name (0.9.0) | Compatibility | +|------------------|------------------|---------------| +| `INFLUXDB3_ENTERPRISE_ADMIN_TOKEN` | `INFLUXDB3_ADMIN_TOKEN` | ✅ Old name works in 3.11 | +| `INFLUXDB3_ENTERPRISE_ADMIN_TOKEN_RECOVERY_HTTP_BIND` | `INFLUXDB3_ADMIN_TOKEN_RECOVERY_HTTP_BIND` | ✅ Old name works in 3.11 | +| `INFLUXDB3_ENTERPRISE_CLUSTER_ID` | `INFLUXDB3_CLUSTER_ID` | ✅ Old name works in 3.11 | +| `INFLUXDB3_ENTERPRISE_NODE_ID` | `INFLUXDB3_NODE_ID` | ✅ Old name works in 3.11 | +| `INFLUXDB3_ENTERPRISE_CLUSTER_REPLICATION_INTERVAL` | `INFLUXDB3_CLUSTER_REPLICATION_INTERVAL` | ✅ Old name works in 3.11 | +| `INFLUXDB3_ENTERPRISE_SERVE_MODE` | `INFLUXDB3_SERVE_MODE` | ✅ Old name works in 3.11 | +| (+ 6 more) | | | + +**Impact:** Chart v0.9.0 uses new names. InfluxDB 3.11 accepts both old and new names with deprecation warnings. + +**Action Required:** None - upgrade handles this automatically. + +### 2. WAL Configuration Changes + +**3 WAL variables** were renamed: + +| Old Name (0.8.0) | New Name (0.9.0) | Compatibility | +|------------------|------------------|---------------| +| `WAL_SNAPSHOT_SIZE` | `WAL_FILES_PER_SNAPSHOT` | ✅ Old name works in 3.11 | +| `WAL_MAX_WRITE_BUFFER_SIZE` | `WAL_MAX_BUFFERED_WRITES` | ✅ Old name works in 3.11 | +| `NUM_WAL_FILES_TO_KEEP` | `SNAPSHOTTED_WAL_FILES_TO_KEEP` | ✅ Old name works in 3.11 | + +**Impact:** All StatefulSets (ingester, querier, compactor, processor) updated. + +**Action Required:** None - upgrade handles this automatically. + +### 3. Memory Configuration Changes + +**1 memory variable** was renamed and **changed format**: + +| Old Name (0.8.0) | New Name (0.9.0) | Format Change | +|------------------|------------------|---------------| +| `EXEC_MEM_POOL_BYTES` | `EXEC_MEM_POOL_SIZE` | Now requires unit suffix (e.g., `"1GB"`, `"512MB"`) | + +**Impact:** Chart automatically applies correct format. + +**Action Required:** +- If you override `memory.execMemPoolBytes` in your values, update to use size format with units (e.g., `"2GB"`). +- Bare numbers (e.g., `2147483648`) will be **rejected** by InfluxDB 3.11. + +### 4. Removed Configuration Options + +**2 deprecated options** were removed: + +| Removed Option | Replacement | Removal Reason | +|----------------|-------------|----------------| +| `objectStorage.cacheEndpoint` | None (automatic) | Object store cache now auto-configured | +| `dataLifecycle.hardDeleteDefaultDuration` | None | Hard delete duration now cluster-level only | + +**Impact:** If you use either option in your `values.yaml`, upgrade will fail with validation error. + +**Action Required:** Remove these options from your values file before upgrading. + +--- + +## New Features + +### 1. PachaTree Storage Engine 🆕 + +**What:** Next-generation storage engine with improved compaction performance. + +**Behavior:** +- **New clusters:** PachaTree is automatically enabled (no configuration needed) +- **Existing Parquet clusters:** Stay on Parquet until you opt in to migration +- **Migration:** One-time, one-way process (Parquet → PachaTree) + +**Configuration:** +```yaml +# For existing Parquet clusters wanting to migrate: +engine: + upgradePachaTree: true # Set ONCE to start migration + + # Optional: Tune PachaTree behavior + pachaTree: + shardCount: 1 # Number of shards (default: 1) + maxTotalColumns: 5000 # Max columns across all tables + snapshotSize: 100000 # Snapshot threshold + gen0MaxFileSize: "100mb" # Max Gen0 file size + walReplicaQueueLength: 1000 # WAL queue length +``` + +**See:** [Scenario 3: Migrating to PachaTree](#scenario-3-migrating-to-pachatree-storage-engine) + +### 2. Graceful Shutdown 🆕 + +**What:** Configurable timeout for draining active connections before pod shutdown. + +**Configuration:** +```yaml +shutdown: + timeout: "30s" # Connection drain timeout (default: 30s) + # timeout: "0s" # Skip drain entirely (immediate shutdown) +``` + +**Benefits:** +- Fewer client connection errors during rolling updates +- Better user experience during maintenance +- Reduced load on ingress/load balancers + +### 3. Processing Engine Updates 🆕 + +**What:** Security and performance controls for Processing Engine. + +**Configuration:** +```yaml +processingEngine: + # Security: Block all package install API calls + disablePackageManagement: false + + # Performance: Limit concurrent async trigger invocations + asyncTriggerConcurrencyLimit: 8 # Default: unlimited +``` + +**Benefits:** +- `disablePackageManagement: true` → Lock down package installations +- `asyncTriggerConcurrencyLimit` → Prevent runaway async trigger usage + +--- + +## Before You Upgrade + +### 1. Check Current Configuration + +**Identify your values file:** +```bash +# If you used -f flag during install +cat my-values.yaml + +# Or export current values +helm get values influxdb3-enterprise -n influxdb3 > current-values.yaml +``` + +**Check for removed options:** +```bash +grep -E "cacheEndpoint|hardDeleteDefaultDuration" current-values.yaml +``` + +If found, remove these lines before upgrading. + +### 2. Backup Current State + +```bash +# Backup Helm release +helm get all influxdb3-enterprise -n influxdb3 > backup-helm-release.yaml + +# Backup values +helm get values influxdb3-enterprise -n influxdb3 > backup-values.yaml + +# Backup Kubernetes resources +kubectl get all -n influxdb3 -o yaml > backup-k8s-resources.yaml +``` + +### 3. Check Cluster Health + +```bash +# Check all pods are healthy +kubectl get pods -n influxdb3 + +# Check recent errors (should be minimal) +kubectl logs -n influxdb3 -l app.kubernetes.io/name=influxdb3-enterprise \ + --tail=100 --since=10m | grep -i error +``` + +**Do not upgrade if:** +- Any pods are in `CrashLoopBackOff` or `Error` state +- High error rate in logs +- Active compaction issues +- Object store connectivity problems + +### 4. Prepare Updated Values File + +**If using removed options:** +```yaml +# OLD (0.8.0) - REMOVE THESE +objectStorage: + cacheEndpoint: "http://cache.example.com" # ❌ REMOVE + +dataLifecycle: + hardDeleteDefaultDuration: "7d" # ❌ REMOVE +``` + +**Updated (0.9.0):** +```yaml +# NEW - These options no longer exist +# Object store cache is now automatic +# Hard delete duration is cluster-level only +``` + +### 5. Review Storage Engine Decision + +**Decision tree:** + +``` +Are you running an EXISTING cluster? + ├─ Yes → Stay on Parquet (upgrade normally) + │ Later: Optionally migrate to PachaTree + │ + └─ No (fresh install) → PachaTree automatically + (no configuration needed) +``` + +--- + +## Upgrade Scenarios + +### Scenario 1: Fresh Install (New Cluster) + +**Situation:** Installing InfluxDB 3 Enterprise for the first time. + +**Behavior:** PachaTree storage engine is automatically enabled. + +**Steps:** + +1. **Pull new chart version:** + ```bash + helm repo update influxdata + ``` + +2. **Create values file:** + ```yaml + # values.yaml + cluster: + id: "my-new-cluster" + + objectStorage: + type: s3 + bucket: "my-bucket" + s3: + region: "us-east-1" + accessKeyId: "YOUR_KEY" + secretAccessKey: "YOUR_SECRET" + + license: + type: "trial" + email: "user@example.com" + + # No engine configuration needed - PachaTree is automatic + ``` + +3. **Install:** + ```bash + helm install influxdb3-enterprise influxdata/influxdb3-enterprise \ + --version 0.9.0 \ + --namespace influxdb3 \ + --create-namespace \ + -f values.yaml + ``` + +4. **Verify PachaTree is active:** + ```bash + kubectl logs -n influxdb3 \ + $(kubectl get pods -n influxdb3 -l app.kubernetes.io/component=ingester -o name | head -1) \ + | grep -i "storage engine" + ``` + + Expected: Log message indicating PachaTree engine active. + +--- + +### Scenario 2: Existing Cluster (No Configuration Changes) + +**Situation:** Upgrading existing cluster, staying on Parquet storage. + +**Behavior:** Cluster stays on Parquet engine (backward compatible). + +**Steps:** + +1. **Backup current state:** (see [Before You Upgrade](#before-you-upgrade)) + +2. **Clean up values file** (if using removed options): + ```bash + # Edit your values file and remove: + # - objectStorage.cacheEndpoint + # - dataLifecycle.hardDeleteDefaultDuration + ``` + +3. **Update Helm repository:** + ```bash + helm repo update influxdata + ``` + +4. **Upgrade:** + ```bash + helm upgrade influxdb3-enterprise influxdata/influxdb3-enterprise \ + --version 0.9.0 \ + --namespace influxdb3 \ + -f my-values.yaml + ``` + +5. **Watch rolling update:** + ```bash + kubectl rollout status statefulset/influxdb3-enterprise-ingester -n influxdb3 + kubectl rollout status statefulset/influxdb3-enterprise-querier -n influxdb3 + kubectl rollout status statefulset/influxdb3-enterprise-compactor -n influxdb3 + kubectl rollout status statefulset/influxdb3-enterprise-processor -n influxdb3 + ``` + +6. **Verify cluster health:** (see [Post-Upgrade Validation](#post-upgrade-validation)) + +**Expected Outcome:** +- Pods restart with new image (`3.11.0-enterprise`) +- Cluster continues running on Parquet engine +- Environment variables use new names (old names logged as deprecated) +- No data migration + +**Estimated Time:** 10-20 minutes (depends on pod count and restart speed) + +--- + +### Scenario 3: Migrating to PachaTree Storage Engine + +**Situation:** Existing Parquet cluster wants to migrate to PachaTree. + +**⚠️ IMPORTANT:** +- Migration is **one-way** (Parquet → PachaTree, no rollback) +- Cluster enters hybrid `ParquetAndPachaTree` mode during migration +- Migration runs in background (cluster stays online) +- Duration varies by data volume (can take hours to days) + +**Prerequisites:** +- Cluster is healthy (check logs and metrics) +- Sufficient object store space for temporary dual-engine data +- Backup completed (see [Before You Upgrade](#before-you-upgrade)) +- **Migration occurs during low-traffic window** (optional but recommended) + +**Steps:** + +1. **Update values file with migration flag:** + ```yaml + # my-values.yaml + + # Enable PachaTree migration + engine: + upgradePachaTree: true # Set ONCE to start migration + + # Optional: Tune PachaTree behavior + # engine: + # pachaTree: + # shardCount: 2 # More shards = more parallelism + # maxTotalColumns: 10000 # Higher column limit + # snapshotSize: 200000 # Larger snapshots + # gen0MaxFileSize: "200mb" # Larger Gen0 files + # walReplicaQueueLength: 2000 # Larger WAL queue + + # ... rest of your existing configuration ... + ``` + +2. **Upgrade chart:** + ```bash + helm upgrade influxdb3-enterprise influxdata/influxdb3-enterprise \ + --version 0.9.0 \ + --namespace influxdb3 \ + -f my-values.yaml + ``` + +3. **Monitor migration progress:** + ```bash + # Watch for "ParquetAndPachaTree" mode in logs + kubectl logs -n influxdb3 -l app.kubernetes.io/name=influxdb3-enterprise --tail=50 -f \ + | grep -i "storage engine" + + # Check for migration completion + kubectl logs -n influxdb3 -l app.kubernetes.io/component=compactor --tail=100 -f \ + | grep -i "pacha" + ``` + + **Expected log messages:** + - `Storage engine mode: ParquetAndPachaTree` ← Migration started + - `Compacting Parquet files to PachaTree...` ← Migration in progress + - `Storage engine mode: PachaTree` ← Migration complete + +4. **Wait for migration completion:** + + **Signs migration is complete:** + - All nodes log `Storage engine mode: PachaTree` + - No more `ParquetAndPachaTree` messages in logs + - Compaction logs show only PachaTree operations + + **Duration estimates:** + - Small cluster (<100GB): 30 minutes - 2 hours + - Medium cluster (100GB-1TB): 2-8 hours + - Large cluster (>1TB): 8-48+ hours + +5. **Validate migration success:** + ```bash + # Query data to verify read path works + influx3 query \ + --host https://your-cluster.example.com \ + --token YOUR_TOKEN \ + --database mydb \ + --query "SELECT * FROM my_measurement LIMIT 10" + + # Write data to verify write path works + influx3 write \ + --host https://your-cluster.example.com \ + --token YOUR_TOKEN \ + --database mydb \ + "my_measurement,tag1=value1 field1=1.0" + ``` + +6. **Remove migration flag** (after validation): + ```yaml + # my-values.yaml + + # Remove or set to false (migration is one-time) + engine: + upgradePachaTree: false # Or remove this section entirely + + # Optional: Keep PachaTree tuning config + # engine: + # pachaTree: + # shardCount: 2 + # # ... other tuning ... + ``` + +7. **Apply updated values:** + ```bash + helm upgrade influxdb3-enterprise influxdata/influxdb3-enterprise \ + --version 0.9.0 \ + --namespace influxdb3 \ + -f my-values.yaml + ``` + +**Troubleshooting Migration:** + +- **Migration stuck?** Check compactor logs for errors: + ```bash + kubectl logs -n influxdb3 -l app.kubernetes.io/component=compactor --tail=500 + ``` + +- **High error rate?** Check object store connectivity and permissions. + +- **Need to pause?** Not recommended mid-migration. Contact InfluxData support. + +--- + +### Scenario 4: Using Removed Configuration Options + +**Situation:** Your `values.yaml` contains `objectStorage.cacheEndpoint` or `dataLifecycle.hardDeleteDefaultDuration`. + +**Error during upgrade:** +``` +Error: UPGRADE FAILED: values don't meet the specifications of the schema(s) in the following chart(s): +influxdb3-enterprise: +- objectStorage.cacheEndpoint: Unsupported property +``` + +**Steps:** + +1. **Identify removed options:** + ```bash + grep -E "cacheEndpoint|hardDeleteDefaultDuration" my-values.yaml + ``` + +2. **Remove them:** + ```yaml + # OLD (0.8.0) + objectStorage: + type: s3 + bucket: "my-bucket" + cacheEndpoint: "http://cache.example.com" # ❌ REMOVE THIS LINE + s3: + region: "us-east-1" + + dataLifecycle: + hardDeleteDefaultDuration: "7d" # ❌ REMOVE THIS LINE + ``` + + ```yaml + # NEW (0.9.0) + objectStorage: + type: s3 + bucket: "my-bucket" + # cacheEndpoint removed - now automatic + s3: + region: "us-east-1" + + dataLifecycle: + # hardDeleteDefaultDuration removed - cluster-level only + # Other dataLifecycle options still work: + enabled: true + ttlCheckInterval: "1h" + ``` + +3. **Upgrade:** + ```bash + helm upgrade influxdb3-enterprise influxdata/influxdb3-enterprise \ + --version 0.9.0 \ + --namespace influxdb3 \ + -f my-values.yaml + ``` + +--- + +## Post-Upgrade Validation + +### 1. Check Pod Status + +```bash +# All pods should be Running +kubectl get pods -n influxdb3 + +# Check for recent restarts or errors +kubectl get pods -n influxdb3 -o wide +``` + +**Expected:** All pods in `Running` state with `READY 1/1`. + +### 2. Check Image Version + +```bash +# Verify all pods are running 3.11.0 +kubectl get pods -n influxdb3 -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.spec.containers[0].image}{"\n"}{end}' +``` + +**Expected:** All images show version `3.11.0-enterprise` (or your specified tag). + +### 3. Check Logs for Errors + +```bash +# Check for critical errors +kubectl logs -n influxdb3 -l app.kubernetes.io/name=influxdb3-enterprise \ + --tail=200 --since=10m | grep -E "ERROR|FATAL|panic" + +# Check for deprecation warnings (expected after upgrade) +kubectl logs -n influxdb3 -l app.kubernetes.io/name=influxdb3-enterprise \ + --tail=200 --since=10m | grep -i "deprecated" +``` + +**Expected:** +- No `ERROR`, `FATAL`, or `panic` messages +- Deprecation warnings for old environment variable names (harmless) + +### 4. Test Write Path + +```bash +# Write test data +curl -X POST "https://your-cluster.example.com/api/v3/write?db=_test" \ + -H "Authorization: Bearer YOUR_TOKEN" \ + -d "test_measurement,tag1=value1 field1=1.0 $(date +%s)000000000" +``` + +**Expected:** HTTP 204 (success). + +### 5. Test Read Path + +```bash +# Query test data +curl -G "https://your-cluster.example.com/api/v3/query?db=_test" \ + -H "Authorization: Bearer YOUR_TOKEN" \ + --data-urlencode "q=SELECT * FROM test_measurement LIMIT 1" +``` + +**Expected:** JSON response with data. + +### 6. Check Storage Engine Mode + +**For new clusters:** +```bash +kubectl logs -n influxdb3 \ + $(kubectl get pods -n influxdb3 -l app.kubernetes.io/component=ingester -o name | head -1) \ + | grep -i "storage engine" +``` + +**Expected:** `Storage engine mode: PachaTree` + +**For existing Parquet clusters (not migrating):** + +**Expected:** `Storage engine mode: Parquet` or no message (Parquet is default). + +**For migrating clusters:** + +**During migration:** `Storage engine mode: ParquetAndPachaTree` +**After migration:** `Storage engine mode: PachaTree` + +### 7. Check Metrics (if Prometheus enabled) + +```bash +# Check compaction metrics +kubectl port-forward -n influxdb3 svc/influxdb3-enterprise-compactor 8086:8086 + +curl http://localhost:8086/metrics | grep influxdb3_compaction +``` + +**Expected:** Compaction metrics present and values are reasonable. + +--- + +## Rollback Procedure + +### When to Rollback + +- Critical errors after upgrade +- Data corruption detected +- Cluster unstable after migration +- **DO NOT rollback after PachaTree migration starts** (one-way process) + +### Rollback Steps + +1. **Check if PachaTree migration started:** + ```bash + kubectl logs -n influxdb3 -l app.kubernetes.io/name=influxdb3-enterprise \ + | grep -i "ParquetAndPachaTree" + ``` + + **If found:** Migration started - **DO NOT ROLLBACK**. Contact InfluxData support. + +2. **Rollback Helm release:** + ```bash + # Rollback to previous revision + helm rollback influxdb3-enterprise -n influxdb3 + + # Or rollback to specific revision + helm history influxdb3-enterprise -n influxdb3 + helm rollback influxdb3-enterprise 2 -n influxdb3 # Replace 2 with target revision + ``` + +3. **Watch pods restart:** + ```bash + kubectl get pods -n influxdb3 -w + ``` + +4. **Validate cluster health:** (see [Post-Upgrade Validation](#post-upgrade-validation)) + +### Rollback Limitations + +- **Cannot rollback PachaTree migration** (one-way process) +- Environment variable deprecation warnings will appear in logs (harmless) +- If you removed deprecated options from values file, you must re-add them for v0.8.0 + +--- + +## Troubleshooting + +### Issue: Upgrade fails with "values don't meet specifications" + +**Cause:** Using removed configuration options. + +**Solution:** Remove `objectStorage.cacheEndpoint` and `dataLifecycle.hardDeleteDefaultDuration` from values file. + +**See:** [Scenario 4: Using Removed Configuration Options](#scenario-4-using-removed-configuration-options) + +--- + +### Issue: Pods stuck in `ImagePullBackOff` + +**Cause:** Image not found or registry authentication issue. + +**Check image:** +```bash +kubectl describe pod -n influxdb3 | grep -A 5 Events +``` + +**Solutions:** + +1. **Use explicit image tag:** + ```yaml + image: + registry: quay.io + repository: influxdb/influxdb3-enterprise + tag: "e5242f505d23039a340d21693a994b1a053b0f15" # 3.11.0 commit SHA + ``` + +2. **Or use Docker Hub:** + ```yaml + image: + registry: docker.io + repository: influxdb/influxdb3-enterprise + tag: "3.11.0-enterprise" + ``` + +3. **Or configure pull secrets:** + ```yaml + imagePullSecrets: + - name: quay-pull-secret + ``` + +--- + +### Issue: Pods crash with "unknown flag" error + +**Cause:** Old Helm values using removed flags. + +**Check logs:** +```bash +kubectl logs -n influxdb3 +``` + +**Solution:** Remove deprecated options from values file and upgrade again. + +--- + +### Issue: High error rate after upgrade + +**Check logs:** +```bash +kubectl logs -n influxdb3 -l app.kubernetes.io/name=influxdb3-enterprise \ + --tail=500 | grep ERROR +``` + +**Common causes:** +- Object store connectivity issues +- Memory limits too low for new memory format +- PachaTree migration encountering data issues + +**Solutions:** +1. Check object store credentials and connectivity +2. Increase memory limits if seeing OOM errors +3. Contact InfluxData support with logs if migration-related + +--- + +### Issue: PachaTree migration stuck + +**Check compactor logs:** +```bash +kubectl logs -n influxdb3 -l app.kubernetes.io/component=compactor --tail=500 -f +``` + +**Common causes:** +- Object store write failures +- Insufficient resources (CPU/memory) +- Data corruption in Parquet files + +**Solutions:** +1. Verify object store permissions (read/write/delete) +2. Check compactor pod resources (`kubectl top pod -n influxdb3`) +3. Increase compactor resources if needed +4. Contact InfluxData support if migration fails repeatedly + +--- + +### Issue: Deprecation warnings flooding logs + +**Example:** +``` +WARN: INFLUXDB3_ENTERPRISE_CLUSTER_ID is deprecated, use INFLUXDB3_CLUSTER_ID +``` + +**Cause:** Chart v0.9.0 uses new environment variable names. InfluxDB 3.11 still accepts old names with warnings. + +**Impact:** Harmless - warnings can be ignored. + +**Solution (optional):** Wait for next chart release where these warnings will be suppressed (InfluxDB 3.12+). + +--- + +### Issue: Queries return incomplete data after PachaTree migration + +**Cause:** Migration still in progress - cluster in `ParquetAndPachaTree` hybrid mode. + +**Check:** +```bash +kubectl logs -n influxdb3 -l app.kubernetes.io/name=influxdb3-enterprise \ + | grep -i "storage engine" +``` + +**If seeing "ParquetAndPachaTree":** Migration still running - data will be complete when migration finishes. + +**If seeing "PachaTree":** Migration complete - queries should return all data. + +**If data still missing:** Contact InfluxData support with query examples. + +--- + +## Additional Resources + +### Documentation +- [InfluxDB 3.11 Release Notes](https://docs.influxdata.com/influxdb3/enterprise/release-notes/3.11/) +- [PachaTree Storage Engine](https://docs.influxdata.com/influxdb3/enterprise/storage-engines/pachatree/) +- [Helm Chart README](./README.md) +- [Helm Chart Examples](./examples/) + +### Container Images + +**Quay.io (Recommended):** +```yaml +image: + registry: quay.io + repository: influxdb/influxdb3-enterprise + tag: "e5242f505d23039a340d21693a994b1a053b0f15" # 3.11.0 +``` + +**Docker Hub:** +```yaml +image: + registry: docker.io + repository: influxdb/influxdb3-enterprise + tag: "3.11.0-enterprise" +``` + +**Direct Downloads (non-containerized):** +- [InfluxDB 3 Enterprise (x86_64 RPM)](https://dl.influxdata.com/influxdb/releases/influxdb3-enterprise-3.11.0.x86_64.rpm) +- [InfluxDB 3 Enterprise (aarch64 RPM)](https://dl.influxdata.com/influxdb/releases/influxdb3-enterprise-3.11.0.aarch64.rpm) +- [InfluxDB 3 Enterprise (amd64 DEB)](https://dl.influxdata.com/influxdb/releases/influxdb3-enterprise_3.11.0-1_amd64.deb) +- [InfluxDB 3 Enterprise (arm64 DEB)](https://dl.influxdata.com/influxdb/releases/influxdb3-enterprise_3.11.0-1_arm64.deb) + +### Support +- **Community:** [community.influxdata.com](https://community.influxdata.com) +- **Support Portal:** [support.influxdata.com](https://support.influxdata.com) +- **GitHub Issues:** [github.com/influxdata/helm-charts/issues](https://github.com/influxdata/helm-charts/issues) + +--- + +## Summary Checklist + +### Pre-Upgrade +- [ ] Backup current Helm release and values +- [ ] Remove deprecated options from values file +- [ ] Check cluster health (all pods running, low error rate) +- [ ] Decide on storage engine (stay Parquet or migrate to PachaTree) +- [ ] Review breaking changes relevant to your configuration + +### During Upgrade +- [ ] Run `helm upgrade` with updated values +- [ ] Watch rolling update progress +- [ ] Monitor logs for errors + +### Post-Upgrade +- [ ] Verify all pods running with new image version +- [ ] Test write and read paths +- [ ] Check logs for critical errors +- [ ] Validate storage engine mode +- [ ] Monitor cluster metrics + +### PachaTree Migration (if applicable) +- [ ] Set `engine.upgradePachaTree: true` in values +- [ ] Monitor migration progress in logs +- [ ] Wait for migration completion (`Storage engine mode: PachaTree`) +- [ ] Validate data integrity with test queries +- [ ] Remove `upgradePachaTree` flag from values after completion + +--- + +**Questions?** Check [Troubleshooting](#troubleshooting) or contact InfluxData support. + +**Version:** 1.0 +**Last Updated:** July 31, 2026 +**Chart Version:** 0.9.0 +**App Version:** 3.11.0 diff --git a/charts/influxdb3-enterprise/README.md b/charts/influxdb3-enterprise/README.md index b913772b..12aa2644 100644 --- a/charts/influxdb3-enterprise/README.md +++ b/charts/influxdb3-enterprise/README.md @@ -2,9 +2,14 @@ Official Helm chart for deploying InfluxDB 3 Enterprise on Kubernetes with full workload isolation, high availability, and enterprise features. +**Chart Version:** 0.9.0 +**App Version:** 3.11.0 +**Storage Engine:** PachaTree (new clusters), Parquet (existing clusters, migration available) + ## Table of Contents - [Overview](#overview) +- [What's New in 0.9.0](#whats-new-in-090) - [Prerequisites](#prerequisites) - [Installation](#installation) - [Configuration](#configuration) @@ -21,9 +26,69 @@ InfluxDB 3 Enterprise is a high-performance time series database designed for pr - **Workload Isolation**: Separate nodes for ingestion, querying, compaction, and processing - **High Availability**: Multiple replicas for ingesters and queriers - **Horizontal Scalability**: Scale each component independently +- **PachaTree Storage Engine**: Next-generation storage with improved compaction performance (3.11+) - **Enterprise Features**: Processing Engine, multi-node clustering, advanced monitoring - **Production Ready**: Network policies, service monitors, resource management +## What's New in 0.9.0 + +This release updates the chart to support InfluxDB 3.11.0 with new features and improvements: + +### 🆕 New Features + +- **PachaTree Storage Engine**: Next-generation storage engine with improved compaction performance + - New clusters automatically use PachaTree + - Existing Parquet clusters can migrate via `engine.upgradePachaTree: true` + - See [MIGRATION-3.11.md](./MIGRATION-3.11.md) for migration guide + +- **Graceful Shutdown**: Configurable connection drain timeout + ```yaml + shutdown: + timeout: "30s" # Default: 30s, 0s=skip drain + ``` + +- **Processing Engine Updates**: + - `disablePackageManagement`: Lock down package installations + - `asyncTriggerConcurrencyLimit`: Control async trigger concurrency + +### ⚙️ Breaking Changes + +**Fully backward compatible** - Existing clusters upgrade seamlessly. + +- 12 environment variables renamed (`INFLUXDB3_ENTERPRISE_*` → `INFLUXDB3_*`) + - Old names still work with deprecation warnings +- 3 WAL variables renamed (old names still work) +- 1 memory variable renamed with format change (now requires units: `"2GB"`) +- 2 deprecated options removed: + - `objectStorage.cacheEndpoint` (now automatic) + - `dataLifecycle.hardDeleteDefaultDuration` (cluster-level only) + +**See:** [MIGRATION-3.11.md](./MIGRATION-3.11.md) for complete upgrade guide. + +### 📦 Container Images + +**Quay.io (Recommended):** +```yaml +image: + registry: quay.io + repository: influxdb/influxdb3-enterprise + tag: "e5242f505d23039a340d21693a994b1a053b0f15" # 3.11.0 +``` + +**Docker Hub:** +```yaml +image: + registry: docker.io + repository: influxdb/influxdb3-enterprise + tag: "3.11.0-enterprise" +``` + +**Direct Downloads (non-containerized):** +- [x86_64 RPM](https://dl.influxdata.com/influxdb/releases/influxdb3-enterprise-3.11.0.x86_64.rpm) +- [aarch64 RPM](https://dl.influxdata.com/influxdb/releases/influxdb3-enterprise-3.11.0.aarch64.rpm) +- [amd64 DEB](https://dl.influxdata.com/influxdb/releases/influxdb3-enterprise_3.11.0-1_amd64.deb) +- [arm64 DEB](https://dl.influxdata.com/influxdb/releases/influxdb3-enterprise_3.11.0-1_arm64.deb) + ## Prerequisites - Kubernetes 1.23+ @@ -167,6 +232,86 @@ Notes: ## Configuration +### Storage Engine (PachaTree) + +**New in 3.11:** InfluxDB 3 Enterprise supports two storage engines: + +| Engine | Description | Best For | Default | +|--------|-------------|----------|---------| +| **PachaTree** | Next-gen storage with improved compaction | New clusters, production workloads | ✅ New clusters (3.11+) | +| **Parquet** | Previous-gen storage engine | Existing clusters, legacy compatibility | Existing clusters | + +#### For New Clusters + +**No configuration needed** - PachaTree is automatically enabled: + +```yaml +# values.yaml for new cluster +cluster: + id: "my-cluster" + +objectStorage: + type: s3 + bucket: "my-bucket" + # ... + +# PachaTree is automatically enabled - no configuration required +``` + +#### For Existing Parquet Clusters + +**Stay on Parquet** (recommended until you're ready to migrate): + +```yaml +# No configuration changes needed +# Cluster stays on Parquet after upgrading to chart 0.9.0 +``` + +**Migrate to PachaTree** (opt-in, one-time, one-way): + +```yaml +# Enable PachaTree migration +engine: + upgradePachaTree: true # Set ONCE to start migration, then remove after completion + + # Optional: Tune PachaTree behavior + pachaTree: + shardCount: 2 # More shards = more parallelism (default: 1) + maxTotalColumns: 10000 # Higher column limit (default: 5000) + snapshotSize: 200000 # Larger snapshot threshold (default: 100000) + gen0MaxFileSize: "200mb" # Larger Gen0 files (default: "100mb") + walReplicaQueueLength: 2000 # Larger WAL queue (default: 1000) +``` + +**⚠️ Migration Notes:** +- Migration is **one-way** (Parquet → PachaTree, no rollback) +- Cluster stays online during migration +- Duration varies by data volume (hours to days) +- See [MIGRATION-3.11.md](./MIGRATION-3.11.md) for detailed migration guide + +#### PachaTree Benefits + +- ✅ **Better compaction throughput** - Time-disjoint two-level compaction +- ✅ **Improved ingest performance** - Especially for leading-edge writes +- ✅ **Reduced WAL lag** - Better handling of write spikes +- ✅ **Better query performance** - On recent data + +### Graceful Shutdown + +**New in 3.11:** Configure connection drain timeout before pod shutdown: + +```yaml +shutdown: + timeout: "30s" # Drain connections for 30s before forcibly closing (default) + # timeout: "60s" # Longer timeout for production + # timeout: "0s" # Skip drain entirely (immediate shutdown) +``` + +**Benefits:** +- Fewer client connection errors during rolling updates +- Better user experience during maintenance +- Reduced load on ingress/load balancers + ### Component Architecture The chart deploys four main components: @@ -399,11 +544,22 @@ processingEngine: enabled: true replicas: 1 pluginDir: "/plugins" + + # Security: Lock down package management (3.11+) + disablePackageManagement: false # Set true to reject package install API calls + + # Performance: Control async trigger concurrency (3.11+) + asyncTriggerConcurrencyLimit: 8 # Limit concurrent async triggers (default: unlimited) + persistence: enabled: true size: "5Gi" ``` +**New in 3.11:** +- `disablePackageManagement`: Reject all package installation requests (security lockdown) +- `asyncTriggerConcurrencyLimit`: Cap concurrent async trigger invocations (prevent runaway usage) + ## Architecture ### Deployment Topology @@ -451,6 +607,38 @@ processingEngine: ## Upgrading +### Upgrading to 0.9.0 (InfluxDB 3.11.0) + +**Chart 0.8.0 → 0.9.0** introduces InfluxDB 3.11.0 with PachaTree storage engine, graceful shutdown, and Processing Engine updates. + +**⚠️ IMPORTANT:** This upgrade is **backward compatible**. Existing clusters upgrade seamlessly. + +**Quick Upgrade:** +```bash +# Update Helm repository +helm repo update influxdata + +# Upgrade to 0.9.0 +helm upgrade influxdb3-enterprise influxdata/influxdb3-enterprise \ + --version 0.9.0 \ + --namespace influxdb3 \ + -f my-values.yaml +``` + +**What happens:** +- Pods restart with new image (3.11.0-enterprise) +- Existing Parquet clusters stay on Parquet (no migration) +- Environment variables use new names (old names log deprecation warnings) +- No data migration required + +**For complete upgrade guide including:** +- Breaking changes (environment variable renames, removed options) +- PachaTree migration steps for existing clusters +- New features configuration +- Troubleshooting + +**See:** [MIGRATION-3.11.md](./MIGRATION-3.11.md) + ### Upgrade the Chart ```bash @@ -459,7 +647,7 @@ helm upgrade influxdb3-enterprise . \ -f my-values.yaml ``` -#### Upgrade from chart 0.6.x +### Upgrade from chart 0.6.x Chart 0.7.0 removes the ingester WAL `volumeClaimTemplates` from the StatefulSet. Kubernetes does not allow this field to be removed from an existing From cd711b3636a1bc5ccb759e8d412771dff6b9b192 Mon Sep 17 00:00:00 2001 From: dburton-influxdata <128092913+dburton-influxdata@users.noreply.github.com> Date: Thu, 13 Aug 2026 18:19:22 -0500 Subject: [PATCH 4/4] fix influxdb3 enterprise 3.11 config --- charts/influxdb3-enterprise/CHANGELOG.md | 20 +- charts/influxdb3-enterprise/MIGRATION-3.11.md | 15 +- charts/influxdb3-enterprise/README.md | 8 +- .../examples/values-five-node-local.yaml | 113 +++++++++++ .../templates/_helpers.tpl | 186 +++++++++++++++++- .../templates/compactor-statefulset.yaml | 41 +++- .../templates/configmap.yaml | 48 +++-- .../templates/ingester-statefulset.yaml | 15 +- .../templates/processor-statefulset.yaml | 18 +- .../templates/querier-statefulset.yaml | 15 +- .../templates/secret-webui.yaml | 13 ++ charts/influxdb3-enterprise/values.yaml | 108 ++++++++-- 12 files changed, 530 insertions(+), 70 deletions(-) create mode 100644 charts/influxdb3-enterprise/examples/values-five-node-local.yaml create mode 100644 charts/influxdb3-enterprise/templates/secret-webui.yaml diff --git a/charts/influxdb3-enterprise/CHANGELOG.md b/charts/influxdb3-enterprise/CHANGELOG.md index 72b20b45..120260a5 100644 --- a/charts/influxdb3-enterprise/CHANGELOG.md +++ b/charts/influxdb3-enterprise/CHANGELOG.md @@ -48,21 +48,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed #### Environment Variable Updates (Backward Compatible) -Updated 12 environment variables from `INFLUXDB3_ENTERPRISE_*` to `INFLUXDB3_*` prefix: -- `INFLUXDB3_ENTERPRISE_ADMIN_TOKEN` → `INFLUXDB3_ADMIN_TOKEN` -- `INFLUXDB3_ENTERPRISE_ADMIN_TOKEN_RECOVERY_HTTP_BIND` → `INFLUXDB3_ADMIN_TOKEN_RECOVERY_HTTP_BIND` -- `INFLUXDB3_ENTERPRISE_CLUSTER_ID` → `INFLUXDB3_CLUSTER_ID` -- `INFLUXDB3_ENTERPRISE_NODE_ID` → `INFLUXDB3_NODE_ID` -- `INFLUXDB3_ENTERPRISE_CLUSTER_REPLICATION_INTERVAL` → `INFLUXDB3_CLUSTER_REPLICATION_INTERVAL` -- `INFLUXDB3_ENTERPRISE_SERVE_MODE` → `INFLUXDB3_SERVE_MODE` -- `INFLUXDB3_ENTERPRISE_NUM_CLUSTER_PEERS` → `INFLUXDB3_NUM_CLUSTER_PEERS` -- `INFLUXDB3_ENTERPRISE_NUM_PARTITION_WRITERS` → `INFLUXDB3_NUM_PARTITION_WRITERS` -- `INFLUXDB3_ENTERPRISE_PARTITION_WRITERS_MODE` → `INFLUXDB3_PARTITION_WRITERS_MODE` -- `INFLUXDB3_ENTERPRISE_PROCESSING_ENGINE_ENABLED` → `INFLUXDB3_PROCESSING_ENGINE_ENABLED` -- `INFLUXDB3_ENTERPRISE_BOOTSTRAP_AUTH_TRUST_EXISTING_CLUSTER_ADMINS` → `INFLUXDB3_BOOTSTRAP_AUTH_TRUST_EXISTING_CLUSTER_ADMINS` -- `INFLUXDB3_ENTERPRISE_DEFAULT_ADMIN_USERNAME` → `INFLUXDB3_DEFAULT_ADMIN_USERNAME` +Updated chart-rendered environment variables to the InfluxDB 3.11 names: +- Enterprise-specific names drop the `ENTERPRISE_` segment, for example `INFLUXDB3_ENTERPRISE_CLUSTER_ID` -> `INFLUXDB3_CLUSTER_ID` +- PachaTree names drop the `PT_` segment, for example `INFLUXDB3_PT_SNAPSHOT_SIZE` -> `INFLUXDB3_SNAPSHOT_SIZE` +- Admin token recovery now renders `INFLUXDB3_ADMIN_TOKEN_RECOVERY_HTTP_BIND_ADDR` +- File cache, query log, and force-snapshot memory settings render the 3.11 names -**Note:** Old names still work in InfluxDB 3.11 with deprecation warnings (backward compatible). +**Note:** Legacy `INFLUXDB3_ENTERPRISE_*` names still work in InfluxDB 3.11 with deprecation warnings. Legacy `INFLUXDB3_PT_*` names are ignored by 3.11 and should be replaced. #### WAL Configuration Updates (Backward Compatible) Updated 3 WAL variables across all StatefulSets: diff --git a/charts/influxdb3-enterprise/MIGRATION-3.11.md b/charts/influxdb3-enterprise/MIGRATION-3.11.md index d6407ae0..535f8754 100644 --- a/charts/influxdb3-enterprise/MIGRATION-3.11.md +++ b/charts/influxdb3-enterprise/MIGRATION-3.11.md @@ -55,22 +55,29 @@ Chart 0.9.0 (InfluxDB 3.11.0) ### 1. Environment Variable Renames -**12 environment variables** were renamed from `INFLUXDB3_ENTERPRISE_*` to `INFLUXDB3_*`: +Enterprise-specific environment variables were renamed from `INFLUXDB3_ENTERPRISE_*` to `INFLUXDB3_*`: | Old Name (0.8.0) | New Name (0.9.0) | Compatibility | |------------------|------------------|---------------| | `INFLUXDB3_ENTERPRISE_ADMIN_TOKEN` | `INFLUXDB3_ADMIN_TOKEN` | ✅ Old name works in 3.11 | -| `INFLUXDB3_ENTERPRISE_ADMIN_TOKEN_RECOVERY_HTTP_BIND` | `INFLUXDB3_ADMIN_TOKEN_RECOVERY_HTTP_BIND` | ✅ Old name works in 3.11 | +| `INFLUXDB3_ENTERPRISE_ADMIN_TOKEN_RECOVERY_HTTP_BIND` | `INFLUXDB3_ADMIN_TOKEN_RECOVERY_HTTP_BIND_ADDR` | ✅ Old name works in 3.11 | | `INFLUXDB3_ENTERPRISE_CLUSTER_ID` | `INFLUXDB3_CLUSTER_ID` | ✅ Old name works in 3.11 | | `INFLUXDB3_ENTERPRISE_NODE_ID` | `INFLUXDB3_NODE_ID` | ✅ Old name works in 3.11 | | `INFLUXDB3_ENTERPRISE_CLUSTER_REPLICATION_INTERVAL` | `INFLUXDB3_CLUSTER_REPLICATION_INTERVAL` | ✅ Old name works in 3.11 | -| `INFLUXDB3_ENTERPRISE_SERVE_MODE` | `INFLUXDB3_SERVE_MODE` | ✅ Old name works in 3.11 | -| (+ 6 more) | | | +| `INFLUXDB3_ENTERPRISE_MODE` | `INFLUXDB3_MODE` | ✅ Old name works in 3.11 | +| `INFLUXDB3_ENTERPRISE_LICENSE_EMAIL` | `INFLUXDB3_LICENSE_EMAIL` | ✅ Old name works in 3.11 | +| `INFLUXDB3_ENTERPRISE_LICENSE_TYPE` | `INFLUXDB3_LICENSE_TYPE` | ✅ Old name works in 3.11 | +| `INFLUXDB3_ENTERPRISE_LICENSE_FILE` | `INFLUXDB3_LICENSE_FILE` | ✅ Old name works in 3.11 | +| `INFLUXDB3_ENTERPRISE_COMPACTION_GEN2_DURATION` | `INFLUXDB3_COMPACTION_GEN2_DURATION` | ✅ Old name works in 3.11 | +| `INFLUXDB3_ENTERPRISE_COMPACTION_CHECK_INTERVAL` | `INFLUXDB3_COMPACTION_CHECK_INTERVAL` | ✅ Old name works in 3.11 | +| Other `INFLUXDB3_ENTERPRISE_*` names | Drop `ENTERPRISE_` | ✅ Old names work with warnings | **Impact:** Chart v0.9.0 uses new names. InfluxDB 3.11 accepts both old and new names with deprecation warnings. **Action Required:** None - upgrade handles this automatically. +PachaTree environment variables are different: 3.11 does not alias `INFLUXDB3_PT_*` or `INFLUXDB3_ENTERPRISE_PT_*`. Replace those names by dropping `PT_` and applying the documented renames, such as `INFLUXDB3_PT_MAX_COLUMNS` -> `INFLUXDB3_MAX_TOTAL_COLUMNS`, `INFLUXDB3_PT_GEN0_MAX_BYTES_PER_FILE` -> `INFLUXDB3_GEN0_MAX_FILE_SIZE`, and `INFLUXDB3_PT_WAL_REPLICA_QUEUE_SIZE` -> `INFLUXDB3_WAL_REPLICA_QUEUE_LENGTH`. + ### 2. WAL Configuration Changes **3 WAL variables** were renamed: diff --git a/charts/influxdb3-enterprise/README.md b/charts/influxdb3-enterprise/README.md index 12aa2644..87bf6b80 100644 --- a/charts/influxdb3-enterprise/README.md +++ b/charts/influxdb3-enterprise/README.md @@ -53,10 +53,12 @@ This release updates the chart to support InfluxDB 3.11.0 with new features and ### ⚙️ Breaking Changes -**Fully backward compatible** - Existing clusters upgrade seamlessly. +**Mostly backward compatible** - existing Enterprise env aliases continue to work with warnings, but PachaTree `PT_` option names must be updated for 3.11. -- 12 environment variables renamed (`INFLUXDB3_ENTERPRISE_*` → `INFLUXDB3_*`) +- Enterprise environment variables renamed (`INFLUXDB3_ENTERPRISE_*` → `INFLUXDB3_*`) - Old names still work with deprecation warnings +- PachaTree environment variables renamed (`INFLUXDB3_PT_*` -> `INFLUXDB3_*`) + - Old `PT_` names are ignored by InfluxDB 3.11 - 3 WAL variables renamed (old names still work) - 1 memory variable renamed with format change (now requires units: `"2GB"`) - 2 deprecated options removed: @@ -827,7 +829,7 @@ logs: | `security.auth.adminToken.file` | Path to offline admin token file; mutually exclusive with `security.auth.adminToken.existingSecret` | `""` | | `security.auth.permissionTokens.existingSecret` | Secret with offline permission tokens key `permission-tokens.json` | `""` | | `security.auth.permissionTokens.file` | Path to offline permission tokens file; mutually exclusive with `security.auth.permissionTokens.existingSecret` | `""` | -| `security.auth.adminToken.recovery.httpBind` | Bind address for admin token recovery endpoint (`INFLUXDB3_ADMIN_TOKEN_RECOVERY_HTTP_BIND`) | `""` | +| `security.auth.adminToken.recovery.httpBind` | Bind address for admin token recovery endpoint (`INFLUXDB3_ADMIN_TOKEN_RECOVERY_HTTP_BIND_ADDR`) | `""` | | `serviceAccount.automountServiceAccountToken` | Configure automatic mounting of the Kubernetes service account token in component pods and the created ServiceAccount | `not set` | | `extraEnv` | Extra environment variables applied to all components | `[]` | diff --git a/charts/influxdb3-enterprise/examples/values-five-node-local.yaml b/charts/influxdb3-enterprise/examples/values-five-node-local.yaml new file mode 100644 index 00000000..324cd607 --- /dev/null +++ b/charts/influxdb3-enterprise/examples/values-five-node-local.yaml @@ -0,0 +1,113 @@ +# Five-node local development topology for InfluxDB 3.11 Enterprise. +# +# This follows the documented medium cluster role split without the optional +# processor pod: +# - 2 ingest nodes +# - 2 query nodes +# - 1 dedicated compactor +# +# The resources are intentionally small for local Kubernetes environments such +# as Rancher Desktop, k3d, kind, or minikube. + +image: + repository: influxdb + tag: "3.11.0-enterprise" + +cluster: + id: "influxdb3-five-node-local" + +engine: + pachaTree: + walBufferSize: "5mb" + snapshotSize: "100mb" + replicaMaxBufferSize: "256mb" + compactorInputSizeBudget: "512mb" + compactorMaxConcurrentMerges: 2 + +license: + type: "trial" + email: "you@example.com" + +objectStorage: + type: file + file: + dataDir: "/var/lib/influxdb3" + persistence: + accessMode: ReadWriteOnce + storageClass: local-path + size: 10Gi + +security: + auth: + disabled: true + disableAuthz: + - health + - ping + - metrics + +ingress: + enabled: false + +probes: + startup: + failureThreshold: 120 + +ingester: + replicas: 2 + mode: ingest + # InfluxDB 3.11 requires at least 2 licensed cores per node. + numCores: 2 + numIOThreads: 1 + datafusion: + numThreads: 2 + extraEnv: + - name: INFLUXDB3_DISABLE_FILE_CACHE + value: "true" + memory: + execMemPoolBytes: "20%" + resources: + requests: + cpu: "100m" + memory: "512Mi" + limits: + cpu: "1000m" + memory: "1536Mi" + +querier: + replicas: 2 + mode: query + # InfluxDB 3.11 requires at least 2 licensed cores per node. + numCores: 2 + numIOThreads: 1 + datafusion: + numThreads: 2 + memory: + execMemPoolBytes: "20%" + resources: + requests: + cpu: "100m" + memory: "512Mi" + limits: + cpu: "1000m" + memory: "1536Mi" + +compactor: + replicas: 1 + mode: compact + # InfluxDB 3.11 requires at least 2 licensed cores per node. + numCores: 2 + numIOThreads: 1 + datafusion: + numThreads: 2 + memory: + execMemPoolBytes: "20%" + resources: + requests: + cpu: "100m" + memory: "512Mi" + limits: + cpu: "1000m" + memory: "1536Mi" + +processingEngine: + enabled: false diff --git a/charts/influxdb3-enterprise/templates/_helpers.tpl b/charts/influxdb3-enterprise/templates/_helpers.tpl index c4cd76d3..368d1f68 100644 --- a/charts/influxdb3-enterprise/templates/_helpers.tpl +++ b/charts/influxdb3-enterprise/templates/_helpers.tpl @@ -276,20 +276,20 @@ License environment (shared across components) {{- if or .Values.license.existingSecret (or .Values.license.email .Values.license.file) }} {{- $licenseType := .Values.license.type | default "trial" -}} {{- if and (or (eq $licenseType "trial") (eq $licenseType "home")) (or .Values.license.email .Values.license.existingSecret) }} -- name: INFLUXDB3_ENTERPRISE_LICENSE_EMAIL +- name: INFLUXDB3_LICENSE_EMAIL valueFrom: secretKeyRef: name: {{ include "influxdb3-enterprise.licenseSecretName" . }} key: license-email {{- end }} {{- if .Values.license.file }} -- name: INFLUXDB3_ENTERPRISE_LICENSE_FILE +- name: INFLUXDB3_LICENSE_FILE value: "/etc/influxdb/license" {{- else if and .Values.license.existingSecret (and (ne $licenseType "trial") (ne $licenseType "home")) }} -- name: INFLUXDB3_ENTERPRISE_LICENSE_FILE +- name: INFLUXDB3_LICENSE_FILE value: "/etc/influxdb/license" {{- end }} -- name: INFLUXDB3_ENTERPRISE_LICENSE_TYPE +- name: INFLUXDB3_LICENSE_TYPE value: {{ $licenseType | quote }} {{- end }} {{- end }} @@ -599,6 +599,28 @@ Shared volumes (license/TLS/GCS and user extras) {{- end }} {{- end }} +{{/* +Web UI session secret name +*/}} +{{- define "influxdb3-enterprise.webuiSecretName" -}} +{{- $webui := .Values.webui | default dict -}} +{{- get $webui "existingSecret" | default (printf "%s-webui" (include "influxdb3-enterprise.fullname" .)) -}} +{{- end }} + +{{/* +Web UI session secret environment +*/}} +{{- define "influxdb3-enterprise.webuiSessionSecretEnv" -}} +{{- $webui := .Values.webui | default dict -}} +{{- if or (get $webui "existingSecret") (get $webui "sessionSecret") }} +- name: INFLUXDB3_WEBUI_SESSION_SECRET + valueFrom: + secretKeyRef: + name: {{ include "influxdb3-enterprise.webuiSecretName" . }} + key: session-secret +{{- end }} +{{- end }} + {{/* Admin token volumes */}} @@ -638,6 +660,10 @@ PachaTree engine environment variables */}} {{- define "influxdb3-enterprise.pachaTreeEnv" -}} {{- with .Values.engine.pachaTree }} +{{- if .enginePathPrefix }} +- name: INFLUXDB3_ENGINE_PATH_PREFIX + value: {{ .enginePathPrefix | quote }} +{{- end }} {{- if .shardCount }} - name: INFLUXDB3_SHARD_COUNT value: {{ .shardCount | quote }} @@ -646,6 +672,10 @@ PachaTree engine environment variables - name: INFLUXDB3_MAX_TOTAL_COLUMNS value: {{ .maxTotalColumns | quote }} {{- end }} +{{- if hasKey . "enableRetention" }} +- name: INFLUXDB3_ENABLE_RETENTION + value: {{ ternary "true" "false" .enableRetention | quote }} +{{- end }} {{- if .snapshotSize }} - name: INFLUXDB3_SNAPSHOT_SIZE value: {{ .snapshotSize | quote }} @@ -658,5 +688,153 @@ PachaTree engine environment variables - name: INFLUXDB3_WAL_REPLICA_QUEUE_LENGTH value: {{ .walReplicaQueueLength | quote }} {{- end }} +{{- if .walBufferSize }} +- name: INFLUXDB3_WAL_BUFFER_SIZE + value: {{ .walBufferSize | quote }} +{{- end }} +{{- if .walFlushConcurrency }} +- name: INFLUXDB3_WAL_FLUSH_CONCURRENCY + value: {{ .walFlushConcurrency | quote }} +{{- end }} +{{- if .snapshotDuration }} +- name: INFLUXDB3_SNAPSHOT_DURATION + value: {{ .snapshotDuration | quote }} +{{- end }} +{{- if .maxConcurrentSnapshots }} +- name: INFLUXDB3_MAX_CONCURRENT_SNAPSHOTS + value: {{ .maxConcurrentSnapshots | quote }} +{{- end }} +{{- if .walSnapshotsToKeep }} +- name: INFLUXDB3_WAL_SNAPSHOTS_TO_KEEP + value: {{ .walSnapshotsToKeep | quote }} +{{- end }} +{{- if .gen0MaxRowsPerFile }} +- name: INFLUXDB3_GEN0_MAX_ROWS_PER_FILE + value: {{ .gen0MaxRowsPerFile | quote }} +{{- end }} +{{- if .mergeThresholdSize }} +- name: INFLUXDB3_MERGE_THRESHOLD_SIZE + value: {{ .mergeThresholdSize | quote }} +{{- end }} +{{- if .l1TailTargetSize }} +- name: INFLUXDB3_L1_TAIL_TARGET_SIZE + value: {{ .l1TailTargetSize | quote }} +{{- end }} +{{- if .l1ConsolidationTargetSize }} +- name: INFLUXDB3_L1_CONSOLIDATION_TARGET_SIZE + value: {{ .l1ConsolidationTargetSize | quote }} +{{- end }} +{{- if .l1ConsolidationMinAge }} +- name: INFLUXDB3_L1_CONSOLIDATION_MIN_AGE + value: {{ .l1ConsolidationMinAge | quote }} +{{- end }} +{{- if .l1ConsolidationMinRunSets }} +- name: INFLUXDB3_L1_CONSOLIDATION_MIN_RUN_SETS + value: {{ .l1ConsolidationMinRunSets | quote }} +{{- end }} +{{- if .l1TargetFileSize }} +- name: INFLUXDB3_L1_TARGET_FILE_SIZE + value: {{ .l1TargetFileSize | quote }} +{{- end }} +{{- if .l1PromotionCount }} +- name: INFLUXDB3_L1_PROMOTION_COUNT + value: {{ .l1PromotionCount | quote }} +{{- end }} +{{- if .l2TailTargetSize }} +- name: INFLUXDB3_L2_TAIL_TARGET_SIZE + value: {{ .l2TailTargetSize | quote }} +{{- end }} +{{- if .l2TargetFileSize }} +- name: INFLUXDB3_L2_TARGET_FILE_SIZE + value: {{ .l2TargetFileSize | quote }} +{{- end }} +{{- if .l2PromotionCount }} +- name: INFLUXDB3_L2_PROMOTION_COUNT + value: {{ .l2PromotionCount | quote }} +{{- end }} +{{- if .l3TailTargetSize }} +- name: INFLUXDB3_L3_TAIL_TARGET_SIZE + value: {{ .l3TailTargetSize | quote }} +{{- end }} +{{- if .l3TargetFileSize }} +- name: INFLUXDB3_L3_TARGET_FILE_SIZE + value: {{ .l3TargetFileSize | quote }} +{{- end }} +{{- if .l3PromotionCount }} +- name: INFLUXDB3_L3_PROMOTION_COUNT + value: {{ .l3PromotionCount | quote }} +{{- end }} +{{- if .l4TailTargetSize }} +- name: INFLUXDB3_L4_TAIL_TARGET_SIZE + value: {{ .l4TailTargetSize | quote }} +{{- end }} +{{- if .l4TargetFileSize }} +- name: INFLUXDB3_L4_TARGET_FILE_SIZE + value: {{ .l4TargetFileSize | quote }} +{{- end }} +{{- if .finalCompactionAge }} +- name: INFLUXDB3_FINAL_COMPACTION_AGE + value: {{ .finalCompactionAge | quote }} +{{- end }} +{{- if .compactorInputSizeBudget }} +- name: INFLUXDB3_COMPACTOR_INPUT_SIZE_BUDGET + value: {{ .compactorInputSizeBudget | quote }} +{{- end }} +{{- if .compactorMaxConcurrentMerges }} +- name: INFLUXDB3_COMPACTOR_MAX_CONCURRENT_MERGES + value: {{ .compactorMaxConcurrentMerges | quote }} +{{- end }} +{{- if .compactorMaxSourceRunSetsPerPromotion }} +- name: INFLUXDB3_COMPACTOR_MAX_SOURCE_RUN_SETS_PER_PROMOTION + value: {{ .compactorMaxSourceRunSetsPerPromotion | quote }} +{{- end }} +{{- if .compactorJobHeartbeatTimeout }} +- name: INFLUXDB3_COMPACTOR_JOB_HEARTBEAT_TIMEOUT + value: {{ .compactorJobHeartbeatTimeout | quote }} +{{- end }} +{{- if .compactorCleanupCooldown }} +- name: INFLUXDB3_COMPACTOR_CLEANUP_COOLDOWN + value: {{ .compactorCleanupCooldown | quote }} +{{- end }} +{{- if .walReplicaRecoveryConcurrency }} +- name: INFLUXDB3_WAL_REPLICA_RECOVERY_CONCURRENCY + value: {{ .walReplicaRecoveryConcurrency | quote }} +{{- end }} +{{- if .walReplicaSteadyConcurrency }} +- name: INFLUXDB3_WAL_REPLICA_STEADY_CONCURRENCY + value: {{ .walReplicaSteadyConcurrency | quote }} +{{- end }} +{{- if .walReplicaRecoveryTailSkipLimit }} +- name: INFLUXDB3_WAL_REPLICA_RECOVERY_TAIL_SKIP_LIMIT + value: {{ .walReplicaRecoveryTailSkipLimit | quote }} +{{- end }} +{{- if .replicaGen0LoadConcurrency }} +- name: INFLUXDB3_REPLICA_GEN0_LOAD_CONCURRENCY + value: {{ .replicaGen0LoadConcurrency | quote }} +{{- end }} +{{- if .replicaMaxBufferSize }} +- name: INFLUXDB3_REPLICA_MAX_BUFFER_SIZE + value: {{ .replicaMaxBufferSize | quote }} +{{- end }} +{{- if .fileCacheEvictAfter }} +- name: INFLUXDB3_FILE_CACHE_EVICT_AFTER + value: {{ .fileCacheEvictAfter | quote }} +{{- end }} +{{- if hasKey . "enableAutoDvc" }} +- name: INFLUXDB3_ENABLE_AUTO_DVC + value: {{ ternary "true" "false" .enableAutoDvc | quote }} +{{- end }} +{{- if .autoDvcMaxCardinality }} +- name: INFLUXDB3_AUTO_DVC_MAX_CARDINALITY + value: {{ .autoDvcMaxCardinality | quote }} +{{- end }} +{{- if .autoDvcRefreshInterval }} +- name: INFLUXDB3_AUTO_DVC_REFRESH_INTERVAL + value: {{ .autoDvcRefreshInterval | quote }} +{{- end }} +{{- if hasKey . "disableHybridQuery" }} +- name: INFLUXDB3_DISABLE_HYBRID_QUERY + value: {{ ternary "true" "false" .disableHybridQuery | quote }} +{{- end }} {{- end }} {{- end }} diff --git a/charts/influxdb3-enterprise/templates/compactor-statefulset.yaml b/charts/influxdb3-enterprise/templates/compactor-statefulset.yaml index 5bdd24d0..3290e592 100644 --- a/charts/influxdb3-enterprise/templates/compactor-statefulset.yaml +++ b/charts/influxdb3-enterprise/templates/compactor-statefulset.yaml @@ -29,6 +29,7 @@ spec: checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }} checksum/secret: {{ include (print $.Template.BasePath "/secret-object-storage.yaml") . | sha256sum }} checksum/license: {{ include "influxdb3-enterprise.licenseChecksum" . }} + checksum/webui: {{ include (print $.Template.BasePath "/secret-webui.yaml") . | sha256sum }} {{- with .Values.compactor.podAnnotations }} {{- toYaml . | nindent 8 }} {{- end }} @@ -62,7 +63,7 @@ spec: imagePullPolicy: {{ .Values.image.pullPolicy }} args: - serve - - --mode=compact + - --mode={{ .Values.compactor.mode | default "compact" }} - --node-id=$(POD_NAME) {{- if .Values.engine.upgradePachaTree }} - --upgrade-pacha-tree @@ -73,6 +74,7 @@ spec: env: {{- include "influxdb3-enterprise.podNameEnv" . | nindent 12 }} {{- include "influxdb3-enterprise.licenseEnv" . | nindent 12 }} + {{- include "influxdb3-enterprise.webuiSessionSecretEnv" . | nindent 12 }} {{- include "influxdb3-enterprise.objectStoreSecretEnv" . | nindent 12 }} {{- include "influxdb3-enterprise.adminTokenEnv" . | nindent 12 }} {{- include "influxdb3-enterprise.permissionTokensEnv" . | nindent 12 }} @@ -80,27 +82,47 @@ spec: - name: INFLUXDB3_NUM_IO_THREADS value: {{ . | quote }} {{- end }} + {{- if hasKey .Values.compactor "numCores" }} + - name: INFLUXDB3_NUM_CORES + value: {{ .Values.compactor.numCores | quote }} + {{- end }} {{- with .Values.compactor.compaction }} {{- if .gen2Duration }} - - name: INFLUXDB3_ENTERPRISE_COMPACTION_GEN2_DURATION + - name: INFLUXDB3_COMPACTION_GEN2_DURATION value: {{ .gen2Duration | quote }} {{- end }} {{- if .multipliers }} - - name: INFLUXDB3_ENTERPRISE_COMPACTION_MULTIPLIERS + - name: INFLUXDB3_COMPACTION_MULTIPLIERS value: {{ .multipliers | quote }} {{- end }} {{- if .maxNumFilesPerPlan }} - - name: INFLUXDB3_ENTERPRISE_COMPACTION_MAX_NUM_FILES_PER_PLAN + - name: INFLUXDB3_COMPACTION_MAX_NUM_FILES_PER_PLAN value: {{ .maxNumFilesPerPlan | quote }} {{- end }} + {{- if .rowLimit }} + - name: INFLUXDB3_COMPACTION_ROW_LIMIT + value: {{ .rowLimit | quote }} + {{- end }} + {{- if .snapshotsLimit }} + - name: INFLUXDB3_COMPACTION_SNAPSHOTS_LIMIT + value: {{ .snapshotsLimit | quote }} + {{- end }} {{- if .cleanupWait }} - - name: INFLUXDB3_ENTERPRISE_COMPACTION_CLEANUP_WAIT + - name: INFLUXDB3_COMPACTION_CLEANUP_WAIT value: {{ .cleanupWait | quote }} {{- end }} {{- if .checkInterval }} - - name: INFLUXDB3_ENTERPRISE_COMPACTION_CHECK_INTERVAL + - name: INFLUXDB3_COMPACTION_CHECK_INTERVAL value: {{ .checkInterval | quote }} {{- end }} + {{- if .inputSizeBudget }} + - name: INFLUXDB3_COMPACTOR_INPUT_SIZE_BUDGET + value: {{ .inputSizeBudget | quote }} + {{- end }} + {{- if .maxConcurrentMerges }} + - name: INFLUXDB3_COMPACTOR_MAX_CONCURRENT_MERGES + value: {{ .maxConcurrentMerges | quote }} + {{- end }} {{- if .gen1Duration }} - name: INFLUXDB3_GEN1_DURATION value: {{ .gen1Duration | quote }} @@ -111,9 +133,10 @@ spec: - name: INFLUXDB3_EXEC_MEM_POOL_SIZE value: {{ .execMemPoolBytes | quote }} {{- end }} - {{- if .forceSnapshotMemThreshold }} - - name: INFLUXDB3_FORCE_SNAPSHOT_MEM_THRESHOLD - value: {{ .forceSnapshotMemThreshold | quote }} + {{- $forceSnapshotMemSize := .forceSnapshotMemSize | default .forceSnapshotMemThreshold }} + {{- if $forceSnapshotMemSize }} + - name: INFLUXDB3_FORCE_SNAPSHOT_MEM_SIZE + value: {{ $forceSnapshotMemSize | quote }} {{- end }} {{- end }} {{- with .Values.compactor.datafusion }} diff --git a/charts/influxdb3-enterprise/templates/configmap.yaml b/charts/influxdb3-enterprise/templates/configmap.yaml index ac4fac3f..670e9ef5 100644 --- a/charts/influxdb3-enterprise/templates/configmap.yaml +++ b/charts/influxdb3-enterprise/templates/configmap.yaml @@ -21,8 +21,9 @@ data: {{- if .Values.cluster.catalogSyncInterval }} INFLUXDB3_CATALOG_SYNC_INTERVAL: {{ .Values.cluster.catalogSyncInterval | quote }} {{- end }} - {{- if .Values.cluster.waitForRunningIngestor }} - INFLUXDB3_WAIT_FOR_RUNNING_INGESTOR: {{ .Values.cluster.waitForRunningIngestor | quote }} + {{- $waitForRunningIngester := .Values.cluster.waitForRunningIngester | default .Values.cluster.waitForRunningIngestor }} + {{- if $waitForRunningIngester }} + INFLUXDB3_WAIT_FOR_RUNNING_INGESTER: {{ $waitForRunningIngester | quote }} {{- end }} # Security @@ -34,6 +35,9 @@ data: {{- if .Values.security.auth.disabled }} INFLUXDB3_WITHOUT_AUTH: {{ ternary "true" "false" .Values.security.auth.disabled | quote }} {{- end }} + {{- if .Values.security.auth.userAuthType }} + INFLUXDB3_USER_AUTH_TYPE: {{ .Values.security.auth.userAuthType | quote }} + {{- end }} {{- if .Values.security.auth.disableAuthz }} INFLUXDB3_DISABLE_AUTHZ: {{ join "," .Values.security.auth.disableAuthz | quote }} {{- end }} @@ -42,7 +46,7 @@ data: {{- $adminToken := get $auth "adminToken" | default dict }} {{- $adminTokenRecovery := get $adminToken "recovery" | default dict }} {{- if get $adminTokenRecovery "httpBind" }} - INFLUXDB3_ADMIN_TOKEN_RECOVERY_HTTP_BIND: {{ get $adminTokenRecovery "httpBind" | quote }} + INFLUXDB3_ADMIN_TOKEN_RECOVERY_HTTP_BIND_ADDR: {{ get $adminTokenRecovery "httpBind" | quote }} {{- end }} # HTTP @@ -51,7 +55,7 @@ data: INFLUXDB3_HTTP_BIND_ADDR: {{ .bind | quote }} {{- end }} {{- if .maxRequestSize }} - INFLUXDB3_MAX_HTTP_REQUEST_SIZE: {{ .maxRequestSize | int | quote }} + INFLUXDB3_MAX_HTTP_REQUEST_SIZE: {{ .maxRequestSize | quote }} {{- end }} {{- end }} @@ -128,11 +132,13 @@ data: # Caching configuration {{- with .Values.caching }} - {{- if .parquetMemCacheSize }} - INFLUXDB3_PARQUET_MEM_CACHE_SIZE: {{ .parquetMemCacheSize | quote }} - {{ end }} - {{- if .parquetMemCacheQueryPathDuration }} - INFLUXDB3_PARQUET_MEM_CACHE_QUERY_PATH_DURATION: {{ .parquetMemCacheQueryPathDuration | quote }} + {{- $fileCacheSize := .fileCacheSize | default .parquetMemCacheSize }} + {{- if $fileCacheSize }} + INFLUXDB3_FILE_CACHE_SIZE: {{ $fileCacheSize | quote }} + {{- end }} + {{- $fileCacheRecency := .fileCacheRecency | default .parquetMemCacheQueryPathDuration }} + {{- if $fileCacheRecency }} + INFLUXDB3_FILE_CACHE_RECENCY: {{ $fileCacheRecency | quote }} {{- end }} {{- if .parquetMemCachePrunePercentage }} INFLUXDB3_PARQUET_MEM_CACHE_PRUNE_PERCENTAGE: {{ .parquetMemCachePrunePercentage | quote }} @@ -140,12 +146,26 @@ data: {{- if .parquetMemCachePruneInterval }} INFLUXDB3_PARQUET_MEM_CACHE_PRUNE_INTERVAL: {{ .parquetMemCachePruneInterval | quote }} {{- end }} - {{- if hasKey . "disableParquetMemCache" }} - INFLUXDB3_DISABLE_PARQUET_MEM_CACHE: {{ ternary "true" "false" .disableParquetMemCache | quote }} + {{- if hasKey . "disableFileCache" }} + INFLUXDB3_DISABLE_FILE_CACHE: {{ ternary "true" "false" .disableFileCache | quote }} + {{- else if hasKey . "disableParquetMemCache" }} + INFLUXDB3_DISABLE_FILE_CACHE: {{ ternary "true" "false" .disableParquetMemCache | quote }} {{- end }} {{- if .preemptiveCacheAge }} INFLUXDB3_PREEMPTIVE_CACHE_AGE: {{ .preemptiveCacheAge | quote }} {{- end }} + {{- if .fileCacheEvictAfter }} + INFLUXDB3_FILE_CACHE_EVICT_AFTER: {{ .fileCacheEvictAfter | quote }} + {{- end }} + {{- if hasKey . "enableAutoDvc" }} + INFLUXDB3_ENABLE_AUTO_DVC: {{ ternary "true" "false" .enableAutoDvc | quote }} + {{- end }} + {{- if .autoDvcMaxCardinality }} + INFLUXDB3_AUTO_DVC_MAX_CARDINALITY: {{ .autoDvcMaxCardinality | quote }} + {{- end }} + {{- if .autoDvcRefreshInterval }} + INFLUXDB3_AUTO_DVC_REFRESH_INTERVAL: {{ .autoDvcRefreshInterval | quote }} + {{- end }} {{- if hasKey . "lastValueCacheDisableFromHistory" }} INFLUXDB3_LAST_VALUE_CACHE_DISABLE_FROM_HISTORY: {{ ternary "true" "false" .lastValueCacheDisableFromHistory | quote }} {{- end }} @@ -203,8 +223,10 @@ data: {{- if .logFormat }} INFLUXDB3_LOG_FORMAT: {{ .logFormat | quote }} {{- end }} - {{- if .queryLogSize }} - INFLUXDB3_QUERY_LOG_SIZE: {{ .queryLogSize }} + {{- if .queryLogMaxEntries }} + INFLUXDB3_QUERY_LOG_MAX_ENTRIES: {{ .queryLogMaxEntries }} + {{- else if .queryLogSize }} + INFLUXDB3_QUERY_LOG_MAX_ENTRIES: {{ .queryLogSize }} {{- end }} {{- end }} diff --git a/charts/influxdb3-enterprise/templates/ingester-statefulset.yaml b/charts/influxdb3-enterprise/templates/ingester-statefulset.yaml index 18798097..d5bc0599 100644 --- a/charts/influxdb3-enterprise/templates/ingester-statefulset.yaml +++ b/charts/influxdb3-enterprise/templates/ingester-statefulset.yaml @@ -24,6 +24,7 @@ spec: checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }} checksum/secret: {{ include (print $.Template.BasePath "/secret-object-storage.yaml") . | sha256sum }} checksum/license: {{ include "influxdb3-enterprise.licenseChecksum" . }} + checksum/webui: {{ include (print $.Template.BasePath "/secret-webui.yaml") . | sha256sum }} {{- with .Values.ingester.podAnnotations }} {{- toYaml . | nindent 8 }} {{- end }} @@ -57,7 +58,7 @@ spec: imagePullPolicy: {{ .Values.image.pullPolicy }} args: - serve - - --mode=ingest + - --mode={{ .Values.ingester.mode | default "ingest" }} - --node-id=$(POD_NAME) {{- if .Values.engine.upgradePachaTree }} - --upgrade-pacha-tree @@ -68,6 +69,7 @@ spec: env: {{- include "influxdb3-enterprise.podNameEnv" . | nindent 12 }} {{- include "influxdb3-enterprise.licenseEnv" . | nindent 12 }} + {{- include "influxdb3-enterprise.webuiSessionSecretEnv" . | nindent 12 }} {{- include "influxdb3-enterprise.objectStoreSecretEnv" . | nindent 12 }} {{- include "influxdb3-enterprise.adminTokenEnv" . | nindent 12 }} {{- include "influxdb3-enterprise.permissionTokensEnv" . | nindent 12 }} @@ -75,6 +77,10 @@ spec: - name: INFLUXDB3_NUM_IO_THREADS value: {{ . | quote }} {{- end }} + {{- if hasKey .Values.ingester "numCores" }} + - name: INFLUXDB3_NUM_CORES + value: {{ .Values.ingester.numCores | quote }} + {{- end }} {{- with .Values.ingester.wal }} {{- if .flushInterval }} - name: INFLUXDB3_WAL_FLUSH_INTERVAL @@ -102,9 +108,10 @@ spec: - name: INFLUXDB3_EXEC_MEM_POOL_SIZE value: {{ .execMemPoolBytes | quote }} {{- end }} - {{- if .forceSnapshotMemThreshold }} - - name: INFLUXDB3_FORCE_SNAPSHOT_MEM_THRESHOLD - value: {{ .forceSnapshotMemThreshold | quote }} + {{- $forceSnapshotMemSize := .forceSnapshotMemSize | default .forceSnapshotMemThreshold }} + {{- if $forceSnapshotMemSize }} + - name: INFLUXDB3_FORCE_SNAPSHOT_MEM_SIZE + value: {{ $forceSnapshotMemSize | quote }} {{- end }} {{- end }} {{- with .Values.ingester.datafusion }} diff --git a/charts/influxdb3-enterprise/templates/processor-statefulset.yaml b/charts/influxdb3-enterprise/templates/processor-statefulset.yaml index ffcab275..0f50d014 100644 --- a/charts/influxdb3-enterprise/templates/processor-statefulset.yaml +++ b/charts/influxdb3-enterprise/templates/processor-statefulset.yaml @@ -36,6 +36,7 @@ spec: checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }} checksum/secret: {{ include (print $.Template.BasePath "/secret-object-storage.yaml") . | sha256sum }} checksum/license: {{ include "influxdb3-enterprise.licenseChecksum" . }} + checksum/webui: {{ include (print $.Template.BasePath "/secret-webui.yaml") . | sha256sum }} {{- with .Values.processingEngine.podAnnotations }} {{- toYaml . | nindent 8 }} {{- end }} @@ -69,14 +70,18 @@ spec: imagePullPolicy: {{ .Values.image.pullPolicy }} args: - serve - - --mode=process + - --mode={{ .Values.processingEngine.mode | default "process" }} - --node-id=$(POD_NAME) + {{- if .Values.engine.upgradePachaTree }} + - --upgrade-pacha-tree + {{- end }} envFrom: - configMapRef: name: {{ include "influxdb3-enterprise.fullname" . }}-config env: {{- include "influxdb3-enterprise.podNameEnv" . | nindent 12 }} {{- include "influxdb3-enterprise.licenseEnv" . | nindent 12 }} + {{- include "influxdb3-enterprise.webuiSessionSecretEnv" . | nindent 12 }} {{- include "influxdb3-enterprise.objectStoreSecretEnv" . | nindent 12 }} {{- include "influxdb3-enterprise.adminTokenEnv" . | nindent 12 }} {{- include "influxdb3-enterprise.permissionTokensEnv" . | nindent 12 }} @@ -84,6 +89,10 @@ spec: - name: INFLUXDB3_NUM_IO_THREADS value: {{ . | quote }} {{- end }} + {{- if hasKey .Values.processingEngine "numCores" }} + - name: INFLUXDB3_NUM_CORES + value: {{ .Values.processingEngine.numCores | quote }} + {{- end }} {{- with .Values.processingEngine.pluginDir }} - name: INFLUXDB3_PLUGIN_DIR value: {{ . | quote }} @@ -113,9 +122,10 @@ spec: - name: INFLUXDB3_EXEC_MEM_POOL_SIZE value: {{ .execMemPoolBytes | quote }} {{- end }} - {{- if .forceSnapshotMemThreshold }} - - name: INFLUXDB3_FORCE_SNAPSHOT_MEM_THRESHOLD - value: {{ .forceSnapshotMemThreshold | quote }} + {{- $forceSnapshotMemSize := .forceSnapshotMemSize | default .forceSnapshotMemThreshold }} + {{- if $forceSnapshotMemSize }} + - name: INFLUXDB3_FORCE_SNAPSHOT_MEM_SIZE + value: {{ $forceSnapshotMemSize | quote }} {{- end }} {{- end }} {{- with .Values.processingEngine.datafusion }} diff --git a/charts/influxdb3-enterprise/templates/querier-statefulset.yaml b/charts/influxdb3-enterprise/templates/querier-statefulset.yaml index 639f6c53..33a15922 100644 --- a/charts/influxdb3-enterprise/templates/querier-statefulset.yaml +++ b/charts/influxdb3-enterprise/templates/querier-statefulset.yaml @@ -24,6 +24,7 @@ spec: checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }} checksum/secret: {{ include (print $.Template.BasePath "/secret-object-storage.yaml") . | sha256sum }} checksum/license: {{ include "influxdb3-enterprise.licenseChecksum" . }} + checksum/webui: {{ include (print $.Template.BasePath "/secret-webui.yaml") . | sha256sum }} {{- with .Values.querier.podAnnotations }} {{- toYaml . | nindent 8 }} {{- end }} @@ -57,7 +58,7 @@ spec: imagePullPolicy: {{ .Values.image.pullPolicy }} args: - serve - - --mode=query + - --mode={{ .Values.querier.mode | default "query" }} - --node-id=$(POD_NAME) {{- if .Values.engine.upgradePachaTree }} - --upgrade-pacha-tree @@ -68,6 +69,7 @@ spec: env: {{- include "influxdb3-enterprise.podNameEnv" . | nindent 12 }} {{- include "influxdb3-enterprise.licenseEnv" . | nindent 12 }} + {{- include "influxdb3-enterprise.webuiSessionSecretEnv" . | nindent 12 }} {{- include "influxdb3-enterprise.objectStoreSecretEnv" . | nindent 12 }} {{- include "influxdb3-enterprise.adminTokenEnv" . | nindent 12 }} {{- include "influxdb3-enterprise.permissionTokensEnv" . | nindent 12 }} @@ -75,14 +77,19 @@ spec: - name: INFLUXDB3_NUM_IO_THREADS value: {{ . | quote }} {{- end }} + {{- if hasKey .Values.querier "numCores" }} + - name: INFLUXDB3_NUM_CORES + value: {{ .Values.querier.numCores | quote }} + {{- end }} {{- with .Values.querier.memory }} {{- if .execMemPoolBytes }} - name: INFLUXDB3_EXEC_MEM_POOL_SIZE value: {{ .execMemPoolBytes | quote }} {{- end }} - {{- if .forceSnapshotMemThreshold }} - - name: INFLUXDB3_FORCE_SNAPSHOT_MEM_THRESHOLD - value: {{ .forceSnapshotMemThreshold | quote }} + {{- $forceSnapshotMemSize := .forceSnapshotMemSize | default .forceSnapshotMemThreshold }} + {{- if $forceSnapshotMemSize }} + - name: INFLUXDB3_FORCE_SNAPSHOT_MEM_SIZE + value: {{ $forceSnapshotMemSize | quote }} {{- end }} {{- end }} {{- with .Values.querier.datafusion }} diff --git a/charts/influxdb3-enterprise/templates/secret-webui.yaml b/charts/influxdb3-enterprise/templates/secret-webui.yaml new file mode 100644 index 00000000..5dec88fb --- /dev/null +++ b/charts/influxdb3-enterprise/templates/secret-webui.yaml @@ -0,0 +1,13 @@ +{{- $webui := .Values.webui | default dict }} +{{- if and (get $webui "sessionSecret") (not (get $webui "existingSecret")) }} +apiVersion: v1 +kind: Secret +metadata: + name: {{ include "influxdb3-enterprise.webuiSecretName" . }} + namespace: {{ .Release.Namespace }} + labels: + {{- include "influxdb3-enterprise.labels" . | nindent 4 }} +type: Opaque +stringData: + session-secret: {{ get $webui "sessionSecret" | quote }} +{{- end }} diff --git a/charts/influxdb3-enterprise/values.yaml b/charts/influxdb3-enterprise/values.yaml index 109521c3..f122a66e 100644 --- a/charts/influxdb3-enterprise/values.yaml +++ b/charts/influxdb3-enterprise/values.yaml @@ -29,7 +29,16 @@ cluster: # Cluster management settings for multi-node coordination # replicationInterval: "250ms" # Data replication interval between nodes # catalogSyncInterval: "10s" # Catalog synchronization interval -# waitForRunningIngestor: "10s" # Startup wait time for ingestor +# waitForRunningIngester: "10s" # Startup wait time for ingester +# waitForRunningIngestor: "10s" # legacy values key; renders wait-for-running-ingester + +# Web UI / Explorer configuration (3.11+) +# Add "webui" to a component mode, for example ingester.mode: "all,webui", +# to enable the integrated Explorer. A session secret is required by InfluxDB +# whenever webui mode is enabled. +webui: + sessionSecret: "" + existingSecret: "" # ============================================================================ # Storage Engine Configuration (3.11+) @@ -46,18 +55,61 @@ engine: # PachaTree-specific configuration pachaTree: - # Shard configuration + # General + # enginePathPrefix: "" # Optional path prefix for engine files # shardCount: 1 # Number of shards (default: 1) - # maxTotalColumns: 5000 # Max columns across all tables (default: 5000) + # maxTotalColumns: 10000000 # Max columns across the instance + # enableRetention: true # Enable retention enforcement + # disableHybridQuery: false # Query only upgraded-engine data during migration - # Snapshot configuration - # snapshotSize: 100000 # Snapshot size threshold (default: 100000) + # WAL and snapshot configuration + # walBufferSize: "15mb" # Maximum in-memory WAL buffer size + # walFlushConcurrency: 2 # WAL flush concurrency + # snapshotSize: "250mb" # Maximum snapshot bucket size before rotation + # snapshotDuration: "10s" # Snapshot rotation interval + # maxConcurrentSnapshots: 5 # Concurrent snapshot operations before backpressure + # walSnapshotsToKeep: 5 # Snapshot manifests worth of WAL history to retain # Gen0 file configuration + # gen0MaxRowsPerFile: 10000000 # Max rows per Gen0 file # gen0MaxFileSize: "100mb" # Max size for Gen0 files (default: 100mb) + # mergeThresholdSize: "62.5mb" # File merge threshold (default: snapshot-size / 4) + + # PachaTree compaction levels + # l1TailTargetSize: "600mb" + # l1ConsolidationTargetSize: "1gb" + # l1ConsolidationMinAge: "5m" + # l1ConsolidationMinRunSets: 2 + # l1TargetFileSize: "25mb" + # l1PromotionCount: 3 + # l2TailTargetSize: "1.2gb" + # l2TargetFileSize: "75mb" + # l2PromotionCount: 3 + # l3TailTargetSize: "2.5gb" + # l3TargetFileSize: "75mb" + # l3PromotionCount: 4 + # l4TailTargetSize: "50gb" + # l4TargetFileSize: "125mb" + # finalCompactionAge: "4h" + # compactorInputSizeBudget: "2gb" + # compactorMaxConcurrentMerges: 8 + # compactorMaxSourceRunSetsPerPromotion: 20 + # compactorJobHeartbeatTimeout: "1h" + # compactorCleanupCooldown: "10m" # WAL replication # walReplicaQueueLength: 1000 # WAL replica queue length (default: 1000) + # walReplicaRecoveryConcurrency: 8 + # walReplicaSteadyConcurrency: 8 + # walReplicaRecoveryTailSkipLimit: 128 + # replicaGen0LoadConcurrency: 16 + # replicaMaxBufferSize: "50%" + + # PachaTree cache helpers. These can also be set globally under caching. + # fileCacheEvictAfter: "24h" + # enableAutoDvc: false + # autoDvcMaxCardinality: 100000 + # autoDvcRefreshInterval: "10m" # ============================================================================ # Object Storage Configuration @@ -197,6 +249,10 @@ license: ingester: enabled: true replicas: 2 # Number of ingester nodes + # Server mode override. Defaults to "ingest". + # For single-node local/home deployments, set to "all" and disable + # separate querier and compactor pods. + mode: "" # Resource allocation resources: @@ -208,6 +264,7 @@ ingester: memory: "8Gi" # Thread configuration + # numCores: 48 # --num-cores # numIOThreads: 2 # Global IO threads (--num-io-threads) # Extra environment variables for ingester pods. Overrides top-level extraEnv entries with the same name. @@ -221,7 +278,8 @@ ingester: # Percentages recommended for automatic container sizing. # memory: # execMemPoolBytes: "20%" # --exec-mem-pool-size (renamed from --exec-mem-pool-bytes) - # forceSnapshotMemThreshold: "50%" # --force-snapshot-mem-threshold + # forceSnapshotMemSize: "50%" # --force-snapshot-mem-size + # forceSnapshotMemThreshold: "50%" # legacy values key; renders force-snapshot-mem-size # DataFusion configuration # datafusion: @@ -300,6 +358,8 @@ ingester: querier: enabled: true replicas: 2 # Number of querier nodes + # Server mode override. Defaults to "query". + mode: "" # Resource allocation resources: @@ -311,6 +371,7 @@ querier: memory: "8Gi" # Thread configuration + # numCores: 64 # --num-cores # numIOThreads: 2 # Global IO threads (--num-io-threads) # Extra environment variables for querier pods. Overrides top-level extraEnv entries with the same name. @@ -324,7 +385,8 @@ querier: # Percentages recommended for automatic container sizing. # memory: # execMemPoolBytes: "20%" # --exec-mem-pool-size (renamed from --exec-mem-pool-bytes) - # forceSnapshotMemThreshold: "50%" # --force-snapshot-mem-threshold + # forceSnapshotMemSize: "50%" # --force-snapshot-mem-size + # forceSnapshotMemThreshold: "50%" # legacy values key; renders force-snapshot-mem-size # DataFusion configuration # datafusion: @@ -394,6 +456,8 @@ compactor: # Multiple compactors will cause data corruption and conflicts # DO NOT change this value unless explicitly advised by InfluxData replicas: 1 + # Server mode override. Defaults to "compact". + mode: "" # Resource allocation (CPU-intensive) resources: @@ -405,6 +469,7 @@ compactor: memory: "4Gi" # Thread configuration + # numCores: 32 # --num-cores # numIOThreads: 2 # Global IO threads (--num-io-threads) # Extra environment variables for compactor pods. Overrides top-level extraEnv entries with the same name. @@ -418,7 +483,8 @@ compactor: # Percentages recommended for automatic container sizing. # memory: # execMemPoolBytes: "20%" # --exec-mem-pool-size (renamed from --exec-mem-pool-bytes) - # forceSnapshotMemThreshold: "50%" # --force-snapshot-mem-threshold + # forceSnapshotMemSize: "50%" # --force-snapshot-mem-size + # forceSnapshotMemThreshold: "50%" # legacy values key; renders force-snapshot-mem-size # DataFusion configuration # datafusion: @@ -428,10 +494,17 @@ compactor: # Compaction settings # compaction: + # # PachaTree options: + # inputSizeBudget: "2gb" + # maxConcurrentMerges: 8 + # + # # Parquet-engine options. Ignored by fresh 3.11+ PachaTree clusters. # gen1Duration: "10m" # 1m, 5m, or 10m # gen2Duration: "20m" # multipliers: "3,4,6,5" # Compaction level multipliers # maxNumFilesPerPlan: 500 + # rowLimit: 1000000 + # snapshotsLimit: 1000 # cleanupWait: "10m" # checkInterval: "10s" @@ -482,6 +555,9 @@ compactor: processingEngine: enabled: false replicas: 1 + # Server mode override. Defaults to "process". + # Use "process,query" when scheduled plugins should query locally. + mode: "" # Resource allocation resources: @@ -493,6 +569,7 @@ processingEngine: memory: "8Gi" # Thread configuration + # numCores: 16 # --num-cores # numIOThreads: 2 # Global IO threads (--num-io-threads) # Extra environment variables for Processing Engine pods. Overrides top-level extraEnv entries with the same name. @@ -506,7 +583,8 @@ processingEngine: # Percentages recommended for automatic container sizing. # memory: # execMemPoolBytes: "20%" # --exec-mem-pool-size (renamed from --exec-mem-pool-bytes) - # forceSnapshotMemThreshold: "50%" # --force-snapshot-mem-threshold + # forceSnapshotMemSize: "50%" # --force-snapshot-mem-size + # forceSnapshotMemThreshold: "50%" # legacy values key; renders force-snapshot-mem-size # DataFusion configuration # datafusion: @@ -606,6 +684,9 @@ security: auth: # Disable authentication (dev/testing only - NOT RECOMMENDED) disabled: false + # User authentication methods to enable: none, basic, oauth, or a comma-separated list. + # Defaults to none when unset. + userAuthType: "" # Disable authorization for specific endpoints # Default: ["health"] - allows Kubernetes probes without authentication # Available endpoints: health, ping, metrics @@ -630,7 +711,7 @@ security: # HTTP server configuration http: # bind: "0.0.0.0:8181" - # maxRequestSize: 10485760 # 10MB default + # maxRequestSize: "10mb" # 10MB default; use explicit 3.11 size units # Graceful shutdown configuration (3.11+) shutdown: @@ -647,6 +728,10 @@ caching: # fileCacheSize: "20%" # Total budget (3.11+: renamed from parquetMemCacheSize) # fileCacheRecency: "5h" # Query path duration (3.11+: renamed from parquetMemCacheQueryPathDuration) # disableFileCache: false # Disable file cache (3.11+: renamed from disableParquetMemCache) + # fileCacheEvictAfter: "24h" # Evict files not accessed within this duration + # enableAutoDvc: false # Enable automatic distinct value cache creation + # autoDvcMaxCardinality: 100000 # Max cardinality for auto-created DVCs + # autoDvcRefreshInterval: "10m" # Refresh interval for auto-created DVCs # Legacy names (3.9.x, still work with deprecation warnings in 3.11+) # parquetMemCacheSize: "20%" @@ -685,7 +770,8 @@ caching: # logFilter: "" # Override log filter (--log-filter) # logDestination: "stdout" # Override log destination (--log-destination) # logFormat: "full" # Override log format (--log-format) -# queryLogSize: 1000 # Query log size (--query-log-size) +# queryLogMaxEntries: 1000 # Query log max entries (--query-log-max-entries) +# queryLogSize: 1000 # legacy values key; renders query-log-max-entries # Traces configuration (optional) # traces: