300 lines
		
	
	
		
			8.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
			
		
		
	
	
			300 lines
		
	
	
		
			8.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
| ---
 | |
| 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=<your storage class name>
 | |
| 
 | |
| ```
 | |
| 
 | |
| 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 "<you dnode in list>"'
 | |
| 
 | |
| ```
 | |
| 
 | |
| ## 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.
 |