Helm Chart Values Reference
This page provides a comprehensive reference for the Apache Pinot Helm chart configuration values. Use this guide when deploying or customizing Pinot on Kubernetes.
Chart Overview
Chart Name
pinot
Chart Version
0.3.6-SNAPSHOT
App Version
1.0.0
Maintainer
Prerequisites
Kubernetes 1.20+
Helm 3.x
kubectlconfigured to connect to your clusterPersistent volume provisioner support in the cluster (for controller, server, and ZooKeeper data)
A StorageClass appropriate for your cloud provider:
AWS:
gp2orgp3GCP:
pd-ssdorstandardAzure:
AzureDiskDocker Desktop:
hostpath
Do not use blob-store-backed storage classes (such as AzureFile, GCS FUSE, or S3-based CSI) for Pinot data volumes. Use only block storage (EBS, Persistent Disk, Azure Disk).
Global Parameters
image.repository
Pinot container image repository
apachepinot/pinot
image.tag
Pinot container image tag
latest
image.pullPolicy
Image pull policy
Always
cluster.name
Pinot cluster name
pinot-quickstart
imagePullSecrets
Docker registry secret names
[]
terminationGracePeriodSeconds
Grace period for pod termination
30
securityContext
Pod-level security context
{}
serviceAccount.create
Create a service account
true
serviceAccount.annotations
Service account annotations
{}
serviceAccount.name
Service account name (auto-generated if empty)
""
additionalMatchLabels
Extra labels for pod selectors
{}
Default Probe Settings
These defaults apply to all components unless overridden at the component level.
probes.initialDelaySeconds
Seconds before probes start
60
probes.periodSeconds
Probe interval
10
probes.failureThreshold
Failures before marking unhealthy
10
probes.successThreshold
Successes before marking healthy
1
probes.timeoutSeconds
Probe timeout
10
Authentication
pinotAuth.enabled
Enable Pinot basic auth
false
pinotAuth.controllerFactoryClass
Controller access control factory
org.apache.pinot.controller.api.access.BasicAuthAccessControlFactory
pinotAuth.brokerFactoryClass
Broker access control factory
org.apache.pinot.broker.broker.BasicAuthAccessControlFactory
pinotAuth.configs
Auth config lines (principals, passwords, permissions)
[]
Controller
controller.name
Controller component name
controller
controller.replicaCount
Number of controller replicas
1
controller.configureControllerPort
Include controller.port in config
true
controller.podManagementPolicy
StatefulSet pod management policy
Parallel
controller.startCommand
Start command for the container
StartController
Controller Resources and JVM
controller.resources.requests.memory
Memory request
1.25Gi
controller.jvmOpts
JVM options for the controller
-XX:ActiveProcessorCount=2 -Xms256M -Xmx1G -XX:+UseG1GC -XX:MaxGCPauseMillis=200 ...
controller.log4j2ConfFile
Log4j2 configuration file path
/opt/pinot/etc/conf/pinot-controller-log4j2.xml
controller.pluginsDir
Plugins directory
/opt/pinot/plugins
Controller Persistence
controller.persistence.enabled
Enable PVC for controller data
true
controller.persistence.accessMode
PVC access mode
ReadWriteOnce
controller.persistence.size
PVC size
1G
controller.persistence.mountPath
Data mount path
/var/pinot/controller/data
controller.persistence.storageClass
Storage class (empty for default)
""
controller.persistence.extraVolumes
Additional volumes
[]
controller.persistence.extraVolumeMounts
Additional volume mounts
[]
Controller Data Directory
controller.data.dir
Controller data directory
/var/pinot/controller/data
Controller VIP
controller.vip.enabled
Enable VIP host
false
controller.vip.host
VIP hostname
pinot-controller
controller.vip.port
VIP port
9000
Controller Service
controller.service.type
Headless service type
ClusterIP
controller.service.clusterIP
Cluster IP (None for headless)
None
controller.service.port
Service port
9000
controller.service.protocol
Service protocol
TCP
controller.service.name
Service port name
controller
controller.service.nodePort
Node port (if type is NodePort)
""
controller.service.annotations
Service annotations
{}
controller.service.extraPorts
Additional ports to expose
[]
Controller External Service
controller.external.enabled
Expose controller externally
true
controller.external.type
External service type
LoadBalancer
controller.external.port
External service port
9000
controller.external.annotations
External service annotations
{}
Controller Ingress
controller.ingress.v1.enabled
Enable v1 Ingress
false
controller.ingress.v1.ingressClassName
Ingress class name
""
controller.ingress.v1.annotations
Ingress annotations
{}
controller.ingress.v1.tls
TLS configuration
[]
controller.ingress.v1.path
Ingress path
/
controller.ingress.v1.hosts
Ingress hostnames
[]
Controller Probes
controller.probes.endpoint
Health check endpoint
/health
controller.probes.livenessEnabled
Enable liveness probe
false
controller.probes.readinessEnabled
Enable readiness probe
false
controller.probes.startupEnabled
Enable startup probe
false
Controller Scheduling and Miscellaneous
controller.nodeSelector
Node selector labels
{}
controller.tolerations
Pod tolerations
[]
controller.affinity
Pod affinity rules
{}
controller.podAnnotations
Pod annotations
{}
controller.initContainers
Init containers
[]
controller.podSecurityContext
Pod security context
{}
controller.securityContext
Container security context
{}
controller.updateStrategy.type
StatefulSet update strategy
RollingUpdate
controller.automaticReload.enabled
Auto-roll on ConfigMap change
false
controller.envFrom
ConfigMap/Secret references for env vars
[]
controller.extraEnv
Extra environment variables
[{name: LOG4J_CONSOLE_LEVEL, value: info}]
controller.extra.configs
Extra lines appended to pinot-controller.conf
pinot.set.instance.id.to.hostname=true
Controller PodDisruptionBudget
controller.pdb.enabled
Enable PDB
false
controller.pdb.minAvailable
Minimum available pods
""
controller.pdb.maxUnavailable
Maximum unavailable pods
50%
Broker
broker.name
Broker component name
broker
broker.replicaCount
Number of broker replicas
1
broker.configureBrokerPort
Include pinot.broker.client.queryPort in config
true
broker.podManagementPolicy
StatefulSet pod management policy
Parallel
broker.startCommand
Start command for the container
StartBroker
Broker Resources and JVM
broker.resources.requests.memory
Memory request
1.25Gi
broker.jvmOpts
JVM options for the broker
-XX:ActiveProcessorCount=2 -Xms256M -Xmx1G -XX:+UseG1GC -XX:MaxGCPauseMillis=200 ...
broker.log4j2ConfFile
Log4j2 configuration file path
/opt/pinot/etc/conf/pinot-broker-log4j2.xml
broker.pluginsDir
Plugins directory
/opt/pinot/plugins
broker.routingTable.builderClass
Routing table builder class
random
Broker Service
broker.service.type
Headless service type
ClusterIP
broker.service.clusterIP
Cluster IP (None for headless)
None
broker.service.port
Service port
8099
broker.service.protocol
Service protocol
TCP
broker.service.name
Service port name
broker
broker.service.nodePort
Node port (if type is NodePort)
""
broker.service.annotations
Service annotations
{}
broker.service.extraPorts
Additional ports to expose
[]
Broker External Service
broker.external.enabled
Expose broker externally
true
broker.external.type
External service type
LoadBalancer
broker.external.port
External service port
8099
broker.external.annotations
External service annotations
{}
Broker Ingress
broker.ingress.v1.enabled
Enable v1 Ingress
false
broker.ingress.v1.ingressClassName
Ingress class name
""
broker.ingress.v1.annotations
Ingress annotations
{}
broker.ingress.v1.tls
TLS configuration
[]
broker.ingress.v1.path
Ingress path
/
broker.ingress.v1.hosts
Ingress hostnames
[]
Broker Probes
broker.probes.endpoint
Health check endpoint
/health
broker.probes.livenessEnabled
Enable liveness probe
true
broker.probes.readinessEnabled
Enable readiness probe
true
broker.probes.startupEnabled
Enable startup probe
false
Broker Scheduling and Miscellaneous
broker.nodeSelector
Node selector labels
{}
broker.tolerations
Pod tolerations
[]
broker.affinity
Pod affinity rules
{}
broker.podAnnotations
Pod annotations
{}
broker.initContainers
Init containers
[]
broker.podSecurityContext
Pod security context
{}
broker.securityContext
Container security context
{}
broker.updateStrategy.type
StatefulSet update strategy
RollingUpdate
broker.automaticReload.enabled
Auto-roll on ConfigMap change
false
broker.envFrom
ConfigMap/Secret references for env vars
[]
broker.extraEnv
Extra environment variables
[{name: LOG4J_CONSOLE_LEVEL, value: info}]
broker.extra.configs
Extra lines appended to pinot-broker.conf
pinot.set.instance.id.to.hostname=true
broker.pdb.enabled
Enable PDB
false
broker.pdb.maxUnavailable
Maximum unavailable pods
50%
Server
server.name
Server component name
server
server.replicaCount
Number of server replicas
1
server.configureServerPort
Include pinot.server.netty.port in config
true
server.podManagementPolicy
StatefulSet pod management policy
Parallel
server.startCommand
Start command for the container
StartServer
Server Resources and JVM
server.resources.requests.memory
Memory request
1.25Gi
server.jvmOpts
JVM options for the server
-Xms512M -Xmx1G -XX:+UseG1GC -XX:MaxGCPauseMillis=200 ...
server.log4j2ConfFile
Log4j2 configuration file path
/opt/pinot/etc/conf/pinot-server-log4j2.xml
server.pluginsDir
Plugins directory
/opt/pinot/plugins
Server Data Directories
server.dataDir
Index data directory
/var/pinot/server/data/index
server.segmentTarDir
Segment tar directory
/var/pinot/server/data/segment
Server Persistence
server.persistence.enabled
Enable PVC for server data
true
server.persistence.accessMode
PVC access mode
ReadWriteOnce
server.persistence.size
PVC size
4G
server.persistence.mountPath
Data mount path
/var/pinot/server/data
server.persistence.storageClass
Storage class (empty for default)
""
server.persistence.extraVolumes
Additional volumes
[]
server.persistence.extraVolumeMounts
Additional volume mounts
[]
Server Service
server.service.type
Service type
ClusterIP
server.service.nettyPort
Netty data port
8098
server.service.nettyPortName
Netty port name
netty
server.service.adminPort
Admin HTTP port
8097
server.service.adminExposePort
Admin exposed port
80
server.service.adminPortName
Admin port name
admin
server.service.nodePort
Node port (if type is NodePort)
""
server.service.protocol
Service protocol
TCP
server.service.annotations
Service annotations
{}
server.service.extraPorts
Additional ports to expose
[]
Server Probes
server.probes.endpoint
Health check endpoint
/health
server.probes.livenessEnabled
Enable liveness probe
false
server.probes.readinessEnabled
Enable readiness probe
false
server.probes.startupEnabled
Enable startup probe
false
server.probes.liveness.endpoint
Liveness-specific endpoint
/health/liveness
server.probes.readiness.endpoint
Readiness-specific endpoint
/health/readiness
Server Scheduling and Miscellaneous
server.nodeSelector
Node selector labels
{}
server.tolerations
Pod tolerations
[]
server.affinity
Pod affinity rules
{}
server.podAnnotations
Pod annotations
{}
server.initContainers
Init containers
[]
server.podSecurityContext
Pod security context
{}
server.securityContext
Container security context
{}
server.updateStrategy.type
StatefulSet update strategy
RollingUpdate
server.automaticReload.enabled
Auto-roll on ConfigMap change
false
server.envFrom
ConfigMap/Secret references for env vars
[]
server.extraEnv
Extra environment variables
[{name: LOG4J_CONSOLE_LEVEL, value: info}]
server.extra.configs
Extra lines appended to pinot-server.conf
See values.yaml
server.pdb.enabled
Enable PDB
false
server.pdb.maxUnavailable
Maximum unavailable pods
1
Minion (StatefulSet)
minion.enabled
Deploy Minion StatefulSet
false
minion.name
Minion component name
minion
minion.replicaCount
Number of minion replicas
0
minion.configureMinionPort
Include pinot.minion.port in config
true
minion.podManagementPolicy
StatefulSet pod management policy
Parallel
minion.startCommand
Start command for the container
StartMinion
minion.resources.requests.memory
Memory request
1.25Gi
minion.jvmOpts
JVM options for minion
-XX:ActiveProcessorCount=2 -Xms256M -Xmx1G -XX:+UseG1GC -XX:MaxGCPauseMillis=200 ...
minion.dataDir
Minion data directory
/var/pinot/minion/data
minion.persistence.enabled
Enable PVC for minion data
true
minion.persistence.size
PVC size
4G
minion.persistence.storageClass
Storage class (empty for default)
""
minion.service.port
Service port
9514
minion.extra.configs
Extra lines appended to pinot-minion.conf
pinot.set.instance.id.to.hostname=true
minion.pdb.enabled
Enable PDB
false
minion.pdb.maxUnavailable
Maximum unavailable pods
1
Minion Stateless (Deployment)
The stateless minion runs as a Kubernetes Deployment instead of a StatefulSet, making it suitable for ephemeral task execution.
minionStateless.enabled
Deploy Minion Stateless Deployment
true
minionStateless.name
Component name
minion-stateless
minionStateless.replicaCount
Number of replicas
1
minionStateless.configureMinionStatelessPort
Include pinot.minion.port in config
true
minionStateless.startCommand
Start command
StartMinion
minionStateless.resources.requests.memory
Memory request
1.25Gi
minionStateless.jvmOpts
JVM options
-XX:ActiveProcessorCount=2 -Xms256M -Xmx1G ...
minionStateless.persistence.enabled
Enable PVC
false
minionStateless.persistence.size
PVC size (when enabled)
4G
minionStateless.service.port
Service port
9514
minionStateless.extra.configs
Extra config lines
pinot.set.instance.id.to.hostname=true
minionStateless.pdb.enabled
Enable PDB
false
minionStateless.pdb.maxUnavailable
Maximum unavailable pods
1
ZooKeeper
The chart bundles the Bitnami ZooKeeper chart as a dependency. You can either use the built-in ZooKeeper or point to an external ensemble.
For production deployments, consider using the ZooKeeper Kubernetes Operator instead of the bundled chart.
zookeeper.enabled
Install bundled ZooKeeper
true
zookeeper.urlOverride
External ZooKeeper connection string (used when enabled: false)
my-zookeeper:2181/my-pinot
zookeeper.port
ZooKeeper client port
2181
zookeeper.replicaCount
Number of ZooKeeper replicas
1
zookeeper.resources.requests.memory
Memory request
1.25Gi
zookeeper.heapSize
Java heap size in MB
1024
zookeeper.jvmFlags
Extra JVM flags
-Djute.maxbuffer=4000000
zookeeper.persistence.enabled
Enable persistent storage
true
zookeeper.persistence.storageClass
Storage class
""
zookeeper.persistence.size
PVC size
8Gi
zookeeper.autopurge.purgeInterval
Purge interval in hours
1
zookeeper.autopurge.snapRetainCount
Snapshots to retain
5
zookeeper.image.repository
ZooKeeper image
bitnamilegacy/zookeeper
zookeeper.image.tag
ZooKeeper image tag
3.9.3-debian-12-r22
zookeeper.image.pullPolicy
Image pull policy
IfNotPresent
zookeeper.affinity
Pod affinity rules
{}
Using an External ZooKeeper
To connect to an existing ZooKeeper ensemble, disable the built-in one and set the URL override:
Deep Store Configuration
By default, the controller local filesystem is used as the deep store. For production, configure an external deep store using controller.extra.configs and server.extra.configs.
Amazon S3
For AWS authentication, attach an IAM role to the Kubernetes service account via IRSA or use serviceAccount.annotations to bind the role.
Google Cloud Storage (GCS)
Azure Data Lake Storage (ADLS)
HDFS
Security Configuration
TLS/SSL
To enable TLS on Pinot components, disable the default plaintext ports and configure HTTPS through extra configs. You will also need to mount TLS certificates using extraVolumes and extraVolumeMounts.
Basic Auth
Enable built-in basic authentication using the pinotAuth section:
Monitoring
Prometheus Metrics Export
Pinot exposes JMX metrics that can be scraped by Prometheus. Use pod annotations to enable auto-discovery:
For dedicated Prometheus monitoring setup with Grafana dashboards, see Monitor Pinot using Prometheus and Grafana.
Common Customization Examples
Production-Ready Overrides
Below is a values override file suitable as a starting point for production deployments:
Set resource requests and limits to the same values to ensure pods get a Guaranteed QoS class. This prevents OOM kills during traffic spikes.
Specifying Values with Helm
You can pass individual values on the command line:
Or use a custom values file:
Upgrade Procedures
Follow these steps for a safe Helm-based upgrade of a running Pinot cluster.
Pre-Upgrade Checklist
Review the Pinot release notes for breaking changes.
Back up your ZooKeeper data (table configs, schemas, segment metadata).
Ensure all tables are in a healthy state with no ongoing rebalances.
Test the upgrade in a staging environment first.
Rolling Upgrade Steps
Update the image tag in your values file:
Run a dry-run to review changes:
Apply the upgrade:
Monitor the rollout progress:
Recommended Upgrade Order
Upgrade components in this order to minimize disruption:
Minion -- has no live query traffic.
Controller -- manages metadata; upgrading first ensures the newest controller manages segment assignment.
Broker -- routes queries; rolling restart briefly shifts traffic to remaining brokers.
Server -- serves data; PDB ensures availability during rollout.
Avoid upgrading all components simultaneously. Use updateStrategy.type: RollingUpdate (the default) so pods restart one at a time.
Rollback
If issues arise, roll back to the previous release:
For additional guidance on production operations, see Running Pinot in Production and Kubernetes Deployment.
Last updated
Was this helpful?

