values.yaml filesThis directory contains example value overrides for the Apache Pulsar Helm chart. Each file is a small, focused override that demonstrates one deployment scenario. They are not complete production configurations — start from the chart values.yaml and layer one or more of these examples on top.
These examples only set the keys that differ from the defaults. The full list of configurable values, with their defaults and inline documentation, is the chart values.yaml. You can view it in any of these ways:
# from the published chart (after `helm repo add apachepulsar https://pulsar.apache.org/charts`) helm show values apachepulsar/pulsar # pin a specific chart version with --version, e.g. helm show values apachepulsar/pulsar --version 4.6.1 # or from a local checkout helm show values charts/pulsar
The latest version is also browsable on the master branch: https://github.com/apache/pulsar-helm-chart/blob/master/charts/pulsar/values.yaml
Pass an example to helm install/helm upgrade with -f:
helm install pulsar apachepulsar/pulsar -f examples/values-one-node.yaml
Examples are composable — pass -f multiple times and later files win:
# A single-node cluster secured with self-signed TLS and JWT auth helm install pulsar apachepulsar/pulsar \ -f examples/values-one-node.yaml \ -f examples/values-tls-selfsigned.yaml \ -f examples/values-jwt-symmetric.yaml
You can render the resulting manifests without installing anything to review what an example produces:
helm template pulsar charts/pulsar -f examples/values-one-node.yaml
Repeated -f flags are usually all you need, but if you want a single merged values file (for review, for helm template, or to hand to other tooling) you can use merge-values.sh. It deep-merges the given files (later files win, the same precedence as -f) and strips the license header:
# from the examples/ directory; requires yq (https://github.com/mikefarah/yq) ./merge-values.sh values-jwt-asymmetric.yaml values-oxia.yaml values-one-node.yaml > merged-values.yaml helm install pulsar apachepulsar/pulsar -f merged-values.yaml
Pass --download/-d to fetch the files by name from the examples/ directory on the master branch (via curl) instead of reading them from a local checkout:
./merge-values.sh -d values-jwt-asymmetric.yaml values-oxia.yaml values-one-node.yaml > merged-values.yaml
Combined with -d, the script itself can be fetched with curl, so no checkout is needed at all:
# download the script and make it executable curl -fsSL https://raw.githubusercontent.com/apache/pulsar-helm-chart/refs/heads/master/examples/merge-values.sh -o merge-values.sh chmod +x merge-values.sh # -d downloads the named values files from master and merges them to stdout ./merge-values.sh -d values-jwt-symmetric.yaml values-oxia.yaml values-one-node.yaml > merged-values.yaml helm install pulsar apachepulsar/pulsar -f merged-values.yaml
By default the chart deploys stateful components (ZooKeeper, BookKeeper) with PersistentVolumeClaims so that data survives pod restarts. Most examples keep this default. The one deliberate exception is values-no-persistence.yaml, which uses emptyDir volumes and therefore loses all data when a pod restarts or the cluster is shut down — use it only for ephemeral testing/CI.
These examples use Dekaf (components.dekaf: true) as the web UI rather than the legacy pulsar-manager. Dekaf connects directly to the broker, so it is only enabled in examples that deploy a broker.
| File | Description |
|---|---|
values-one-node.yaml | Minimal distributed cluster with a single replica of each component (ZooKeeper, BookKeeper, broker, proxy). Auto-recovery and anti-affinity are disabled and the managed-ledger ensemble/quorum sizes are set to 1 to fit a single bookie. Single-node Oxia sizing is included as well (applied if Oxia is enabled as the metadata store). Persistence is kept enabled. Good for local development on a single node. |
values-standalone.yaml | Runs all of Pulsar in a single standalone process. The distributed components (ZooKeeper, BookKeeper, broker, auto-recovery) are automatically suppressed. Smallest footprint; ideal for development and smoke tests. Includes a commented-out snippet for fronting standalone with the Pulsar proxy. |
values-minikube.yaml | Single-replica cluster tuned for Minikube: anti-affinity off, BookKeeper memory caches minimized, the Dekaf UI enabled. Persistence is kept enabled so data survives pod restarts. |
values-local-cluster.yaml | A Pulsar cluster (metadataPrefix: /cluster1) that attaches to a separate configuration store. Pair it with values-cs.yaml, which deploys that configuration store. Disables the bundled monitoring stack and the Dekaf UI is enabled. |
| File | Description |
|---|---|
values-oxia.yaml | Use Oxia as the metadata store instead of ZooKeeper (components.zookeeper: false, components.oxia: true). Pulsar Functions are disabled by default; to run Functions on Oxia, also merge values-functions-fs-storage.yaml (broker-hosted FileSystemPackagesStorage, required because the default BookKeeper package storage needs ZooKeeper). |
values-cs.yaml | Deploy only ZooKeeper as a shared configuration store (metadataPrefix: /configuration-store); all other components are disabled. Intended to be combined with values-local-cluster.yaml. |
values-functions-fs-storage.yaml | Enable Pulsar Functions (components.functions: true) with broker-hosted FileSystemPackagesStorage (broker.packageManagement.enabled + fileSystemStorage.enabled). Needs no ZooKeeper, so it is suitable for Oxia — merge it with values-oxia.yaml. Also works with the default ZooKeeper metadata store. |
Pulsar Functions run in a worker that is embedded in the broker (components.functions: true). See values-functions-fs-storage.yaml for a ready-to-merge example (suitable for Oxia).
The function worker stores uploaded packages (pulsar-admin functions create --jar ...) via the broker's Packages Management Service. Its default BookKeeperPackagesStorage requires ZooKeeper, so on Oxia you must enable broker-hosted FileSystemPackagesStorage (broker.packageManagement.enabled: true + broker.packageManagement.fileSystemStorage.enabled: true) — see values-functions-fs-storage.yaml.
For the full configuration — choosing a volume (single broker vs. a ReadWriteMany shared filesystem with GKE / EKS / AKS CSI drivers) and creating the StorageClass / PersistentVolume / PersistentVolumeClaim from raw YAML — see the Pulsar Functions package storage section in the top-level README.
By default the Pulsar Functions worker runs embedded in the broker (components.functions: true). Alternatively it can run as its own standalone component (components.function_worker: true), which disables the embedded worker.
Running the function worker separately separates its workload from the brokers, which is useful for:
The standalone worker is “broker-attached” (it connects to the broker and keeps function metadata in system topics). Function instances run with the Kubernetes runtime (one pod per instance).
| File | Description |
|---|---|
values-function-worker.yaml | Run the Functions worker as a separate function-worker component (components.function_worker: true) instead of embedded in the broker. Deploys a single-replica function-worker StatefulSet, disables the broker‘s embedded worker, and points the proxy’s Functions routing at the new service. Functions run user code — enable only for trusted users. |
| File | Description |
|---|---|
values-local-pv.yaml | Use node-local persistent volumes (volumes.local_storage: true). Requires a local-volume provisioner to be installed first. |
values-no-persistence.yaml | Ephemeral. Deploys stateful components with emptyDir instead of PVCs. All data is lost on pod restart / cluster shutdown. Sets autoSkipNonRecoverableData so BookKeeper tolerates the lost state. For throwaway testing/CI only. |
values-bookkeeper-aws.yaml | A 3-bookie cluster using AWS EBS (gp2) PersistentVolumeClaims for the BookKeeper journal and ledgers. Monitoring stack disabled. |
values-zookeeper-aws.yaml | A configuration store running only ZooKeeper backed by AWS EBS (gp2) volumes, including the externalZookeeperServerList option for building a ZooKeeper cluster that spans namespaces/clusters. |
values-faster-disk-cleanup.yaml | Tune BookKeeper and the broker to reclaim disk space as fast as possible: frequent BookKeeper entry-log compaction and garbage collection, lower disk-utilization GC thresholds, a smaller rollover-heavy journal with no backups, and faster broker managed-ledger rollover so closed ledgers are trimmed sooner. For space-constrained test clusters; the values are not tuned for production. |
values-disable-fsync.yaml | Disable fsync on the BookKeeper journal (journalSyncData: false), ZooKeeper (forceSync: false) and the Oxia WAL (walSyncData: false, when Oxia is the metadata store) for faster writes in tests. Trades durability for speed — data written just before a crash or power loss can be lost — so it is not for production. |
| File | Description |
|---|---|
values-tls-selfsigned.yaml | Enable TLS for proxy, broker and ZooKeeper using a self-signed internal cert-manager issuer. Requires cert-manager. |
values-tls-ca.yaml | Enable TLS (including the bookie) using a CA issuer that references an existing ca-key-pair secret, with custom DNS SANs for the proxy. Requires cert-manager. |
values-jwt-symmetric.yaml | Enable JWT authentication and authorization using a symmetric (shared secret) key (usingSecretKey: true). The signing key and per-superuser tokens are generated in-chart (generateSecrets.enabled: true), so a fully authenticated cluster deploys with a single helm install. |
values-jwt-asymmetric.yaml | Enable JWT authentication and authorization using an asymmetric (RSA private/public) key pair (usingSecretKey: false). The signing key pair and per-superuser tokens are generated in-chart (generateSecrets.enabled: true), so a fully authenticated cluster deploys with a single helm install. |
| File | Description |
|---|---|
values-disable-monitoring.yaml | Disable the bundled victoria-metrics-k8s-stack monitoring stack and all component PodMonitor resources (so the chart does not require the monitoring CRDs). |
| File | Description |
|---|---|
values-init-containers.yaml | Demonstrates attaching custom initContainers to each component (ZooKeeper, BookKeeper, auto-recovery, broker, proxy, toolset). |