values.yaml 31.1 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
72
  # -- 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
73
  namespaceRestriction:
74
75
    # -- 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
76
    # -- Target namespace for operator deployment (leave empty for current namespace)
77
    targetNamespace:
78
79
80
81
82
83
84
    # 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

85
86
87
88
89
90
91
  # -- GPU discovery configuration (only applies when namespaceRestriction.enabled=true)
  gpuDiscovery:
    # -- Whether to provision a ClusterRole for the namespace-scoped operator to read GPU node labels.
    # When true (default), Helm creates a ClusterRole/ClusterRoleBinding granting node read access.
    # Set to false if your installer lacks ClusterRole creation permissions.
    enabled: true

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

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

100
    # -- Affinity for controller manager pods
101
    affinity: {}
102

103
104
105
106
107
108
109
    # 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: ""

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

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

  # -- Secrets for pulling private container images
128
  imagePullSecrets: []
129
130

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

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

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

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

    # -- Host suffix for generated ingress hostnames
167
    ingressHostSuffix: ""
168
169

    # -- Whether VirtualServices should support HTTPS routing
170
    virtualServiceSupportsHTTPS: false
171

172
173
174
175
176
    # 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: ""

177
178
179
180
181
    # MPI Run configuration
    mpiRun:
      # -- Name of the secret containing the SSH key for MPI Run
      secretName: "mpi-run-ssh-secret"

182
183
184
185
186
187
188
  # 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

189
      # -- 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.
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
      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:
207
      # -- 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.
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
      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"

226
227
  # Checkpoint configuration for fast pod restore using CRIU/cuda-checkpoint
  # NOTE: The checkpoint infrastructure (PVC + DaemonSet) must be installed separately
228
  # using the snapshot Helm chart in each namespace where checkpointing is needed.
229
230
  checkpoint:
    # -- Whether to enable checkpoint/restore functionality
231
    enabled: false
232

233
234
235
    # -- Path written by worker when model is loaded and ready for checkpointing
    readyForCheckpointFilePath: "/tmp/ready-for-checkpoint"

236
237
    # Storage configuration
    # These settings tell the operator where to find checkpoint storage
238
    # Must match the configuration in the snapshot chart
239
240
241
242
243
244
    storage:
      # -- Storage backend type: pvc, s3, or oci
      type: pvc

      # PVC storage configuration (used when type=pvc)
      pvc:
245
246
        # -- Name of the PVC created by the snapshot chart
        pvcName: "snapshot-pvc"
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
        # -- Base path within the PVC for storing checkpoints
        basePath: "/checkpoints"

      # S3 storage configuration (used when type=s3)
      s3:
        # -- S3 URI in format: s3://[endpoint/]bucket/prefix
        uri: ""
        # -- Reference to a secret containing AWS credentials
        credentialsSecretRef: ""

      # OCI registry storage configuration (used when type=oci)
      oci:
        # -- OCI URI in format: oci://registry/repository
        uri: ""
        # -- Reference to a docker config secret for registry authentication
        credentialsSecretRef: ""

264
# Grove component - distributed inference orchestration
265
# Installation is controlled by global.grove.install above.
266
grove:
267
268
269
270
  # -- Node tolerations for Grove pods
  tolerations: []
  # -- Affinity for Grove pods
  affinity: {}
271
272

# Kai Scheduler component - advanced workload scheduling
273
274
# Installation is controlled by global.kai-scheduler.install above.
# Integration is controlled by global.kai-scheduler.enabled above.
275
kai-scheduler:
276
277
278
279
280
281
  # 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: {}
282

283
284
# etcd configuration - distributed key-value store
# Installation is controlled by global.etcd.install above.
285
etcd:
286
  image:
287
    # -- 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
288
    repository: bitnamilegacy/etcd
289
    tag: 3.5.18-debian-12-r5
290

291
  # Persistent storage configuration for etcd data
292
  persistence:
293
    # Whether to enable persistent storage (recommended for production)
294
295
296
    enabled: true
    # Use the cluster default storage-class or override with a named class
    storageClass: null
297
    # Size of persistent volume for etcd data
298
    size: 1Gi
299
300

  # Pre-upgrade job configuration
301
  preUpgradeJob:
302
    # Whether to run pre-upgrade validation jobs
303
    enabled: false
304
305

  # Number of etcd replicas (1 for single-node, 3+ for HA)
306
  replicaCount: 1
307
308
309

  # Authentication and authorization settings
  # Explicitly remove authentication for simplified internal communication
310
311
  auth:
    rbac:
312
      # Whether to create RBAC authentication (disabled for internal use)
313
314
      create: false

315
  # Health check configuration
316
  readinessProbe:
317
    # Whether to enable readiness probes (disabled to reduce startup complexity)
318
319
320
    enabled: false

  livenessProbe:
321
    # Whether to enable liveness probes (disabled to reduce startup complexity)
322
323
    enabled: false

324
325
326
327
328
329
  # 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

330
  # Node tolerations for etcd pods (allows scheduling on specific nodes)
331
332
  tolerations: []

333
334
335
  # Affinity for etcd pods
  affinity: {}

336
# NATS configuration - messaging system for operator communication
337
nats:
338
  # -- 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."
339
  enabled: true
340
341
342
343

  # 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
344
  tlsCA:
345
    # Whether to enable TLS CA configuration
346
347
    enabled: false

348
  # Core NATS server configuration
349
  config:
350
    # NATS clustering for high availability (multiple NATS servers)
351
    cluster:
352
      # Whether to enable NATS clustering (disabled for single-node setups)
353
354
      enabled: false

355
    # JetStream - persistent messaging and streaming capabilities
356
    jetstream:
357
      # Whether to enable JetStream (recommended for persistent messaging)
358
359
      enabled: true

360
      # File-based storage for JetStream streams and consumers
361
      fileStore:
362
        # Whether to enable file storage (persistent across restarts)
363
        enabled: true
364
        # Directory path for JetStream file storage
365
366
367
        dir: /data

        ############################################################
368
        # Persistent Volume Claim for JetStream file storage
369
370
        ############################################################
        pvc:
371
          # Whether to create a PVC for JetStream storage
372
          enabled: true
373
          # Size of the persistent volume for JetStream data
374
          size: 10Gi
375
          # Storage class name (leave empty for default)
376
377
          storageClassName:

378
          # Advanced PVC configuration (merge additional fields)
379
380
381
          # https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.24/#persistentvolumeclaim-v1-core
          merge: {}
          patch: []
382
          # PVC name (defaults to "{{ include "nats.fullname" $ }}-js")
383
384
          name:

385
        # Maximum size for JetStream file storage (defaults to PVC size)
386
387
        maxSize:

388
      # Memory-based storage for JetStream (non-persistent)
389
      memoryStore:
390
        # Whether to enable memory storage (faster but not persistent)
391
392
        enabled: false

393
394
      # Advanced JetStream configuration
      # For options see: https://docs.nats.io/running-a-nats-service/configuration#jetstream
395
396
397
      merge: {}
      patch: []

398
    # Core NATS server settings
399
    nats:
400
      # Port for NATS client connections
401
      port: 4222
402
403

      # TLS configuration for encrypted connections
404
      tls:
405
        # Whether to enable TLS encryption
406
        enabled: false
407
408
        # Advanced TLS configuration
        # For options see: https://docs.nats.io/running-a-nats-service/configuration/securing_nats/tls
409
410
411
        merge: {}
        patch: []

412
    # Leaf nodes for creating NATS topologies and remote connections
413
    leafnodes:
414
      # Whether to enable leaf node connections
415
416
      enabled: false

417
    # WebSocket support for browser-based NATS clients
418
    websocket:
419
      # Whether to enable WebSocket protocol support
420
421
      enabled: false

422
    # MQTT protocol bridge for IoT device connectivity
423
    mqtt:
424
      # Whether to enable MQTT protocol support
425
426
      enabled: false

427
    # Gateway connections for multi-cluster NATS deployments
428
    gateway:
429
      # Whether to enable gateway connections
430
431
      enabled: false

432
    # HTTP monitoring endpoint for NATS server metrics
433
    monitor:
434
      # Whether to enable HTTP monitoring interface
435
      enabled: true
436
      # Port for monitoring HTTP endpoint
437
      port: 8222
438
439

      # TLS configuration for monitoring endpoint
440
      tls:
441
442
        # 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
443
444
        enabled: false

445
    # Go pprof profiling endpoint for performance debugging
446
    profiling:
447
      # Whether to enable profiling endpoint (for debugging only)
448
      enabled: false
449
      # Port for profiling endpoint
450
451
      port: 65432

452
    # Account resolver for multi-tenant NATS deployments
453
    resolver:
454
      # Whether to enable account resolution (for advanced multi-tenancy)
455
456
      enabled: false

457
458
459
    # 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
460
461
    serverNamePrefix: ""

462
463
464
    # Advanced NATS configuration merging and patching
    # For complete options see: https://docs.nats.io/running-a-nats-service/configuration
    # Special rules apply:
465
466
467
468
469
    #  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
470
    # Example:
471
472
473
474
475
476
477
478
    #   merge:
    #     $include: ./my-config.conf
    #     zzz$include: ./my-config-last.conf
    #     server_name: nats
    #     authorization:
    #       token: << $TOKEN >>
    #     jetstream:
    #       max_memory_store: << 1GB >>
479
    merge:
480
481
482
      # 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
483
484
485
    patch: []

  ############################################################
486
  # NATS container configuration in StatefulSet
487
488
  ############################################################
  container:
489
    # NATS server container image configuration
490
    image:
491
      # Official NATS server repository
492
      repository: nats
493
      # NATS server version (Alpine-based for smaller size)
494
      tag: 2.10.21-alpine
495
      # Image pull policy (leave empty for chart default)
496
      pullPolicy:
497
      # Custom registry URL (leave empty for Docker Hub)
498
499
      registry:

500
501
    # Container port configuration
    # Note: Ports must also be enabled in the config section above
502
503
    # https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.24/#containerport-v1-core
    ports:
504
      # Main NATS client connection port
505
      nats: {}
506
      # Leaf node connection port
507
      leafnodes: {}
508
      # WebSocket connection port
509
      websocket: {}
510
      # MQTT protocol port
511
      mqtt: {}
512
      # Cluster communication port
513
      cluster: {}
514
      # Gateway connection port
515
      gateway: {}
516
      # HTTP monitoring port
517
      monitor: {}
518
      # Go profiling port
519
520
      profiling: {}

521
522
523
    # Environment variables for the NATS container
    # Map with key as env var name, value can be string or map
    # Example:
524
525
526
527
528
529
530
531
532
    #   env:
    #     GOMEMLIMIT: 7GiB
    #     TOKEN:
    #       valueFrom:
    #         secretKeyRef:
    #           name: nats-auth
    #           key: token
    env: {}

533
    # Advanced container configuration merging and patching
534
535
536
537
538
    # https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.24/#container-v1-core
    merge: {}
    patch: []

  ############################################################
539
  # Configuration reloader container for hot config updates
540
541
  ############################################################
  reloader:
542
    # Whether to enable the config reloader sidecar container
543
    enabled: true
544
545

    # Config reloader container image
546
    image:
547
      # Official NATS config reloader repository
548
      repository: natsio/nats-server-config-reloader
549
      # Config reloader version
550
      tag: 0.16.0
551
      # Image pull policy (leave empty for chart default)
552
      pullPolicy:
553
      # Custom registry URL (leave empty for Docker Hub)
554
555
      registry:

556
    # Environment variables for the reloader container
557
558
    env: {}

559
560
    # Volume mount prefixes from NATS container to share with reloader
    # All NATS container volume mounts with these prefixes will be mounted into the reloader
561
562
563
    natsVolumeMountPrefixes:
    - /etc/

564
    # Advanced reloader container configuration
565
566
567
568
569
    # https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.24/#container-v1-core
    merge: {}
    patch: []

  ############################################################
570
  # Prometheus metrics exporter container (optional)
571
  ############################################################
572
  # Note: config.monitor must be enabled for this to work
573
  promExporter:
574
    # Whether to enable Prometheus metrics exporter sidecar
575
576
577
    enabled: false

  ############################################################
578
  # Kubernetes Service for NATS access
579
580
  ############################################################
  service:
581
    # Whether to create a Kubernetes Service for NATS
582
583
    enabled: true

584
585
586
    # 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
587
588
    # https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.24/#serviceport-v1-core
    ports:
589
      # Main NATS client connection port
590
591
      nats:
        enabled: true
592
      # Leaf node connection port
593
594
      leafnodes:
        enabled: true
595
      # WebSocket connection port
596
597
      websocket:
        enabled: true
598
      # MQTT protocol port
599
600
      mqtt:
        enabled: true
601
      # Cluster communication port (typically internal only)
602
603
      cluster:
        enabled: false
604
      # Gateway connection port (typically internal only)
605
606
      gateway:
        enabled: false
607
      # HTTP monitoring port (typically internal only)
608
609
      monitor:
        enabled: false
610
      # Go profiling port (typically internal only)
611
612
613
      profiling:
        enabled: false

614
    # Advanced service configuration
615
616
617
    # https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.24/#service-v1-core
    merge: {}
    patch: []
618
    # Service name (defaults to "{{ include "nats.fullname" $ }}")
619
620
621
    name:

  ############################################################
622
  # Advanced NATS Kubernetes resource configuration
623
624
  ############################################################

625
  # StatefulSet configuration for NATS server persistence
626
  statefulSet:
627
    # Advanced StatefulSet configuration merging and patching
628
629
630
    # https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.24/#statefulset-v1-apps
    merge: {}
    patch: []
631
    # StatefulSet name (defaults to "{{ include "nats.fullname" $ }}")
632
633
    name:

634
  # Pod template configuration for NATS StatefulSet
635
  podTemplate:
636
637
    # Whether to add a hash of the ConfigMap as a pod annotation
    # This will cause the StatefulSet to roll when the ConfigMap is updated
638
639
    configChecksumAnnotation: true

640
641
642
643
644
645
646
    # 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
647
648
    topologySpreadConstraints: {}

649
    # Advanced pod template configuration
650
    # https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.24/#pod-v1-core
651
652
    merge:
      spec:
653
        # Node tolerations for NATS pods (allows scheduling on specific nodes)
654
        tolerations: []
655
656
        # Affinity for NATS pods
        affinity: {}
657
658
    patch: []

659
  # Headless service for StatefulSet pod discovery
660
  headlessService:
661
    # Advanced headless service configuration
662
663
664
    # https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.24/#service-v1-core
    merge: {}
    patch: []
665
    # Headless service name (defaults to "{{ include "nats.fullname" $ }}-headless")
666
667
    name:

668
  # ConfigMap for NATS server configuration
669
  configMap:
670
    # Advanced ConfigMap configuration
671
672
673
    # https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.24/#configmap-v1-core
    merge: {}
    patch: []
674
    # ConfigMap name (defaults to "{{ include "nats.fullname" $ }}-config")
675
676
    name:

677
  # Pod Disruption Budget for controlled rolling updates
678
  podDisruptionBudget:
679
    # Whether to create a PodDisruptionBudget (recommended for production)
680
681
    enabled: true

682
  # Service Account for NATS server pods
683
  serviceAccount:
684
    # Whether to create and use a dedicated service account
685
686
687
    enabled: false

  ############################################################
688
689
  # NATS Box - CLI tools and debugging container
  # NATS Box provides CLI tools for interacting with NATS server
690
691
  ############################################################
  natsBox:
692
    # Whether to deploy NATS Box for CLI access and debugging
693
    enabled: false
694
695

    ############################################################
696
    # NATS client contexts for authentication and connection
697
698
    ############################################################
    contexts:
699
      # Default context configuration
700
      default:
701
        # Credentials-based authentication
702
        creds:
703
          # Inline credentials file contents (base64 encoded)
704
          contents:
705
          # Name of existing secret containing credentials file
706
          secretName:
707
          # Directory to mount credentials (defaults to /etc/nats-creds/<context-name>)
708
          dir:
709
          # Key name in secret for credentials file
710
          key: nats.creds
711
712

        # NKey-based authentication (public/private key pairs)
713
        nkey:
714
          # Inline NKey file contents (base64 encoded)
715
          contents:
716
          # Name of existing secret containing NKey file
717
          secretName:
718
          # Directory to mount NKey (defaults to /etc/nats-nkeys/<context-name>)
719
          dir:
720
          # Key name in secret for NKey file
721
          key: nats.nk
722
723

        # TLS client certificate authentication
724
        tls:
725
          # Name of existing secret containing TLS client certificates
726
          secretName:
727
          # Directory to mount certificates (defaults to /etc/nats-certs/<context-name>)
728
          dir:
729
          # Certificate file name in secret
730
          cert: tls.crt
731
          # Private key file name in secret
732
733
          key: tls.key

734
735
        # Advanced context configuration
        # For options see: https://docs.nats.io/using-nats/nats-tools/nats_cli#nats-contexts
736
737
738
        merge: {}
        patch: []

739
    # Name of context to select by default for NATS CLI operations
740
741
742
    defaultContextName: default

    ############################################################
743
    # NATS Box container configuration
744
745
    ############################################################
    container:
746
      # NATS Box container image
747
      image:
748
        # Official NATS Box repository with CLI tools
749
        repository: natsio/nats-box
750
        # NATS Box version
751
        tag: 0.14.5
752
        # Image pull policy (leave empty for chart default)
753
        pullPolicy:
754
        # Custom registry URL (leave empty for Docker Hub)
755
756
        registry:

757
      # Environment variables for NATS Box container
758
759
      env: {}

760
      # Advanced container configuration
761
762
763
      # https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.24/#container-v1-core
      merge: {}
      patch: []
764
765

    # Service Account for NATS Box deployment
766
    serviceAccount:
767
      # Whether to create and use a dedicated service account for NATS Box
768
      enabled: false
769

770
    # Pod template configuration for NATS Box deployment
771
772
773
    podTemplate:
      merge:
        spec:
774
          # Node tolerations for NATS Box pods
775
          tolerations: []
776
777
          # Affinity for NATS Box pods
          affinity: {}
778
      patch: []