values.yaml 29.9 KB
Newer Older
1
# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# SPDX-License-Identifier: Apache-2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# Used to generate top-level secrets (overridden by custom-values.yaml)
16

17
18
19
20
21
22
23
global:
  etcd:
    # -- Whether this chart should install the bundled etcd subchart.
    # When true, deploys etcd and auto-configures the operator with its address.
    # When false, etcd is not deployed. Use dynamo-operator.etcdAddr to point at an external instance if you are bringing your own etcd.
    install: false

24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
  kai-scheduler:
    # -- Whether this chart should install the bundled kai-scheduler subchart.
    # When true, deploys kai-scheduler and its CRDs. Integration is automatically enabled.
    # NOTE: For production environments, it is recommended to install kai-scheduler separately.
    install: false
    # -- Whether to enable Kai Scheduler integration (queue creation, schedulerName injection).
    # Set to true when kai-scheduler is available in the cluster (installed externally).
    # Automatically enabled when install=true. The operator uses this to decide whether to
    # inject schedulerName and queue labels into pod templates.
    enabled: false

  grove:
    # -- Whether this chart should install the bundled Grove subchart.
    # When true, deploys the Grove operator cluster-wide. Integration is automatically enabled.
    # NOTE: For production environments, it is recommended to install Grove separately.
    install: false
    # -- Whether to enable Grove integration (multinode orchestration via PodCliqueSets).
    # Set to true when Grove is available in the cluster (installed externally).
    # Automatically true when install=true. The operator uses this to decide whether to
    # create PodCliqueSets for multinode deployments.
    enabled: false

46
47
48
# Subcharts configuration

# Dynamo operator configuration
49
dynamo-operator:
50
  # -- Whether to enable the Dynamo Kubernetes operator deployment
51
  enabled: true
52

53
54
55
56
  # -- Whether to manage CRDs via a pre-install/pre-upgrade hook Job.
  # The Job runs the operator image with the crd-apply tool to apply CRDs via server-side apply.
  upgradeCRD: true

57
58
59
  # Environment variables to pass to operator Deployment.
  env: []

60
  # -- NATS server address for operator communication (leave empty to use the bundled NATS chart). Format: "nats://hostname:port"
61
  natsAddr: ""
62

63
  # -- etcd server address for an external etcd instance. Only needed when using external etcd without the bundled subchart. Format: "http://hostname:port" or "https://hostname:port"
64
  etcdAddr: ""
65

Biswa Panda's avatar
Biswa Panda committed
66
67
68
69
  nats:
    # -- Whether the NATS is enabled
    enabled: true

70
71
  # -- URL for the Model Express server if not deployed by this helm chart. This is ignored if Model Express server is installed by this helm chart (global.model-express.enabled is true).
  modelExpressURL: ""
72
  # -- DEPRECATED: Namespace-restricted mode is deprecated and will be removed in a future release. Use cluster-wide mode (the default) instead. Do not enable this for new deployments.
73
  namespaceRestriction:
74
    # -- DEPRECATED: Do not enable for new deployments. Namespace-restricted mode is deprecated.
75
    enabled: false
76
    # -- DEPRECATED: Only used in namespace-restricted mode, which is deprecated.
77
    targetNamespace:
78
    # -- DEPRECATED: Only used in namespace-restricted mode, which is deprecated.
79
    lease:
80
      # -- DEPRECATED: Lease duration for namespace-restricted mode, which is deprecated.
81
      duration: 30s
82
      # -- DEPRECATED: Lease renew interval for namespace-restricted mode, which is deprecated.
83
84
      renewInterval: 10s

85
  # -- DEPRECATED: GPU discovery for namespace-scoped operators is deprecated along with namespace-restricted mode.
86
  gpuDiscovery:
87
    # -- DEPRECATED: Only relevant when namespaceRestriction is enabled, which is deprecated.
88
89
    enabled: true

90
91
  # -- The Dynamo discovery backend to use. Default is "kubernetes" for Kubernetes API service discovery. Set to "etcd" to use ETCD for discovery. --
  discoveryBackend: "kubernetes"
92
93

  # Controller manager configuration
94
  controllerManager:
95
    # -- Node tolerations for controller manager pods
96
    tolerations: []
97

98
    # -- Affinity for controller manager pods
99
    affinity: {}
100

101
102
103
104
105
106
107
    # Leader election configuration for cluster-wide coordination
    leaderElection:
      # -- Leader election ID for cluster-wide coordination. WARNING: All cluster-wide operators must use the SAME ID to prevent split-brain. Different IDs would allow multiple leaders simultaneously.
      id: ""  # If empty, defaults to: dynamo.nvidia.com (shared across all cluster-wide operators)
      # -- Namespace for leader election leases (only used in cluster-wide mode). If empty, defaults to kube-system for cluster-wide coordination. All cluster-wide operators should use the SAME namespace for proper leader election.
      namespace: ""

108
    manager:
109
      # Container image configuration for the operator manager
110
      image:
111
        # -- Official NVIDIA Dynamo operator image repository
112
        repository: "nvcr.io/nvidia/ai-dynamo/kubernetes-operator"
113
        # -- Image tag (leave empty to use chart default)
114
        tag: ""
115
        # -- Image pull policy - when to pull the image
116
        pullPolicy: IfNotPresent
117
118

      # Command line arguments for the operator manager
119
      args:
120
        # -- Health probe endpoint for Kubernetes health checks
121
        - --health-probe-bind-address=:8081
122
        # -- Metrics endpoint for Prometheus scraping (localhost only for security)
123
        - --metrics-bind-address=127.0.0.1:8080
124
125

  # -- Secrets for pulling private container images
126
  imagePullSecrets: []
127
128

  # Core Dynamo platform configuration
129
  dynamo:
130
    # -- How long to wait before forcefully terminating Grove instances
131
    groveTerminationDelay: 4h
132
133

    # Docker registry configuration for private repositories
134
    dockerRegistry:
135
      # -- Whether to use Kubernetes secrets for registry authentication
136
      useKubernetesSecret: false
137
      # -- Docker registry server URL
138
      server:
139
      # -- Registry username
140
      username:
141
      # -- Registry password (consider using existingSecretName instead)
142
      password:
143
      # -- Name of existing Kubernetes secret containing registry credentials
144
      existingSecretName:
145
      # -- Whether the registry uses HTTPS
146
      secure: true
147
148

    # Ingress configuration for external access
149
    ingress:
150
      # -- Whether to create ingress resources
151
      enabled: false
152
      # -- Ingress class name (e.g., "nginx", "traefik")
153
      className:
154
      # -- Secret name containing TLS certificates
155
      tlsSecretName: my-tls-secret
156
157

    # Istio service mesh configuration
158
    istio:
159
      # -- Whether to enable Istio integration
160
      enabled: false
161
      # -- Istio gateway name for routing
162
      gateway:
163
164

    # -- Host suffix for generated ingress hostnames
165
    ingressHostSuffix: ""
166
167

    # -- Whether VirtualServices should support HTTPS routing
168
    virtualServiceSupportsHTTPS: false
169

170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
    # Service mesh integration for EPP components.
    # When enabled, the operator generates mesh-specific resources (e.g., Istio
    # DestinationRules) so sidecar proxies connect correctly to EPP.
    serviceMesh:
      # -- Whether to enable service mesh resource generation for EPP
      enabled: false
      # -- Service mesh provider. Supported: "istio"
      provider: "istio"
      # -- Istio-specific settings (only used when provider is "istio")
      istio:
        # -- TLS mode for DestinationRules: "SIMPLE", "DISABLE", "ISTIO_MUTUAL", "MUTUAL"
        tlsMode: "SIMPLE"
        # -- Skip TLS certificate verification (for self-signed EPP certs)
        insecureSkipVerify: true

185
186
187
188
189
    # Metrics configuration
    metrics:
      # -- Endpoint that services can use to retrieve metrics. If set, dynamo operator will automatically inject the PROMETHEUS_ENDPOINT environment variable into services it manages. Users can override the value of the PROMETHEUS_ENDPOINT environment variable by modifying the corresponding deployment's environment variables
      prometheusEndpoint: ""

190
191
192
193
194
    # MPI Run configuration
    mpiRun:
      # -- Name of the secret containing the SSH key for MPI Run
      secretName: "mpi-run-ssh-secret"

195
196
197
198
199
200
201
  # Webhook configuration for admission control and validation
  webhook:
    # Certificate configuration for webhook TLS
    certificateSecret:
      # -- Name of the Kubernetes secret containing webhook TLS certificates. The secret must contain three keys: tls.crt (server certificate), tls.key (server private key), and ca.crt (Certificate Authority certificate).
      name: webhook-server-cert

202
      # -- Whether to manage the certificate secret externally. When false (default), the operator's built-in cert-controller generates and rotates certificates automatically. When true, you must create the secret manually before installing the chart.
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
      external: false

    # -- CA bundle (base64 encoded) for webhook validation. Only used when certificateSecret.external=true. For automatic certificate generation or cert-manager integration, leave this empty as it will be injected automatically.
    caBundle: ""

    # -- Webhook failure policy controls how Kubernetes handles requests when the webhook is unavailable. 'Fail' (recommended for production) rejects requests if the webhook cannot be reached, ensuring strict validation. 'Ignore' allows requests through if the webhook is unavailable, providing availability over validation guarantees.
    failurePolicy: Fail

    # -- Timeout in seconds for webhook validation calls. If the webhook doesn't respond within this time, the request will be handled according to the failurePolicy.
    timeoutSeconds: 10

    # Namespace selector for webhook scope control
    # -- Custom namespace selector for webhook validation. Use this to include or exclude specific namespaces from webhook validation. For CLUSTER-WIDE operators, you can exclude namespaces managed by namespace-restricted operators by using: matchExpressions: [{ key: "dynamo-operator", operator: "NotIn", values: ["namespace-restricted"] }]. For NAMESPACE-RESTRICTED operators, leave empty as it will be auto-configured to match only the operator's namespace.
    namespaceSelector: {}

    # cert-manager integration for automated certificate lifecycle management
    certManager:
220
      # -- Whether to use cert-manager for automatic certificate management. Requires cert-manager to be installed in the cluster. When enabled, cert-manager will provision and rotate certificates instead of the operator's built-in cert-controller.
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
      enabled: false

      # Certificate configuration for cert-manager
      certificate:
        # -- Certificate duration for webhook certificates managed by cert-manager (e.g., "8760h" for 1 year). cert-manager will automatically renew the certificate before it expires.
        duration: "8760h"

        # -- Time before certificate expiration to trigger renewal (e.g., "360h" for 15 days). cert-manager will attempt to renew the certificate when this threshold is reached.
        renewBefore: "360h"

        # Root CA configuration for cert-manager
        rootCA:
          # -- Duration for the root CA certificate (e.g., "87600h" for 10 years). The root CA typically has a much longer lifetime than the leaf certificates it signs.
          duration: "87600h"

          # -- Time before root CA expiration to trigger renewal (e.g., "720h" for 30 days). Renewing a CA can be disruptive as all signed certificates must be reissued.
          renewBefore: "720h"

239
240
  # Checkpoint configuration for fast pod restore using CRIU/cuda-checkpoint
  # NOTE: The checkpoint infrastructure (PVC + DaemonSet) must be installed separately
241
  # using the snapshot Helm chart in each namespace where checkpointing is needed.
242
243
  checkpoint:
    # -- Whether to enable checkpoint/restore functionality
244
    enabled: false
245

246
# Grove component - distributed inference orchestration
247
# Installation is controlled by global.grove.install above.
248
grove:
249
250
251
252
  # -- Node tolerations for Grove pods
  tolerations: []
  # -- Affinity for Grove pods
  affinity: {}
253
254

# Kai Scheduler component - advanced workload scheduling
255
256
# Installation is controlled by global.kai-scheduler.install above.
# Integration is controlled by global.kai-scheduler.enabled above.
257
kai-scheduler:
258
259
260
261
262
263
  # Global configuration for kai-scheduler (applies to all components including crd-upgrader)
  global:
    # -- Node tolerations for kai-scheduler pods
    tolerations: []
    # -- Affinity for kai-scheduler pods
    affinity: {}
264

265
266
# etcd configuration - distributed key-value store
# Installation is controlled by global.etcd.install above.
267
etcd:
268
  image:
269
    # -- following bitnami announcement for brownout - https://github.com/bitnami/charts/tree/main/bitnami/etcd#%EF%B8%8F-important-notice-upcoming-changes-to-the-bitnami-catalog, we need to use the legacy repository until we migrate to the new "secure" repository
270
    repository: bitnamilegacy/etcd
271
    tag: 3.5.18-debian-12-r5
272

273
  # Persistent storage configuration for etcd data
274
  persistence:
275
    # Whether to enable persistent storage (recommended for production)
276
277
278
    enabled: true
    # Use the cluster default storage-class or override with a named class
    storageClass: null
279
    # Size of persistent volume for etcd data
280
    size: 1Gi
281
282

  # Pre-upgrade job configuration
283
  preUpgradeJob:
284
    # Whether to run pre-upgrade validation jobs
285
    enabled: false
286
287

  # Number of etcd replicas (1 for single-node, 3+ for HA)
288
  replicaCount: 1
289
290
291

  # Authentication and authorization settings
  # Explicitly remove authentication for simplified internal communication
292
293
  auth:
    rbac:
294
      # Whether to create RBAC authentication (disabled for internal use)
295
296
      create: false

297
  # Health check configuration
298
  readinessProbe:
299
    # Whether to enable readiness probes (disabled to reduce startup complexity)
300
301
302
    enabled: false

  livenessProbe:
303
    # Whether to enable liveness probes (disabled to reduce startup complexity)
304
305
    enabled: false

306
307
308
309
310
311
  # Pod Disruption Budget configuration
  # Should be enabled for HA deployments with 3+ replicas
  pdb:
    # Whether to create a PodDisruptionBudget (disabled for single-node deployments)
    create: false

312
  # Node tolerations for etcd pods (allows scheduling on specific nodes)
313
314
  tolerations: []

315
316
317
  # Affinity for etcd pods
  affinity: {}

318
# NATS configuration - messaging system for operator communication
319
nats:
320
  # -- Whether to enable NATS deployment, disable if you want to use an external NATS instance. For complete configuration options, see: https://github.com/nats-io/k8s/tree/main/helm/charts/nats , all nats settings should be prefixed with "nats."
321
  enabled: true
322
323
324
325

  # TLS Certificate Authority configuration for secure communication
  # Reference a common CA Certificate or Bundle in all nats config `tls` blocks and nats-box contexts
  # Note: `tls.verify` still must be set in the appropriate nats config `tls` blocks to require mTLS
326
  tlsCA:
327
    # Whether to enable TLS CA configuration
328
329
    enabled: false

330
  # Core NATS server configuration
331
  config:
332
    # NATS clustering for high availability (multiple NATS servers)
333
    cluster:
334
      # Whether to enable NATS clustering (disabled for single-node setups)
335
336
      enabled: false

337
    # JetStream - persistent messaging and streaming capabilities
338
    jetstream:
339
      # Whether to enable JetStream (recommended for persistent messaging)
340
341
      enabled: true

342
      # File-based storage for JetStream streams and consumers
343
      fileStore:
344
        # Whether to enable file storage (persistent across restarts)
345
        enabled: true
346
        # Directory path for JetStream file storage
347
348
349
        dir: /data

        ############################################################
350
        # Persistent Volume Claim for JetStream file storage
351
352
        ############################################################
        pvc:
353
          # Whether to create a PVC for JetStream storage
354
          enabled: true
355
          # Size of the persistent volume for JetStream data
356
          size: 10Gi
357
          # Storage class name (leave empty for default)
358
359
          storageClassName:

360
          # Advanced PVC configuration (merge additional fields)
361
362
363
          # https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.24/#persistentvolumeclaim-v1-core
          merge: {}
          patch: []
364
          # PVC name (defaults to "{{ include "nats.fullname" $ }}-js")
365
366
          name:

367
        # Maximum size for JetStream file storage (defaults to PVC size)
368
369
        maxSize:

370
      # Memory-based storage for JetStream (non-persistent)
371
      memoryStore:
372
        # Whether to enable memory storage (faster but not persistent)
373
374
        enabled: false

375
376
      # Advanced JetStream configuration
      # For options see: https://docs.nats.io/running-a-nats-service/configuration#jetstream
377
378
379
      merge: {}
      patch: []

380
    # Core NATS server settings
381
    nats:
382
      # Port for NATS client connections
383
      port: 4222
384
385

      # TLS configuration for encrypted connections
386
      tls:
387
        # Whether to enable TLS encryption
388
        enabled: false
389
390
        # Advanced TLS configuration
        # For options see: https://docs.nats.io/running-a-nats-service/configuration/securing_nats/tls
391
392
393
        merge: {}
        patch: []

394
    # Leaf nodes for creating NATS topologies and remote connections
395
    leafnodes:
396
      # Whether to enable leaf node connections
397
398
      enabled: false

399
    # WebSocket support for browser-based NATS clients
400
    websocket:
401
      # Whether to enable WebSocket protocol support
402
403
      enabled: false

404
    # MQTT protocol bridge for IoT device connectivity
405
    mqtt:
406
      # Whether to enable MQTT protocol support
407
408
      enabled: false

409
    # Gateway connections for multi-cluster NATS deployments
410
    gateway:
411
      # Whether to enable gateway connections
412
413
      enabled: false

414
    # HTTP monitoring endpoint for NATS server metrics
415
    monitor:
416
      # Whether to enable HTTP monitoring interface
417
      enabled: true
418
      # Port for monitoring HTTP endpoint
419
      port: 8222
420
421

      # TLS configuration for monitoring endpoint
422
      tls:
423
424
        # Whether to enable HTTPS for monitoring (requires config.nats.tls enabled)
        # When enabled, monitoring port will use HTTPS with the options from config.nats.tls
425
426
        enabled: false

427
    # Go pprof profiling endpoint for performance debugging
428
    profiling:
429
      # Whether to enable profiling endpoint (for debugging only)
430
      enabled: false
431
      # Port for profiling endpoint
432
433
      port: 65432

434
    # Account resolver for multi-tenant NATS deployments
435
    resolver:
436
      # Whether to enable account resolution (for advanced multi-tenancy)
437
438
      enabled: false

439
440
441
    # Server naming configuration
    # Adds a prefix to the server name, which defaults to the pod name
    # Helpful for ensuring server name is unique in a super cluster
442
443
    serverNamePrefix: ""

444
445
446
    # Advanced NATS configuration merging and patching
    # For complete options see: https://docs.nats.io/running-a-nats-service/configuration
    # Special rules apply:
447
448
449
450
451
    #  1. strings that start with << and end with >> will be unquoted
    #     use this for variables and numbers with units
    #  2. keys ending in $include will be switched to include directives
    #     keys are sorted alphabetically, use prefix before $includes to control includes ordering
    #     paths should be relative to /etc/nats-config/nats.conf
452
    # Example:
453
454
455
456
457
458
459
460
    #   merge:
    #     $include: ./my-config.conf
    #     zzz$include: ./my-config-last.conf
    #     server_name: nats
    #     authorization:
    #       token: << $TOKEN >>
    #     jetstream:
    #       max_memory_store: << 1GB >>
461
    merge:
462
463
464
      # 15MB to accommodate prompt embeddings: 10MB decoded → ~13.3MB base64-encoded + metadata
      # Also allows larger context: 256K tokens (int32 - 4 bytes each) = 1MB
      max_payload: 15728640
465
466
467
    patch: []

  ############################################################
468
  # NATS container configuration in StatefulSet
469
470
  ############################################################
  container:
471
    # NATS server container image configuration
472
    image:
473
      # Official NATS server repository
474
      repository: nats
475
      # NATS server version (Alpine-based for smaller size)
476
      tag: 2.10.21-alpine
477
      # Image pull policy (leave empty for chart default)
478
      pullPolicy:
479
      # Custom registry URL (leave empty for Docker Hub)
480
481
      registry:

482
483
    # Container port configuration
    # Note: Ports must also be enabled in the config section above
484
485
    # https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.24/#containerport-v1-core
    ports:
486
      # Main NATS client connection port
487
      nats: {}
488
      # Leaf node connection port
489
      leafnodes: {}
490
      # WebSocket connection port
491
      websocket: {}
492
      # MQTT protocol port
493
      mqtt: {}
494
      # Cluster communication port
495
      cluster: {}
496
      # Gateway connection port
497
      gateway: {}
498
      # HTTP monitoring port
499
      monitor: {}
500
      # Go profiling port
501
502
      profiling: {}

503
504
505
    # Environment variables for the NATS container
    # Map with key as env var name, value can be string or map
    # Example:
506
507
508
509
510
511
512
513
514
    #   env:
    #     GOMEMLIMIT: 7GiB
    #     TOKEN:
    #       valueFrom:
    #         secretKeyRef:
    #           name: nats-auth
    #           key: token
    env: {}

515
    # Advanced container configuration merging and patching
516
517
518
519
520
    # https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.24/#container-v1-core
    merge: {}
    patch: []

  ############################################################
521
  # Configuration reloader container for hot config updates
522
523
  ############################################################
  reloader:
524
    # Whether to enable the config reloader sidecar container
525
    enabled: true
526
527

    # Config reloader container image
528
    image:
529
      # Official NATS config reloader repository
530
      repository: natsio/nats-server-config-reloader
531
      # Config reloader version
532
      tag: 0.16.0
533
      # Image pull policy (leave empty for chart default)
534
      pullPolicy:
535
      # Custom registry URL (leave empty for Docker Hub)
536
537
      registry:

538
    # Environment variables for the reloader container
539
540
    env: {}

541
542
    # Volume mount prefixes from NATS container to share with reloader
    # All NATS container volume mounts with these prefixes will be mounted into the reloader
543
544
545
    natsVolumeMountPrefixes:
    - /etc/

546
    # Advanced reloader container configuration
547
548
549
550
551
    # https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.24/#container-v1-core
    merge: {}
    patch: []

  ############################################################
552
  # Prometheus metrics exporter container (optional)
553
  ############################################################
554
  # Note: config.monitor must be enabled for this to work
555
  promExporter:
556
    # Whether to enable Prometheus metrics exporter sidecar
557
558
559
    enabled: false

  ############################################################
560
  # Kubernetes Service for NATS access
561
562
  ############################################################
  service:
563
    # Whether to create a Kubernetes Service for NATS
564
565
    enabled: true

566
567
568
    # Service port configuration
    # Additional boolean field 'enabled' controls whether port is exposed in the service
    # Note: Ports must also be enabled in the config section above
569
570
    # https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.24/#serviceport-v1-core
    ports:
571
      # Main NATS client connection port
572
573
      nats:
        enabled: true
574
      # Leaf node connection port
575
576
      leafnodes:
        enabled: true
577
      # WebSocket connection port
578
579
      websocket:
        enabled: true
580
      # MQTT protocol port
581
582
      mqtt:
        enabled: true
583
      # Cluster communication port (typically internal only)
584
585
      cluster:
        enabled: false
586
      # Gateway connection port (typically internal only)
587
588
      gateway:
        enabled: false
589
      # HTTP monitoring port (typically internal only)
590
591
      monitor:
        enabled: false
592
      # Go profiling port (typically internal only)
593
594
595
      profiling:
        enabled: false

596
    # Advanced service configuration
597
598
599
    # https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.24/#service-v1-core
    merge: {}
    patch: []
600
    # Service name (defaults to "{{ include "nats.fullname" $ }}")
601
602
603
    name:

  ############################################################
604
  # Advanced NATS Kubernetes resource configuration
605
606
  ############################################################

607
  # StatefulSet configuration for NATS server persistence
608
  statefulSet:
609
    # Advanced StatefulSet configuration merging and patching
610
611
612
    # https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.24/#statefulset-v1-apps
    merge: {}
    patch: []
613
    # StatefulSet name (defaults to "{{ include "nats.fullname" $ }}")
614
615
    name:

616
  # Pod template configuration for NATS StatefulSet
617
  podTemplate:
618
619
    # Whether to add a hash of the ConfigMap as a pod annotation
    # This will cause the StatefulSet to roll when the ConfigMap is updated
620
621
    configChecksumAnnotation: true

622
623
624
625
626
627
628
    # Pod topology spread constraints for better distribution across nodes
    # Map of topologyKey: topologySpreadConstraint
    # labelSelector will be added automatically to match StatefulSet pods
    # Example:
    #   topologySpreadConstraints:
    #     kubernetes.io/hostname:
    #       maxSkew: 1
629
630
    topologySpreadConstraints: {}

631
    # Advanced pod template configuration
632
    # https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.24/#pod-v1-core
633
634
    merge:
      spec:
635
        # Node tolerations for NATS pods (allows scheduling on specific nodes)
636
        tolerations: []
637
638
        # Affinity for NATS pods
        affinity: {}
639
640
    patch: []

641
  # Headless service for StatefulSet pod discovery
642
  headlessService:
643
    # Advanced headless service configuration
644
645
646
    # https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.24/#service-v1-core
    merge: {}
    patch: []
647
    # Headless service name (defaults to "{{ include "nats.fullname" $ }}-headless")
648
649
    name:

650
  # ConfigMap for NATS server configuration
651
  configMap:
652
    # Advanced ConfigMap configuration
653
654
655
    # https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.24/#configmap-v1-core
    merge: {}
    patch: []
656
    # ConfigMap name (defaults to "{{ include "nats.fullname" $ }}-config")
657
658
    name:

659
  # Pod Disruption Budget for controlled rolling updates
660
  podDisruptionBudget:
661
    # Whether to create a PodDisruptionBudget (recommended for production)
662
663
    enabled: true

664
  # Service Account for NATS server pods
665
  serviceAccount:
666
    # Whether to create and use a dedicated service account
667
668
669
    enabled: false

  ############################################################
670
671
  # NATS Box - CLI tools and debugging container
  # NATS Box provides CLI tools for interacting with NATS server
672
673
  ############################################################
  natsBox:
674
    # Whether to deploy NATS Box for CLI access and debugging
675
    enabled: false
676
677

    ############################################################
678
    # NATS client contexts for authentication and connection
679
680
    ############################################################
    contexts:
681
      # Default context configuration
682
      default:
683
        # Credentials-based authentication
684
        creds:
685
          # Inline credentials file contents (base64 encoded)
686
          contents:
687
          # Name of existing secret containing credentials file
688
          secretName:
689
          # Directory to mount credentials (defaults to /etc/nats-creds/<context-name>)
690
          dir:
691
          # Key name in secret for credentials file
692
          key: nats.creds
693
694

        # NKey-based authentication (public/private key pairs)
695
        nkey:
696
          # Inline NKey file contents (base64 encoded)
697
          contents:
698
          # Name of existing secret containing NKey file
699
          secretName:
700
          # Directory to mount NKey (defaults to /etc/nats-nkeys/<context-name>)
701
          dir:
702
          # Key name in secret for NKey file
703
          key: nats.nk
704
705

        # TLS client certificate authentication
706
        tls:
707
          # Name of existing secret containing TLS client certificates
708
          secretName:
709
          # Directory to mount certificates (defaults to /etc/nats-certs/<context-name>)
710
          dir:
711
          # Certificate file name in secret
712
          cert: tls.crt
713
          # Private key file name in secret
714
715
          key: tls.key

716
717
        # Advanced context configuration
        # For options see: https://docs.nats.io/using-nats/nats-tools/nats_cli#nats-contexts
718
719
720
        merge: {}
        patch: []

721
    # Name of context to select by default for NATS CLI operations
722
723
724
    defaultContextName: default

    ############################################################
725
    # NATS Box container configuration
726
727
    ############################################################
    container:
728
      # NATS Box container image
729
      image:
730
        # Official NATS Box repository with CLI tools
731
        repository: natsio/nats-box
732
        # NATS Box version
733
        tag: 0.14.5
734
        # Image pull policy (leave empty for chart default)
735
        pullPolicy:
736
        # Custom registry URL (leave empty for Docker Hub)
737
738
        registry:

739
      # Environment variables for NATS Box container
740
741
      env: {}

742
      # Advanced container configuration
743
744
745
      # https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.24/#container-v1-core
      merge: {}
      patch: []
746
747

    # Service Account for NATS Box deployment
748
    serviceAccount:
749
      # Whether to create and use a dedicated service account for NATS Box
750
      enabled: false
751

752
    # Pod template configuration for NATS Box deployment
753
754
755
    podTemplate:
      merge:
        spec:
756
          # Node tolerations for NATS Box pods
757
          tolerations: []
758
759
          # Affinity for NATS Box pods
          affinity: {}
760
      patch: []