--- title: Use Helm to deploy TDengine sidebar_label: Helm description: This document describes how to deploy TDengine on Kubernetes by using Helm. --- Helm is a package manager for Kubernetes that can provide more capabilities in deploying on Kubernetes. ## Install Helm ```bash curl -fsSL -o get_helm.sh \ https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 chmod +x get_helm.sh ./get_helm.sh ``` Helm uses the kubectl and kubeconfig configurations to perform Kubernetes operations. For more information, see the Rancher configuration for Kubernetes installation. ## Install TDengine Chart To use TDengine Chart, download it from GitHub: ```bash wget https://github.com/taosdata/TDengine-Operator/raw/3.0/helm/tdengine-3.0.2.tgz ``` Query the storageclass of your Kubernetes deployment: ```bash kubectl get storageclass ``` With minikube, the default value is standard. Use Helm commands to install TDengine: ```bash helm install tdengine tdengine-3.0.2.tgz \ --set storage.className= ``` You can configure a small storage size in minikube to ensure that your deployment does not exceed your available disk space. ```bash helm install tdengine tdengine-3.0.2.tgz \ --set storage.className=standard \ --set storage.dataSize=2Gi \ --set storage.logSize=10Mi ``` After TDengine is deployed, TDengine Chart outputs information about how to use TDengine: ```bash export POD_NAME=$(kubectl get pods --namespace default \ -l "app.kubernetes.io/name=tdengine,app.kubernetes.io/instance=tdengine" \ -o jsonpath="{.items[0].metadata.name}") kubectl --namespace default exec $POD_NAME -- taos -s "show dnodes; show mnodes" kubectl --namespace default exec -it $POD_NAME -- taos ``` You can test the deployment by creating a table: ```bash kubectl --namespace default exec $POD_NAME -- \ taos -s "create database test; use test; create table t1 (ts timestamp, n int); insert into t1 values(now, 1)(now + 1s, 2); select * from t1;" ``` ## Configuring Values You can configure custom parameters in TDengine with the `values.yaml` file. Run the `helm show values` command to see all parameters supported by TDengine Chart. ```bash helm show values tdengine-3.0.2.tgz ``` Save the output of this command as `values.yaml`. Then you can modify this file with your desired values and use it to deploy a TDengine cluster: ```bash helm install tdengine tdengine-3.0.2.tgz -f values.yaml ``` The parameters are described as follows: ```yaml # Default values for tdengine. # This is a YAML-formatted file. # Declare variables to be passed into helm templates. replicaCount: 1 image: prefix: tdengine/tdengine #pullPolicy: Always # Overrides the image tag whose default is the chart appVersion. # tag: "3.0.2.0" service: # ClusterIP is the default service type, use NodeIP only if you know what you are doing. type: ClusterIP ports: # TCP range required tcp: [6030, 6041, 6042, 6043, 6044, 6046, 6047, 6048, 6049, 6060] # UDP range udp: [6044, 6045] # Set timezone here, not in taoscfg timezone: "Asia/Shanghai" resources: # We usually recommend not to specify default resources and to leave this as a conscious # choice for the user. This also increases chances charts run on environments with little # resources, such as Minikube. If you do want to specify resources, uncomment the following # lines, adjust them as necessary, and remove the curly braces after 'resources:'. # limits: # cpu: 100m # memory: 128Mi # requests: # cpu: 100m # memory: 128Mi storage: # Set storageClassName for pvc. K8s use default storage class if not set. # className: "" dataSize: "100Gi" logSize: "10Gi" nodeSelectors: taosd: # node selectors clusterDomainSuffix: "" # Config settings in taos.cfg file. # # The helm/k8s support will use environment variables for taos.cfg, # converting an upper-snake-cased variable like `TAOS_DEBUG_FLAG`, # to a camelCase taos config variable `debugFlag`. # # See the [Configuration Variables](../../reference/config) # # Note: # 1. firstEp/secondEp: should not be set here, it's auto generated at scale-up. # 2. serverPort: should not be set, we'll use the default 6030 in many places. # 3. fqdn: will be auto generated in kubernetes, user should not care about it. # 4. role: currently role is not supported - every node is able to be mnode and vnode. # # Btw, keep quotes "" around the value like below, even the value will be number or not. taoscfg: # Starts as cluster or not, must be 0 or 1. # 0: all pods will start as a separate TDengine server # 1: pods will start as TDengine server cluster. [default] CLUSTER: "1" # number of replications, for cluster only TAOS_REPLICA: "1" # # TAOS_NUM_OF_RPC_THREADS: number of threads for RPC #TAOS_NUM_OF_RPC_THREADS: "2" # # TAOS_NUM_OF_COMMIT_THREADS: number of threads to commit cache data #TAOS_NUM_OF_COMMIT_THREADS: "4" # enable/disable installation / usage report #TAOS_TELEMETRY_REPORTING: "1" # time interval of system monitor, seconds #TAOS_MONITOR_INTERVAL: "30" # time interval of dnode status reporting to mnode, seconds, for cluster only #TAOS_STATUS_INTERVAL: "1" # time interval of heart beat from shell to dnode, seconds #TAOS_SHELL_ACTIVITY_TIMER: "3" # minimum sliding window time, milli-second #TAOS_MIN_SLIDING_TIME: "10" # minimum time window, milli-second #TAOS_MIN_INTERVAL_TIME: "1" # the compressed rpc message, option: # -1 (no compression) # 0 (all message compressed), # > 0 (rpc message body which larger than this value will be compressed) #TAOS_COMPRESS_MSG_SIZE: "-1" # max number of connections allowed in dnode #TAOS_MAX_SHELL_CONNS: "50000" # stop writing logs when the disk size of the log folder is less than this value #TAOS_MINIMAL_LOG_DIR_G_B: "0.1" # stop writing temporary files when the disk size of the tmp folder is less than this value #TAOS_MINIMAL_TMP_DIR_G_B: "0.1" # if disk free space is less than this value, taosd service exit directly within startup process #TAOS_MINIMAL_DATA_DIR_G_B: "0.1" # One mnode is equal to the number of vnode consumed #TAOS_MNODE_EQUAL_VNODE_NUM: "4" # enbale/disable http service #TAOS_HTTP: "1" # enable/disable system monitor #TAOS_MONITOR: "1" # enable/disable async log #TAOS_ASYNC_LOG: "1" # # time of keeping log files, days #TAOS_LOG_KEEP_DAYS: "0" # The following parameters are used for debug purpose only. # debugFlag 8 bits mask: FILE-SCREEN-UNUSED-HeartBeat-DUMP-TRACE_WARN-ERROR # 131: output warning and error # 135: output debug, warning and error # 143: output trace, debug, warning and error to log # 199: output debug, warning and error to both screen and file # 207: output trace, debug, warning and error to both screen and file # # debug flag for all log type, take effect when non-zero value\ #TAOS_DEBUG_FLAG: "143" # generate core file when service crash #TAOS_ENABLE_CORE_FILE: "1" ``` ## Scaling Out For information about scaling out your deployment, see Kubernetes. Additional Helm-specific is described as follows. First, obtain the name of the StatefulSet service for your deployment. ```bash export STS_NAME=$(kubectl get statefulset \ -l "app.kubernetes.io/name=tdengine" \ -o jsonpath="{.items[0].metadata.name}") ``` You can scale out your deployment by adding replicas. The following command scales a deployment to three nodes: ```bash kubectl scale --replicas 3 statefulset/$STS_NAME ``` Run the `show dnodes` and `show mnodes` commands to check whether the scale-out was successful. ## Scaling In :::warning Exercise caution when scaling in a cluster. ::: Determine which dnodes you want to remove and drop them manually. ```bash kubectl --namespace default exec $POD_NAME -- \ cat /var/lib/taos/dnode/dnodeEps.json \ | jq '.dnodeInfos[1:] |map(.dnodeFqdn + ":" + (.dnodePort|tostring)) | .[]' -r kubectl --namespace default exec $POD_NAME -- taos -s "show dnodes" kubectl --namespace default exec $POD_NAME -- taos -s 'drop dnode ""' ``` ## Remove a TDengine Cluster You can use Helm to remove your cluster: ```bash helm uninstall tdengine ``` However, Helm does not remove PVCs automatically. After you remove your cluster, manually remove all PVCs.