values.yaml 29.3 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
# Subcharts configuration

# Dynamo operator configuration
20
dynamo-operator:
21
  # -- Whether to enable the Dynamo Kubernetes operator deployment
22
  enabled: true
23
24

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

  # -- etcd server address for operator state storage (leave empty to use the bundled etcd chart). Format: "http://hostname:port" or "https://hostname:port"
28
  etcdAddr: ""
29

Biswa Panda's avatar
Biswa Panda committed
30
31
32
33
  nats:
    # -- Whether the NATS is enabled
    enabled: true

34
35
36
  # -- 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: ""
  # -- Namespace access controls for the operator
37
  namespaceRestriction:
38
39
    # -- Whether to restrict operator to specific namespaces. By default, the operator will run with cluster-wide permissions. Only 1 instance of the operator should be deployed in the cluster. If you want to deploy multiple operator instances, you can set this to true and specify the target namespace (by default, the target namespace is the helm release namespace).
    enabled: false
40
    # -- Target namespace for operator deployment (leave empty for current namespace)
41
    targetNamespace:
42
43
44
45
46
47
48
    # Namespace scope marker lease configuration (used to prevent conflicts when running both cluster-wide and namespace-restricted operators)
    lease:
      # Duration before the namespace scope marker lease expires if not renewed (namespace-restricted mode only). When a namespace-restricted operator is running, it creates a lease in its namespace. The cluster-wide operator detects this lease and excludes that namespace from processing. If the namespace operator stops renewing the lease (e.g., crashes), the lease expires and the cluster-wide operator automatically resumes processing that namespace.
      duration: 30s
      # Interval for renewing the namespace scope marker lease (namespace-restricted mode only). The namespace-restricted operator renews its lease at this interval to signal it's still running.
      renewInterval: 10s

49
50
  # -- The Dynamo discovery backend to use. Default is "kubernetes" for Kubernetes API service discovery. Set to "etcd" to use ETCD for discovery. --
  discoveryBackend: "kubernetes"
51
52

  # Controller manager configuration
53
  controllerManager:
54
    # -- Node tolerations for controller manager pods
55
    tolerations: []
56

57
    # -- Affinity for controller manager pods
58
    affinity: {}
59

60
61
62
63
64
65
66
    # 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: ""

67
    manager:
68
      # Container image configuration for the operator manager
69
      image:
70
        # -- Official NVIDIA Dynamo operator image repository
71
        repository: "nvcr.io/nvidia/ai-dynamo/kubernetes-operator"
72
        # -- Image tag (leave empty to use chart default)
73
        tag: ""
74
        # -- Image pull policy - when to pull the image
75
        pullPolicy: IfNotPresent
76
77

      # Command line arguments for the operator manager
78
      args:
79
        # -- Health probe endpoint for Kubernetes health checks
80
        - --health-probe-bind-address=:8081
81
        # -- Metrics endpoint for Prometheus scraping (localhost only for security)
82
        - --metrics-bind-address=127.0.0.1:8080
83
84

  # -- Secrets for pulling private container images
85
  imagePullSecrets: []
86
87

  # Core Dynamo platform configuration
88
  dynamo:
89
    # -- How long to wait before forcefully terminating Grove instances
90
    groveTerminationDelay: 4h
91
92

    # Internal utility images used by the platform
93
    internalImages:
94
      # -- Debugger image for troubleshooting deployments
95
      debugger: python:3.12-slim
96
97

    # -- Whether to enable restricted security contexts for enhanced security
98
    enableRestrictedSecurityContext: false
99
100

    # Docker registry configuration for private repositories
101
    dockerRegistry:
102
      # -- Whether to use Kubernetes secrets for registry authentication
103
      useKubernetesSecret: false
104
      # -- Docker registry server URL
105
      server:
106
      # -- Registry username
107
      username:
108
      # -- Registry password (consider using existingSecretName instead)
109
      password:
110
      # -- Name of existing Kubernetes secret containing registry credentials
111
      existingSecretName:
112
      # -- Whether the registry uses HTTPS
113
      secure: true
114
115

    # Ingress configuration for external access
116
    ingress:
117
      # -- Whether to create ingress resources
118
      enabled: false
119
      # -- Ingress class name (e.g., "nginx", "traefik")
120
      className:
121
      # -- Secret name containing TLS certificates
122
      tlsSecretName: my-tls-secret
123
124

    # Istio service mesh configuration
125
    istio:
126
      # -- Whether to enable Istio integration
127
      enabled: false
128
      # -- Istio gateway name for routing
129
      gateway:
130
131

    # -- Host suffix for generated ingress hostnames
132
    ingressHostSuffix: ""
133
134

    # -- Whether VirtualServices should support HTTPS routing
135
    virtualServiceSupportsHTTPS: false
136

137
138
139
140
141
    # 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: ""

142
143
144
145
146
147
148
149
150
    # MPI Run configuration
    mpiRun:
      # -- Name of the secret containing the SSH key for MPI Run
      secretName: "mpi-run-ssh-secret"
      # SSH key generation configuration
      sshKeygen:
        # -- Whether to enable SSH key generation for MPI Run
        enabled: true

151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
  # Webhook configuration for admission control and validation
  webhook:
    # -- Whether to enable admission webhooks for resource validation. When enabled, the operator will validate DynamoComponentDeployment and DynamoGraphDeployment resources before they are created or updated in the cluster. Enabled by default for production-ready validation and better error reporting.
    enabled: true

    # 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

      # -- Whether to manage the certificate secret externally. When false (default), certificates are automatically generated via Helm hooks during installation. When true, you must create the secret manually before installing the chart.
      external: false

    # -- Certificate validity duration in days for auto-generated certificates. Only used when certManager.enabled=false and certificateSecret.external=false. After this duration, certificates will expire and need to be regenerated.
    certificateValidity: 365

    # Container image for certificate generation and CA injection jobs
    # Only used when certManager.enabled=false and certificateSecret.external=false
    certGenerator:
      image:
        # -- Container image repository for certificate generation jobs. This image must contain both openssl and kubectl commands.
        repository: bitnami/kubectl
        # -- Container image tag for certificate generation jobs
        tag: latest
        # -- Image pull policy for certificate generation jobs
        pullPolicy: IfNotPresent

    # -- 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:
      # -- Whether to use cert-manager for automatic certificate management. Requires cert-manager to be installed in the cluster. When enabled, cert-manager will automatically generate, renew, and rotate certificates, and the automatic certificate generation via Helm hooks will be disabled.
      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"

212
213
214
215
216

# Grove component - distributed inference orchestration
grove:
  # -- Whether to enable Grove for multi-node inference coordination, if enabled, the Grove operator will be deployed cluster-wide
  enabled: false
217
218
219
220
  # -- Node tolerations for Grove pods
  tolerations: []
  # -- Affinity for Grove pods
  affinity: {}
221
222
223
224
225

# Kai Scheduler component - advanced workload scheduling
kai-scheduler:
  # -- Whether to enable Kai Scheduler for intelligent resource allocation, if enabled, the Kai Scheduler operator will be deployed cluster-wide
  enabled: false
226
227
228
229
230
231
  # 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: {}
232
233

# etcd configuration - distributed key-value store for operator state
234
etcd:
235

236
  # -- Whether to enable etcd deployment, disable if you want to use an external etcd instance. For complete configuration options, see: https://github.com/bitnami/charts/tree/main/bitnami/etcd , all etcd settings should be prefixed with "etcd."
237
  enabled: true
238

239
  image:
240
    # -- 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
241
    repository: bitnamilegacy/etcd
242
    tag: 3.5.18-debian-12-r5
243

244
  # Persistent storage configuration for etcd data
245
  persistence:
246
    # Whether to enable persistent storage (recommended for production)
247
248
249
    enabled: true
    # Use the cluster default storage-class or override with a named class
    storageClass: null
250
    # Size of persistent volume for etcd data
251
    size: 1Gi
252
253

  # Pre-upgrade job configuration
254
  preUpgradeJob:
255
    # Whether to run pre-upgrade validation jobs
256
    enabled: false
257
258

  # Number of etcd replicas (1 for single-node, 3+ for HA)
259
  replicaCount: 1
260
261
262

  # Authentication and authorization settings
  # Explicitly remove authentication for simplified internal communication
263
264
  auth:
    rbac:
265
      # Whether to create RBAC authentication (disabled for internal use)
266
267
      create: false

268
  # Health check configuration
269
  readinessProbe:
270
    # Whether to enable readiness probes (disabled to reduce startup complexity)
271
272
273
    enabled: false

  livenessProbe:
274
    # Whether to enable liveness probes (disabled to reduce startup complexity)
275
276
    enabled: false

277
278
279
280
281
282
  # 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

283
  # Node tolerations for etcd pods (allows scheduling on specific nodes)
284
285
  tolerations: []

286
287
288
  # Affinity for etcd pods
  affinity: {}

289
# NATS configuration - messaging system for operator communication
290
nats:
291
  # -- 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."
292
  enabled: true
293
294
295
296

  # 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
297
  tlsCA:
298
    # Whether to enable TLS CA configuration
299
300
    enabled: false

301
  # Core NATS server configuration
302
  config:
303
    # NATS clustering for high availability (multiple NATS servers)
304
    cluster:
305
      # Whether to enable NATS clustering (disabled for single-node setups)
306
307
      enabled: false

308
    # JetStream - persistent messaging and streaming capabilities
309
    jetstream:
310
      # Whether to enable JetStream (recommended for persistent messaging)
311
312
      enabled: true

313
      # File-based storage for JetStream streams and consumers
314
      fileStore:
315
        # Whether to enable file storage (persistent across restarts)
316
        enabled: true
317
        # Directory path for JetStream file storage
318
319
320
        dir: /data

        ############################################################
321
        # Persistent Volume Claim for JetStream file storage
322
323
        ############################################################
        pvc:
324
          # Whether to create a PVC for JetStream storage
325
          enabled: true
326
          # Size of the persistent volume for JetStream data
327
          size: 10Gi
328
          # Storage class name (leave empty for default)
329
330
          storageClassName:

331
          # Advanced PVC configuration (merge additional fields)
332
333
334
          # https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.24/#persistentvolumeclaim-v1-core
          merge: {}
          patch: []
335
          # PVC name (defaults to "{{ include "nats.fullname" $ }}-js")
336
337
          name:

338
        # Maximum size for JetStream file storage (defaults to PVC size)
339
340
        maxSize:

341
      # Memory-based storage for JetStream (non-persistent)
342
      memoryStore:
343
        # Whether to enable memory storage (faster but not persistent)
344
345
        enabled: false

346
347
      # Advanced JetStream configuration
      # For options see: https://docs.nats.io/running-a-nats-service/configuration#jetstream
348
349
350
      merge: {}
      patch: []

351
    # Core NATS server settings
352
    nats:
353
      # Port for NATS client connections
354
      port: 4222
355
356

      # TLS configuration for encrypted connections
357
      tls:
358
        # Whether to enable TLS encryption
359
        enabled: false
360
361
        # Advanced TLS configuration
        # For options see: https://docs.nats.io/running-a-nats-service/configuration/securing_nats/tls
362
363
364
        merge: {}
        patch: []

365
    # Leaf nodes for creating NATS topologies and remote connections
366
    leafnodes:
367
      # Whether to enable leaf node connections
368
369
      enabled: false

370
    # WebSocket support for browser-based NATS clients
371
    websocket:
372
      # Whether to enable WebSocket protocol support
373
374
      enabled: false

375
    # MQTT protocol bridge for IoT device connectivity
376
    mqtt:
377
      # Whether to enable MQTT protocol support
378
379
      enabled: false

380
    # Gateway connections for multi-cluster NATS deployments
381
    gateway:
382
      # Whether to enable gateway connections
383
384
      enabled: false

385
    # HTTP monitoring endpoint for NATS server metrics
386
    monitor:
387
      # Whether to enable HTTP monitoring interface
388
      enabled: true
389
      # Port for monitoring HTTP endpoint
390
      port: 8222
391
392

      # TLS configuration for monitoring endpoint
393
      tls:
394
395
        # 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
396
397
        enabled: false

398
    # Go pprof profiling endpoint for performance debugging
399
    profiling:
400
      # Whether to enable profiling endpoint (for debugging only)
401
      enabled: false
402
      # Port for profiling endpoint
403
404
      port: 65432

405
    # Account resolver for multi-tenant NATS deployments
406
    resolver:
407
      # Whether to enable account resolution (for advanced multi-tenancy)
408
409
      enabled: false

410
411
412
    # 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
413
414
    serverNamePrefix: ""

415
416
417
    # Advanced NATS configuration merging and patching
    # For complete options see: https://docs.nats.io/running-a-nats-service/configuration
    # Special rules apply:
418
419
420
421
422
    #  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
423
    # Example:
424
425
426
427
428
429
430
431
    #   merge:
    #     $include: ./my-config.conf
    #     zzz$include: ./my-config-last.conf
    #     server_name: nats
    #     authorization:
    #       token: << $TOKEN >>
    #     jetstream:
    #       max_memory_store: << 1GB >>
432
    merge:
433
434
435
      # 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
436
437
438
    patch: []

  ############################################################
439
  # NATS container configuration in StatefulSet
440
441
  ############################################################
  container:
442
    # NATS server container image configuration
443
    image:
444
      # Official NATS server repository
445
      repository: nats
446
      # NATS server version (Alpine-based for smaller size)
447
      tag: 2.10.21-alpine
448
      # Image pull policy (leave empty for chart default)
449
      pullPolicy:
450
      # Custom registry URL (leave empty for Docker Hub)
451
452
      registry:

453
454
    # Container port configuration
    # Note: Ports must also be enabled in the config section above
455
456
    # https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.24/#containerport-v1-core
    ports:
457
      # Main NATS client connection port
458
      nats: {}
459
      # Leaf node connection port
460
      leafnodes: {}
461
      # WebSocket connection port
462
      websocket: {}
463
      # MQTT protocol port
464
      mqtt: {}
465
      # Cluster communication port
466
      cluster: {}
467
      # Gateway connection port
468
      gateway: {}
469
      # HTTP monitoring port
470
      monitor: {}
471
      # Go profiling port
472
473
      profiling: {}

474
475
476
    # Environment variables for the NATS container
    # Map with key as env var name, value can be string or map
    # Example:
477
478
479
480
481
482
483
484
485
    #   env:
    #     GOMEMLIMIT: 7GiB
    #     TOKEN:
    #       valueFrom:
    #         secretKeyRef:
    #           name: nats-auth
    #           key: token
    env: {}

486
    # Advanced container configuration merging and patching
487
488
489
490
491
    # https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.24/#container-v1-core
    merge: {}
    patch: []

  ############################################################
492
  # Configuration reloader container for hot config updates
493
494
  ############################################################
  reloader:
495
    # Whether to enable the config reloader sidecar container
496
    enabled: true
497
498

    # Config reloader container image
499
    image:
500
      # Official NATS config reloader repository
501
      repository: natsio/nats-server-config-reloader
502
      # Config reloader version
503
      tag: 0.16.0
504
      # Image pull policy (leave empty for chart default)
505
      pullPolicy:
506
      # Custom registry URL (leave empty for Docker Hub)
507
508
      registry:

509
    # Environment variables for the reloader container
510
511
    env: {}

512
513
    # Volume mount prefixes from NATS container to share with reloader
    # All NATS container volume mounts with these prefixes will be mounted into the reloader
514
515
516
    natsVolumeMountPrefixes:
    - /etc/

517
    # Advanced reloader container configuration
518
519
520
521
522
    # https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.24/#container-v1-core
    merge: {}
    patch: []

  ############################################################
523
  # Prometheus metrics exporter container (optional)
524
  ############################################################
525
  # Note: config.monitor must be enabled for this to work
526
  promExporter:
527
    # Whether to enable Prometheus metrics exporter sidecar
528
529
530
    enabled: false

  ############################################################
531
  # Kubernetes Service for NATS access
532
533
  ############################################################
  service:
534
    # Whether to create a Kubernetes Service for NATS
535
536
    enabled: true

537
538
539
    # 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
540
541
    # https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.24/#serviceport-v1-core
    ports:
542
      # Main NATS client connection port
543
544
      nats:
        enabled: true
545
      # Leaf node connection port
546
547
      leafnodes:
        enabled: true
548
      # WebSocket connection port
549
550
      websocket:
        enabled: true
551
      # MQTT protocol port
552
553
      mqtt:
        enabled: true
554
      # Cluster communication port (typically internal only)
555
556
      cluster:
        enabled: false
557
      # Gateway connection port (typically internal only)
558
559
      gateway:
        enabled: false
560
      # HTTP monitoring port (typically internal only)
561
562
      monitor:
        enabled: false
563
      # Go profiling port (typically internal only)
564
565
566
      profiling:
        enabled: false

567
    # Advanced service configuration
568
569
570
    # https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.24/#service-v1-core
    merge: {}
    patch: []
571
    # Service name (defaults to "{{ include "nats.fullname" $ }}")
572
573
574
    name:

  ############################################################
575
  # Advanced NATS Kubernetes resource configuration
576
577
  ############################################################

578
  # StatefulSet configuration for NATS server persistence
579
  statefulSet:
580
    # Advanced StatefulSet configuration merging and patching
581
582
583
    # https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.24/#statefulset-v1-apps
    merge: {}
    patch: []
584
    # StatefulSet name (defaults to "{{ include "nats.fullname" $ }}")
585
586
    name:

587
  # Pod template configuration for NATS StatefulSet
588
  podTemplate:
589
590
    # Whether to add a hash of the ConfigMap as a pod annotation
    # This will cause the StatefulSet to roll when the ConfigMap is updated
591
592
    configChecksumAnnotation: true

593
594
595
596
597
598
599
    # 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
600
601
    topologySpreadConstraints: {}

602
    # Advanced pod template configuration
603
    # https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.24/#pod-v1-core
604
605
    merge:
      spec:
606
        # Node tolerations for NATS pods (allows scheduling on specific nodes)
607
        tolerations: []
608
609
        # Affinity for NATS pods
        affinity: {}
610
611
    patch: []

612
  # Headless service for StatefulSet pod discovery
613
  headlessService:
614
    # Advanced headless service configuration
615
616
617
    # https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.24/#service-v1-core
    merge: {}
    patch: []
618
    # Headless service name (defaults to "{{ include "nats.fullname" $ }}-headless")
619
620
    name:

621
  # ConfigMap for NATS server configuration
622
  configMap:
623
    # Advanced ConfigMap configuration
624
625
626
    # https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.24/#configmap-v1-core
    merge: {}
    patch: []
627
    # ConfigMap name (defaults to "{{ include "nats.fullname" $ }}-config")
628
629
    name:

630
  # Pod Disruption Budget for controlled rolling updates
631
  podDisruptionBudget:
632
    # Whether to create a PodDisruptionBudget (recommended for production)
633
634
    enabled: true

635
  # Service Account for NATS server pods
636
  serviceAccount:
637
    # Whether to create and use a dedicated service account
638
639
640
    enabled: false

  ############################################################
641
642
  # NATS Box - CLI tools and debugging container
  # NATS Box provides CLI tools for interacting with NATS server
643
644
  ############################################################
  natsBox:
645
    # Whether to deploy NATS Box for CLI access and debugging
646
    enabled: false
647
648

    ############################################################
649
    # NATS client contexts for authentication and connection
650
651
    ############################################################
    contexts:
652
      # Default context configuration
653
      default:
654
        # Credentials-based authentication
655
        creds:
656
          # Inline credentials file contents (base64 encoded)
657
          contents:
658
          # Name of existing secret containing credentials file
659
          secretName:
660
          # Directory to mount credentials (defaults to /etc/nats-creds/<context-name>)
661
          dir:
662
          # Key name in secret for credentials file
663
          key: nats.creds
664
665

        # NKey-based authentication (public/private key pairs)
666
        nkey:
667
          # Inline NKey file contents (base64 encoded)
668
          contents:
669
          # Name of existing secret containing NKey file
670
          secretName:
671
          # Directory to mount NKey (defaults to /etc/nats-nkeys/<context-name>)
672
          dir:
673
          # Key name in secret for NKey file
674
          key: nats.nk
675
676

        # TLS client certificate authentication
677
        tls:
678
          # Name of existing secret containing TLS client certificates
679
          secretName:
680
          # Directory to mount certificates (defaults to /etc/nats-certs/<context-name>)
681
          dir:
682
          # Certificate file name in secret
683
          cert: tls.crt
684
          # Private key file name in secret
685
686
          key: tls.key

687
688
        # Advanced context configuration
        # For options see: https://docs.nats.io/using-nats/nats-tools/nats_cli#nats-contexts
689
690
691
        merge: {}
        patch: []

692
    # Name of context to select by default for NATS CLI operations
693
694
695
    defaultContextName: default

    ############################################################
696
    # NATS Box container configuration
697
698
    ############################################################
    container:
699
      # NATS Box container image
700
      image:
701
        # Official NATS Box repository with CLI tools
702
        repository: natsio/nats-box
703
        # NATS Box version
704
        tag: 0.14.5
705
        # Image pull policy (leave empty for chart default)
706
        pullPolicy:
707
        # Custom registry URL (leave empty for Docker Hub)
708
709
        registry:

710
      # Environment variables for NATS Box container
711
712
      env: {}

713
      # Advanced container configuration
714
715
716
      # https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.24/#container-v1-core
      merge: {}
      patch: []
717
718

    # Service Account for NATS Box deployment
719
    serviceAccount:
720
      # Whether to create and use a dedicated service account for NATS Box
721
      enabled: false
722

723
    # Pod template configuration for NATS Box deployment
724
725
726
    podTemplate:
      merge:
        spec:
727
          # Node tolerations for NATS Box pods
728
          tolerations: []
729
730
          # Affinity for NATS Box pods
          affinity: {}
731
      patch: []