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 | "" | License 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 | "" | License 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 (multinode) | 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 |
| License 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 percent 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(Link opens in a new window)
- Tableau Server Helm Chart - Prerequisites(Link opens in a new window)
- Tableau Server Helm Chart - Deploy(Link opens in a new window)
- Tableau Server Helm Chart - Examples(Link opens in a new window)
- Tableau Server Helm Chart - Troubleshooting(Link opens in a new window)
- Tableau Server Documentation(Link opens in a new window)
