---
schema_version: "1"
id: 3384e387fa13d04e3f521d421b69a63cb0190c1cffff0ab601c9cbed1bd23f94
title: Helm Chart Reference
collection: tableau
version: next
locale: en-gb
portal_url: https://docs.salesforce.com/tableau/next/en-gb/server/server-helm-ref.md
canonical_url: https://help.tableau.com/v0.0/server/en-gb/server-helm-ref.htm
source_site: help.tableau.com
content_type: documentation
content_hash: 34c83fe3b5c92a8cfcb5a9559dde9b7b1d9dff19707654fbf6cd20324509edeb
description: "Important: This documentation assumes a knowledge of Helm and Helm charts and does not attempt to provide detailed, prescriptive examples"
---
[Skip to main content](#main-content)

# Tableau Server Helm Chart – Reference

**Important**: This documentation assumes a knowledge of Helm and Helm charts and does not attempt to provide detailed, prescriptive examples. It is designed for customers who are familiar with both Tableau Server and Helm and Helm charts.

## Introduction

This topic provides reference information for deploying Tableau Server on Kubernetes using a Helm chart.

### Values property matrix

The table below lists all leaf properties from `values.yaml`.

- **Value**: dotted key path
- **Optional**: whether the property can be omitted for chart rendering
- **Expected value(s)**: valid type or allowed values
- Range: numeric or semantic range where applicable

| Value | Default | Description | Optional | Expected value(s) | Range |
| --- | --- | --- | --- | --- | --- |
| deploymentMode | single | Deployment pattern selector | true | `single` or `multinode` | N/A |
| image.repository | "" | Tableau image repository | false | container image repo string | non-empty string |
| image.tag | "" | Tableau image tag | false | image tag string | non-empty string |
| image.pullPolicy | IfNotPresent | Image pull policy | true | `Always,IfNotPresent,Never` | N/A |
| image.pullSecrets | \[\] | Image pull secret refs | true | string array of secret names | N/A |
| serviceAccount.create | true | Create dedicated ServiceAccount | true | boolean | N/A |
| serviceAccount.name | "" | ServiceAccount name override | true | string | DNS label |
| serviceAccount.annotations | {} | ServiceAccount annotations | true | map\[string\]string | N/A |
| securityContext.runAsUser | 999 | Container UID | true | integer | \>=0 |
| securityContext.runAsGroup | 998 | Container GID | true | integer | \>=0 |
| podSecurityContext.runAsUser | 999 | Pod-level UID | true | integer | \>=0 |
| podSecurityContext.runAsGroup | 998 | Pod-level GID | true | integer | \>=0 |
| podSecurityContext.fsGroup | 998 | Shared volume FS group | true | integer | \>=0 |
| podSecurityContext.fsGroupChangePolicy | OnRootMismatch | FS group ownership policy | true | `OnRootMismatch` or `Always` | N/A |
| primary.replicaCount | 1 | Primary StatefulSet replicas | true | integer | \>=1 |
| primary.hostname | primary | Primary hostname hint | true | string | non-empty |
| primary.resources.limits.cpu | "16" | Primary CPU limit | true | Kubernetes CPU quantity | \>0 |
| primary.resources.limits.memory | "64Gi" | Primary memory limit | true | Kubernetes memory quantity | \>0 |
| primary.resources.requests.cpu | "8" | Primary CPU request | true | Kubernetes CPU quantity | \>0 |
| primary.resources.requests.memory | "32Gi" | Primary memory request | true | Kubernetes memory quantity | \>0 |
| primary.nodeSelector | {} | Primary node selector | true | map\[string\]string | N/A |
| primary.tolerations | \[\] | Primary tolerations | true | array of toleration objects | N/A |
| primary.affinity | {} | Primary affinity rules | true | affinity object | N/A |
| worker.replicaCount | 1 | Worker StatefulSet replicas | true | integer | \>=0 |
| worker.hostname | worker | Worker hostname hint | true | string | non-empty |
| worker.resources.limits.cpu | "16" | Worker CPU limit | true | Kubernetes CPU quantity | \>0 |
| worker.resources.limits.memory | "64Gi" | Worker memory limit | true | Kubernetes memory quantity | \>0 |
| worker.resources.requests.cpu | "8" | Worker CPU request | true | Kubernetes CPU quantity | \>0 |
| worker.resources.requests.memory | "32Gi" | Worker memory request | true | Kubernetes memory quantity | \>0 |
| worker.nodeSelector | {} | Worker node selector | true | map\[string\]string | N/A |
| worker.tolerations | \[\] | Worker tolerations | true | array of toleration objects | N/A |
| worker.affinity | {} | Worker affinity rules | true | affinity object | N/A |
| worker.healthChecks.enabled | false | Enable worker probes | true | boolean | N/A |
| env.ACCEPTEULA | "1" | Accept Tableau EULA | true | "`1`" or "`0`" | N/A |
| env.LICENSE\_KEY | "" | Licence key via env | true | string | non-empty if used |
| env.TABLEAU\_HOSTNAME | "" | Explicit Tableau hostname | true | string | DNS name/FQDN |
| env.TSM\_ONLY | "0" | Run TSM-only mode | true | "`1`" or "`0`" | N/A |
| env.TSM\_REMOTE\_UID | "" | TSM remote UID | true | numeric string | \>=0 |
| env.TSM\_REMOTE\_USERNAME | "" | TSM remote username | true | string | N/A |
| env.TSM\_REMOTE\_PASSWORD | "" | TSM remote password via env | true | string | non-empty if used |
| env.TABLEAU\_USERNAME | "" | Tableau admin username via env | true | string | non-empty if used |
| env.TABLEAU\_PASSWORD | "" | Tableau admin password via env | true | string | non-empty if used |
| env.ALWAYS\_WRITE\_BOOTSTRAP\_FILE | "0" | Write bootstrap file from primary | true | "`1`" or "`0`" | N/A |
| env.BOOTSTRAP\_INSTALL | "0" | Worker bootstrap install mode | true | "`1`" or "`0`" | N/A |
| env.WAIT\_FOR\_BOOTSTRAP\_FILE | "0" | Worker bootstrap install mode | true | "`1`" or "`0`" | N/A |
| env.HTTP\_PROXY | "" | Wait for bootstrap file | true | URL string | N/A |
| env.HTTPS\_PROXY | "" | HTTPS proxy URL | true | URL string | N/A |
| env.NO\_PROXY | "" | HTTPS proxy URL | true | comma-separated hosts/CIDRs | N/A |
| env.PORT\_RANGE\_MIN | 8600 | Dynamic port range minNo-proxy list | true | numeric string | 1-65535 |
| env.PORT\_RANGE\_MAX | 9000 | Dynamic port range max | true | numeric string | 1-65535; >= min |
| env.COORDINATION\_SERVICE\_CLIENT\_PORT | "" | ZK client port override | true | numeric string | 1-65535 |
| env.COORDINATION\_SERVICE\_PEER\_PORT | "" | ZK peer port override | true | numeric string | 1-65535 |
| env.LICENSE\_SERVICE\_VENDOR\_DAEMON\_PORT | "" | ZK leader port override | true | numeric string | 1-65535 |
| env.COORDINATION\_SERVICE\_LEADER\_PORT | "" | Licence daemon port override | true | numeric string | 1-65535 |
| env.AGENT\_FILE\_TRANSFER\_PORT | "" | Agent file transfer port override | true | numeric string | 1-65535 |
| env.CONTROLLER\_PORT | "" | Controller port override | true | numeric string | 1-65535 |
| persistence.enabled | true | Enable data PVCs | true | boolean | N/A |
| persistence.storageClass | "" | Data PVC storage class | true | string | existing StorageClass |
| persistence.accessMode | ReadWriteOnce | Data PVC access mode | true | `ReadWriteOnce,ReadOnlyMany,ReadWriteMany` | N/A |
| persistence.size | 100Gi | Data PVC size | true | Kubernetes quantity | \>0 |
| persistence.bootstrap.enabled | true | Enable bootstrap PVC (multi-node) | true | boolean | N/A |
| persistence.bootstrap.storageClass | "" | Bootstrap PVC storage class | true | string | existing StorageClass |
| persistence.bootstrap.accessMode | ReadWriteMany | Bootstrap PVC access mode | true | typically `ReadWriteMany` | N/A |
| persistence.bootstrap.size | 1Gi | Bootstrap PVC size | true | Kubernetes quantity | \>0 |
| persistence.bootstrap.createPV | false | Let chart create static PV | true | boolean | N/A |
| persistence.bootstrap.volumeName | "" | Explicit bootstrap PV name binding | true | string | existing PV name |
| persistence.bootstrap.pv.name | "" | PV name when `createPV=true` | true | string | DNS-1123 |
| persistence.bootstrap.pv.capacity | 1Gi | PV capacity | true | Kubernetes quantity | \>0 |
| persistence.bootstrap.pv.reclaimPolicy | Retain | PV reclaim policy | true | `Retain,Delete,Recycle` | N/A |
| persistence.bootstrap.pv.volumeMode | Filesystem | PV volume mode | true | `Filesystem` or `Block` | N/A |
| persistence.bootstrap.pv.csi.driver | efs.csi.aws.com | CSI driver for bootstrap PV | true | CSI driver name | N/A |
| persistence.bootstrap.pv.csi.volumeHandle | "" | EFS/FileSystem handle | true | provider-specific ID | non-empty if `createPV=true` |
| persistence.bootstrap.pv.csi.volumeAttributes | {} | CSI volume attributes map | true | map\[string\]string | N/A |
| persistence.bootstrap.permissionsFix.enabled | false | Enable bootstrap permission init | true | boolean | N/A |
| persistence.bootstrap.permissionsFix.image | busybox:1.36 | Permission-fix image | true | valid image ref | N/A |
| persistence.bootstrap.permissionsFix.runAsUser | 0 | UID for permission-fix init | true | integer | \>=0 |
| persistence.bootstrap.permissionsFix.fsOwner | 999 | chown UID for bootstrap dir | true | integer | \>=0 |
| persistence.bootstrap.permissionsFix.fsGroup | 998 | chown GID for bootstrap dir | true | integer | \>=0 |
| persistence.bootstrap.permissionsFix.dirMode | "2775" | chmod mode for bootstrap dir | true | string octal mode | 0000-7777 |
| config.configJson | JSON block | Tableau `config.json` content | true | valid JSON string | N/A |
| config.regInfoJson | JSON block | Tableau registration JSON | true | valid JSON string | N/A |
| config.tabsvcYml | YAML block | Tableau `tabsvc.yml` content | true | valid YAML string | N/A |
|   |   | Licence key via chart secret | true | string | non-empty if used |
| secrets.tsmRemotePassword | "" | TSM remote password via secret | true | string | non-empty if used |
| secrets.tableauUsername | "" | Tableau admin username via secret | true | string | non-empty if used |
| secrets.tableauPassword | "" | Tableau admin password via secret | true | string | non-empty if used |
| service.primary.type | ClusterIP | Primary service type | true | `ClusterIP,NodePort,LoadBalancer` | N/A |
| service.primary.ports.http | 80 | Primary HTTP port | true | integer | 1-65535 |
| service.primary.ports.gateway | 8080 | Primary gateway port | true | integer | 1-65535 |
| service.primary.ports.ssl | 8443 | Primary SSL port | true | integer | 1-65535 |
| service.primary.ports.tsm | 8850 | Primary TSM port | true | integer | 1-65535 |
| service.primary.ports.dynamic.start | 8600 | Dynamic port start | true | integer | 1-65535 |
| service.primary.ports.dynamic.end | 9000 | Dynamic port end | true | integer | 1-65535; >= star |
| service.primary.annotations | {} | Primary service annotations | true | map\[string\]string | N/A |
| service.worker.ports.http | ClusterIP | Worker service type | true | `ClusterIP,NodePort,LoadBalancer` | N/A |
| service.worker.ports.http | 80 | Worker HTTP port | true | integer | 1-65535 |
| service.worker.ports.gateway | 8080 | Worker gateway port | true | integer | 1-65535 |
| service.worker.ports.ssl | 8443 | Worker SSL port | true | integer | 1-65535 |
| service.worker.ports.tsm | 8850 | Worker TSM port | true | integer | 1-65535 |
| service.worker.ports.dynamic.start | 8600 | Worker dynamic start | true | integer | 1-65535 |
| service.worker.ports.dynamic.end | 9000 | Worker dynamic end | true | integer | 1-65535; >= start |
| service.worker.annotations | {} | Worker service annotations | true | map\[string\]string | N/A |
| ingress.enabled | false | Enable ingress | true | boolean | N/A |
| ingress.className | "" | Ingress class name | true | string | existing class |
| ingress.annotations | {} | Ingress annotations | true | map\[string\]string | N/A |
| ingress.hosts | \[{host: tableau.example.com, paths:\[...\]}\] | Ingress host/path config | true | array of host/path objects | N/A |
| ingress.tls | \[\] | Ingress TLS entries | true | array of TLS objects | N/A |
| healthChecks.startup.enabled | true | Enable startup probe | true | boolean | N/A |
| healthChecks.startup.initialDelaySeconds | 300 | Startup probe delay | true | integer | \>=0 |
| healthChecks.startup.periodSeconds | 15 | Startup probe period | true | integer | \>=1 |
| healthChecks.startup.timeoutSeconds | 30 | Startup probe timeout | true | integer | \>=1 |
| healthChecks.startup.failureThreshold | 200 | Startup failure threshold | true | integer | \>=1 |
| healthChecks.liveness.enabled | true | Enable liveness probe | true | boolean | N/A |
| healthChecks.liveness.initialDelaySeconds | 300 | Liveness probe delay | true | integer | \>=0 |
| healthChecks.liveness.periodSeconds | 30 | Liveness probe period | true | integer | \>=1 |
| healthChecks.liveness.timeoutSeconds | 10 | Liveness probe timeout | true | integer | \>=1 |
| healthChecks.liveness.successThreshold | 1 | Liveness success threshold | true | integer | \>=1 |
| healthChecks.liveness.failureThreshold | 3 | Liveness failure threshold | true | integer | \>=1 |
| healthChecks.readiness.enabled | true | Enable readiness probe | true | boolean | N/A |
| healthChecks.readiness.initialDelaySeconds | 300 | Readiness probe delay | true | integer | \>=0 |
| healthChecks.readiness.periodSeconds | 10 | Readiness probe period | true | integer | \>=1 |
| healthChecks.readiness.timeoutSeconds | 5 | Readiness probe timeout | true | integer | \>=1 |
| healthChecks.readiness.successThreshold | 1 | Readiness success threshold | true | integer | \>=1 |
| healthChecks.readiness.failureThreshold | 3 | Readiness failure threshold | true | integer | \>=1 |
| podDisruptionBudget.enabled | false | Enable PodDisruptionBudget | true | boolean | N/A |
| podDisruptionBudget.minAvailable | 1 | Minimum pods available | true | integer or percentage string | \>=0 |
| labels | {} | Extra common labels | true | map\[string\]string | N/A |
| annotations | {} | Extra common annotations | true | map\[string\]string | N/A |
| podLabels | {} | Extra pod labels | true | map\[string\]string | N/A |
| podAnnotations | {} | Extra pod annotations | true | map\[string\]string | N/A |
| hooks.autoApplyWorkerTopology.enabled | false | Enable post-install/upgrade topology hook | true | boolean | N/A |
| hooks.autoApplyWorkerTopology.kubectlImage | bitnami/kubectl:latest | Hook job kubectl image | true | valid image ref | N/A |
| hooks.autoApplyWorkerTopology.timeoutSeconds | 3600 | Hook timeout while waiting for workers | true integer >=60 | integer >=60 | \>=60 |

## Additional Resources

- [Tableau Server Helm Chart – Overview](https://help.tableau.com/v0.0/server/en-gb/server-in-container_helm-chart.htm)
- [Tableau Server Helm Chart – Prerequisites](https://help.tableau.com/v0.0/server/en-gb/server-helm-prerequisites.htm)
- [Tableau Server Helm Chart – Deploy](https://help.tableau.com/v0.0/server/en-gb/server-helm-deploy.htm)
- [Tableau Server Helm Chart – Examples](https://help.tableau.com/v0.0/server/en-gb/server-helm-examples.htm)
- [Tableau Server Helm Chart – Troubleshooting](https://help.tableau.com/v0.0/server/en-gb/server-helm-troubleshooting.htm)
- [Tableau Server Documentation](https://help.tableau.com/current/server-linux/en-gb/)