Configuring Your Values to Deploy Dremio to Kubernetes
Helm is a standard for managing Kubernetes applications, and the Helm chart defines how applications are deployed to Kubernetes. Dremio's Helm chart contains the default deployment configurations, which are specified in the values.yaml.
Dremio recommends configuring your deployment values in a separate .yaml file since it will allow simpler updates to the latest version of the Helm chart by copying the separate configuration file across Helm chart updates.
If you are using an Enterprise Edition free trial, you don't need to do all the configurations described on this page. Instead, follow the configuration steps described in Get Started with the Enterprise Edition Free Trial.
Configure Your Values
To configure your deployment values, do the following:
-
Get the
values-overrides.yamlconfiguration file and save it locally. Click here to download the file.The
values-overrides.yamlconfiguration file
# A Dremio License is required
dremio:
license: "<your-license-key>"
image:
repository: quay.io/dremio/dremio-enterprise
# Configuration file customization
# The configFiles and configBinaries options provide the ability to override or add configuration files
# included in the Dremio ConfigMap. Both use a map where keys correspond to the filenames
# and values are the file contents.
# configFiles: Use this to provide text-based configuration files that will be mounted in /opt/dremio/conf/
# Note: The dremio.conf file is controlled by multiple settings in this values file and
# should not be directly overridden here.
# Example:
#configFiles:
# vault_config.json: |
# {
# <your-vault-json-config>
# }
# configBinaries: Use this to provide binary configuration files (encoded as base64)
# These files will also be mounted in /opt/dremio/conf/
# Example:
#configBinaries:
# custom-truststore.jks: "base64EncodedBinaryContent"
# dremioConfExtraOptions: Use this to add settings in dremio.conf
# Example:
#dremioConfExtraOptions:
# # Enable SSL for fabric services
# "services.fabric.ssl.enabled": true
# "services.fabric.ssl.auto-certificate.enabled": false
# Hive 2 and 3 configuration files - can be provided here too. See: https://docs.dremio.com/current/deploy-dremio/configuring-kubernetes/#hive
#hive2ConfigFiles:
#
#hive3ConfigFiles:
#
# To pull images from Dremio's Quay, you must create an image pull secret. For more info, see:
# https://kubernetes.io/docs/concepts/containers/images/#specifying-imagepullsecrets-on-a-pod
# All of the images are pulled using this same secret.
imagePullSecrets:
- <your-pull-secret-name>
# Dremio Coordinator
coordinator:
web:
auth:
enabled: true
type: "internal" # Valid types are: internal, ldap, azuread, oauth, oauth+ldap
# if enabled is true and type ldap, azuread, oauth, or oauth+ldap
# Uncomment the entry below and provide the JSON configuration inline
# OR use --set-file coordinator.web.auth.ssoFile=/path/to/file for the SSO provider configuration file during Helm install
# for more information about the file format for your SSO provider
# see https://docs.dremio.com/current/get-started/cluster-deployments/customizing-configuration/dremio-conf/sso-config/
# ssoFile: |
# {
# <your-sso-json-file-content>
# }
tls:
enabled: false
secret: "<your-tls-secret-name>"
client:
tls:
enabled: false
secret: "<your-tls-secret-name>"
flight:
tls:
enabled: false
secret: "<your-tls-secret-name>"
resources:
requests:
cpu: "32"
memory: "64Gi"
limits:
memory: "64Gi"
volumeSize: 512Gi
# Control where uploaded files are stored for Dremio.
# For more information, see https://docs.dremio.com/current/get-started/cluster-deployments/architecture/distributed-storage/
distStorage:
# The supported distributed storage types are: aws, gcp, or azureStorage. For S3-compatible storage use aws.
type: <your-distributed-storage-type> # Add here your distributed storage template from http://docs.dremio.com/current/deploy-dremio/configuring-kubernetes/#configuring-the-distributed-storage
# Dremio Catalog
catalog:
externalAccess:
enabled: true
tls:
enabled: false
secret: "<your-catalog-tls-secret-name>"
# This is where Iceberg tables created in your catalog will reside
storage:
# The supported catalog storage types are: S3, azure and GCS. For S3-compatible storage use S3.
type: <your-catalog-storage-type>
# Add here your catalog storage template from https://docs.dremio.com/current/deploy-dremio/configuring-kubernetes/#configuring-storage-for-dremio-catalog
service:
type: LoadBalancer -
Edit the
values-overrides.yamlfile to configure your values. See the following sections for details on each configuration option:- License
- Pull Secret
- Coordinator
- Coordinator's Distributed Storage
- Enterprise Catalog
- Advanced Values Configurations
IMPORTANTIn all code examples,
...denotes additional values that have been omitted.Group all values associated with a given parent key in the YAML under a single instance of that parent, for example:
DoDo notdremio:
key-one: <value-one>
key-two:
key-three: <value-two>dremio:
key-one: <value-one>
dremio:
key-two:
key-three: <value-two>Please note the parent relationships at the top of each YAML snippet and subsequent values throughout this section. The hierarchy of keys and indentations in YAML must be respected.
-
Save the
values-overrides.yamlfile.
Once done with the configuration, deploy Dremio to Kubernetes. See how in Deploying Dremio to Kubernetes.
License
Provide your license key. To obtain a license, see Licensing.
Add this configuration under the parent, as shown in the following example:
dremio:
license: "<your-license-key>"
...
Pull Secret
Provide the secret used to pull the images from Quay.io as follows:
-
Log in to Quay.io, select your account name at the top right corner, and select Account Settings in the drop-down menu.
-
Click Generate Encrypted Password, type your password, and click Verify.
-
On the next dialog, select Kubernetes Secret, and follow steps 1 and 2 to download the secret and run the command to submit the secret to the cluster.
-
Add the configuration under the parent, as shown in the following example:
Configuration of the secret to pull images from Quay.ioimagePullSecrets:
- <your-quayio-secret-name>
Coordinator
Resource Configuration
Configure the volume size, resources limits, and resources requests. To configure these values, see Recommended Resources Configuration.
Add this configuration under the parents, as shown in the following example:
Configuration of the coordinator's resources with example valuescoordinator:
resources:
requests:
cpu: 15
memory: 30Gi
volumeSize: 100Gi
...
Identity Provider
Optionally, you can configure authentication via an identity provider. Each type of identity provider requires an additional configuration file provided during Dremio's deployment.
Select the authentication type, and follow the corresponding link for instructions on how to create the associated configuration file:
azuread- See how to configure Microsoft Entra ID with user and group lookup.ldap- See how to configure Dremio for LDAP.oauth- See how to configure Dremio for OpenID.oauth+ldap- See how to configure Dremio for Hybrid OpenID+LDAP.
Add this configuration under the parents, as shown in the following example:
Configuration of the coordinator's identity providercoordinator:
web:
auth:
type: <your-auth-type>
...
The identity provider configuration file can be embedded in your values-overrides.yaml. To do this, use the ssoFile option and provide the JSON content constructed per the instructions linked above. Here is an example for Microsoft Entra ID:
coordinator:
web:
auth:
enabled: true
type: "azuread"
ssoFile: |
{
"oAuthConfig": {
"clientId": "<your-client-id>",
"clientSecret": "<your-secret>",
"redirectUrl": "<your-redirect-url>",
"authorityUrl": "https://login.microsoftonline.com/<your-tenant-id>/v2.0",
"scope": "openid profile",
"jwtClaims": {
"userName": "<your-preferred-username>"
}
}
}
...
For examples for the other types, see Identity Providers
This is not the only configuration file that can be embedded inside the values-overrides.yaml file. However, these are generally used for advanced configurations. For more information, see Additional Configuration.
Transport Level Security
Optionally enable the desired level of Transport Level Security (TLS) by setting enabled: true for client, Arrow Flight, or web TLS. To provide the TLS secret, see Creating a TLS Secret.
Add this configuration under the parent, as shown in the following example:
Configuration of TLS for the coordinatorcoordinator:
client:
tls:
enabled: false
secret: <your-tls-secret>
flight:
tls:
enabled: false
secret: <your-tls-secret>
web:
tls:
enabled: false
secret: <your-tls-secret>
...
If Web TLS is enabled, see Configuring the Enterprise Catalog when Coordinator Web is Using TLS.
Coordinator's Distributed Storage
This is where Dremio stores metadata, Reflections, and uploaded files, and it's required for Dremio to be operational. The supported types are Amazon S3 or S3-compatible storage, Azure Storage, and Google Cloud Storage (GCS). For examples of configurations, see Configuring the Distributed Storage.
Add this configuration under the parent, as shown in the following example:
Configuration of the coordinator's distributed storagedistStorage:
type: "<your-dist-store-type>"
...
Enterprise Catalog
The configuration for the Enterprise Catalog has several options:
-
Configuring storage for the Enterprise Catalog is mandatory since this is the location where Iceberg tables created in the catalog will be written. For configuring the storage, see Configuring Storage for the Enterprise Catalog.
Add this configuration under the parent, as shown in the following example:
Configuration of the storage for the Enterprise Catalogcatalog:
storage:
location: <your-object-store-path>
type: <your-object-store-type>
... -
(Optional) Configure external access if you want to connect to the Enterprise Catalog with an engine other than Dremio that supports Iceberg REST. For example, Spark.
Add this configuration under the parent, as shown in the following example:
Configuration of external access for the Enterprise Catalogcatalog:
externalAccess:
enabled: true
... -
(Optional) Use Transport Level Security (TLS) for external access to require clients connecting to the Enterprise Catalog from outside the namespace to use TLS. To configure it, see Configuring TLS for Enterprise Catalog External Access.
Add this configuration under the parent, as shown in the following example:
Configuration of TLS for external access to the Enterprise Catalogcatalog:
externalAccess:
enabled: true
tls:
enabled: true
secret: <your-catalog-tls-secret>
... -
(Optional) If Dremio coordinator web access is using TLS, additional configuration is necessary. To configure it, see Configuring the Enterprise Catalog When the Coordinator Web is Using TLS.
Add this configuration under the parent, as shown in the following example:
Configuration of the Enterprise Catalog when the coordinator web access is using TLScatalog:
externalAccess:
enabled: true
authentication:
authServerHostname: <your-auth-server-host>
...
Save the values-overrides.yaml file.
Once done with the configuration, deploy Dremio to Kubernetes. See how in the topic Deploying Dremio to Kubernetes.
Configuring Your Values - Advanced
OpenShift
OpenShift has additional prerequisites that must be applied before installing Dremio. For more information, see Deploy on Kubernetes - Prerequisites.
To deploy successfully on OpenShift, you must deploy with two override files. The YAML file you've been using to this point (values-overrides.yaml), and an additional YAML file mentioned below (openshift-overrides.yaml) with security settings required by OpenShift per its default configuration. Both can be provided in a single Helm install command.
Get the openshift-overrides.yaml configuration file and save it locally.
Click here to download the file.
Dremio Platform Images
The Dremio platform requires 18 images when running fully featured. All images are published by Dremio to our Quay and are listed below. If you want to use a private mirror of our repository, add the snippets below to values-overrides.yaml to repoint to your own.
Dremio Platform Images
If creating a private mirror, use the same repository names and tags from Dremio's Quay.io. This is important for supportability.
dremio:
image:
repository: quay.io/dremio/dremio-enterprise
tag: <the-image-tag-from-quayio>
busyBox:
image:
repository: quay.io/dremio/busybox
tag: <the-image-tag-from-quayio>
k8s:
image:
repository: quay.io/dremio/alpine/k8s
tag: <the-image-tag-from-quay-io>
engine:
operator:
image:
repository: quay.io/dremio/dremio-engine-operator
tag: <the-image-tag-from-quay-io>
zookeeper:
image:
repository: quay.io/dremio/zookeeper
tag: <the-image-tag-from-quay-io>
opensearch:
image:
repository: quay.io/dremio/dremio-search-opensearch
tag: <the-image-tag-from-quay-io> # The tag version must be a valid OpenSearch version as listed here https://opensearch.org/docs/latest/version-history/
preInstallJob:
image:
repository: quay.io/dremio/dremio-search-init
tag: <the-image-tag-from-quay-io>
opensearchOperator:
manager:
image:
repository: quay.io/dremio/dremio-opensearch-operator
tag: <the-image-tag-from-quay-io>
kubeRbacProxy:
image:
repository: quay.io/dremio/kubebuilder/kube-rbac-proxy
tag: <the-image-tag-from-quay-io>
mongodbOperator:
image:
repository: quay.io/dremio/dremio-mongodb-operator
tag: <the-image-tag-from-quay-io>
mongodb:
image:
repository: quay.io/dremio/percona/percona-server-mongodb
tag: <the-image-tag-from-quay-io>
catalogservices:
image:
repository: quay.io/dremio/dremio-catalog-services-server
tag: <the-image-tag-from-quay-io>
catalog:
image:
repository: quay.io/dremio/dremio-catalog-server
tag: <the-image-tag-from-quay-io>
externaAccess:
image:
repository: quay.io/dremio/dremio-catalog-server-external
tag: <the-image-tag-from-quay-io>
nats:
container:
image:
repository: quay.io/dremio/nats
tag: <the-image-tag-from-quay-io>
reloader:
image:
repository: quay.io/dremio/natsio/nats-server-config-reloader
tag: <the-image-tag-from-quay-io>
natsBox:
container:
image:
repository: quay.io/dremio/natsio/nats-box
tag: <the-image-tag-from-quay-io>
telemetry:
image:
repository: quay.io/dremio/otel/opentelemetry-collector-contrib
tag: <the-image-tag-from-quay-io>
Scale-out Coordinators
Dremio can scale to support high-concurrency use cases through scaling coordinators. Multiple stateless coordinators rely on the primary coordinator to manage Dremio's state, enabling Dremio to support many more concurrent users. These scale-out coordinators are intended for high query throughput and are not applicable for standby or disaster recovery. While scale-out coordinators generally reduce the load on the primary coordinator, the primary coordinator's vCPU request should be increased for every two scale-outs added to avoid negatively impacting performance.
Perform this configuration in this section of the file, where count refers to the number of scale-outs. A count of 0 will provision only the primary coordinator:
Configuration of scale-out coordinators with an example valuecoordinator:
count: 1
...
When using scale-out coordinators, the load balancer session affinity should be enhanced. See: Advanced Load Balancer Configuration.
Configuring Kubernetes Pod Metadata (including Node Selector)
It's possible to add metadata both globally and to each of the StatefulSets (coordinators, classic engines, ZooKeeper, etc.), including configuring a node selector for pods to use specific node pools.
Define these values with caution and foreknowledge of expected entries because any misconfiguration may result in Kubernetes being unable to schedule your pods.
Use the following options to add metadata:
-
Configuration of a global label with a key-value examplelabels:- Configured using key-value pairs as shown in the following examples:Configuration of a StatefulSet label for the Enterprise Catalog with a key-value examplelabels:
foo: barcatalog:
labels:
foo: bar
...For more information on labels, see the Kubernetes documentation on Labels and Selectors.
-
Configuration of a global annotation with a key-value exampleannotations:- Configured using key-value pairs as shown in the following examples.Configuration of a StatefulSet annotation for MongoDB with a key-value exampleannotations:
foo: barmongodb:
annotations:
foo: bar
...For more information on annotations, see the Kubernetes documentation on Annotations.
-
Configuration of a global toleration with example valuestolerations:- Configured using a specific structure as shown in the following examples:Configuration of a StatefulSet toleration for the Enterprise Catalog with example valuestolerations:
- key: "key1"
operator: "Equal"
value: "value1"
effect: "NoSchedule"catalog:
tolerations:
- key: "key1"
operator: "Equal"
value: "value1"
effect: "NoSchedule"
...For more information on tolerations, see the Kubernetes documentation on Taints and Tolerations.
-
Configuration of a global node selector with an example valuenodeSelector:- Configured using a specific structure as shown in the following examples.Configuration of a StatefulSet node selector for the coordinator with an example valuenodeSelector:
nodetype: coordinatorcoordinator:
nodeSelector:
nodetype: coordinator
...
To understand the structure and values to use in the configurations, expand "Metadata Structure and Values" below:
Metadata Structure and Values
For global metadata:
Global metadata structureannotations: {}
labels: {}
tolerations: []
nodeSelector: {}
For StatefulSet metadata:
StatefulSet metadata structure for the coordinatorcoordinator:
annotations: {}
labels: {}
tolerations: []
nodeSelector:
nodetype: coordinator
executor:
annotations: {}
labels: {}
tolerations: []
nodeSelector:
nodetype: coordinator
catalog:
annotations: {}
labels: {}
tolerations: []
nodeSelector:
nodetype: catalog
catalogservices:
annotations: {}
labels: {}
tolerations: []
nodeSelector:
nodetype: catalogservices
mongodb:
annotations: {}
labels: {}
tolerations: []
nodeSelector:
nodetype: mongo
opensearch:
annotations: {}
labels: {}
tolerations: []
nodeSelector:
nodetype: operators
oidcProxy:
annotations: {}
labels: {}
tolerations: []
nodeSelector:
nodeType: utils
preInstallJob:
annotations: {}
labels: {}
tolerations: []
nodeSelector:
nodeType: jobs
nats:
podTemplate:
merge:
spec:
annotations: {}
labels: {}
tolerations: []
nodeSelector:
nodetype: nats
mongodbOperator:
annotations: {}
labels: {}
tolerations: []
nodeSelector:
nodetype: operators
opensearchOperator:
annotations: {}
labels: {}
tolerations: []
nodeSelector:
nodetype: operators
Configuring Extra Environment Variables
Optionally, you can define extra environment variables to be passed to either coordinators or executors. This can be done by adding the configuration under the parents as shown in the following examples:
Configuration of extra environment variables for the coordinatorcoordinator:
extraEnvs:
- name: <your-variable-name>
value: "<your-variable-value>"
...
executor:
extraEnvs:
- name: <your-variable-name>
value: "<your-variable-value>"
...
Environment variables defined as shown will be applied to Executors of both Classic Engines and New Engines.
Advanced Load Balancer Configuration
Dremio will create a public load balancer by default, and the Dremio Client service will provide an external IP to connect to Dremio. For more information, see Connecting to the Dremio Console.
-
Private Cluster - For private Kubernetes clusters (no public endpoint), set
Configuration of an internal load balancerinternalLoadBalancer: true. Add this configuration under the parent as shown in the following example:service:
type: LoadBalancer
internalLoadBalancer: true
... -
Static IP - To define a static IP for your load balancer, set
Configuration of a static IP for the load balancerloadBalancerIP: <your-static-IP>. If unset, an available IP will be assigned upon creation of the load balancer. Add this configuration under the parent as shown in the following example:service:
type: LoadBalancer
loadBalancerIP: <your-desired-ip>
...tipThis can be helpful if DNS is configured to expect Dremio to have a specific IP.
-
Session Affinity - If leveraging scale-out coordinators, set this to
Configuration of session affinity for scale-out coordinatorsClientIP, otherwise leave unset. Add this configuration under the parent as shown in the following example:service:
type: LoadBalancer
sessionAffinity: ClientIP
...