k8s部署 TDengine集群
目录
k8s部署 TDengine集群
一、在 Kubernetes 上部署 TDengine 集群
第一步:创建命名空间
第二步:从yaml创建有状态服务 StatefulSet
第三步:配置 Service 服务
二、集群测试
一、在 Kubernetes 上部署 TDengine 集群
本文适用 Kubernetes v1.19 以上版本
为了满足高可用的需求,集群需要满足如下要求:
3个及以上 dnode :TDengine 的同一个 vgroup 中的多个 vnode ,不允许同时分布在一个 dnode ,所以如果创建3副本的数据库,则 dnode 数大于等于3
3个 mnode :mnode 负责整个集群的管理工作,TDengine 默认是一个 mnode。如果这个 mnode 所在的 dnode 掉线,则整个集群不可用。
数据库的3副本:TDengine 的副本配置是数据库级别,所以数据库3副本可满足在3个 dnode 的集群中,任意一个 dnode 下线,都不影响集群的正常使用。如果下线 dnode 个数为2时,此时集群不可用,因为RAFT无法完成选举**
请特别注意startupProbe的配置,在 dnode 的 Pod 掉线一段时间后,再重新启动,这个时候新上线的 dnode 会短暂不可用。如果startupProbe配置过小,Kubernetes 会认为该 Pod 处于不正常的状态,并尝试重启该 Pod,该 dnode 的 Pod 会频繁重启,始终无法恢复到正常状态。
这里我们使用 kuboard 平台部署 TDengine 集群。
第一步:创建命名空间
第二步:从yaml创建有状态服务 StatefulSet
其中创建文件 tdengine.yaml,其中 replicas 定义集群节点的数量为 3。节点时区为中国(Asia/Shanghai),每个节点分配 5G 标准(standard)存储,你也可以根据实际情况进行相应修改。
---
apiVersion: apps/v1
kind: StatefulSet
metadata:name: "tdengine"labels:app: "tdengine"
spec:serviceName: "taosd"replicas: 3updateStrategy:type: RollingUpdateselector:matchLabels:app: "tdengine"template:metadata:name: "tdengine"labels:app: "tdengine"spec:containers:- name: "tdengine"image: "tdengine/tdengine:3.2.3.0"imagePullPolicy: "IfNotPresent"ports:- name: tcp6030protocol: "TCP"containerPort: 6030- name: tcp6041protocol: "TCP"containerPort: 6041env:# POD_NAME for FQDN config- name: POD_NAMEvalueFrom:fieldRef:fieldPath: metadata.name# SERVICE_NAME and NAMESPACE for fqdn resolve- name: SERVICE_NAMEvalue: "taosd"- name: STS_NAMEvalue: "tdengine"- name: STS_NAMESPACEvalueFrom:fieldRef:fieldPath: metadata.namespace# TZ for timezone settings, we recommend to always set it.- name: TZvalue: "Asia/Shanghai"# Environment variables with prefix TAOS_ will be parsed and converted into corresponding parameter in taos.cfg. For example, serverPort in taos.cfg should be configured by TAOS_SERVER_PORT when using K8S to deploy- name: TAOS_SERVER_PORTvalue: "6030"# Must set if you want a cluster.- name: TAOS_FIRST_EPvalue: "$(STS_NAME)-0.$(SERVICE_NAME).$(STS_NAMESPACE).svc.cluster.local:$(TAOS_SERVER_PORT)"# TAOS_FQND should always be set in k8s env.- name: TAOS_FQDNvalue: "$(POD_NAME).$(SERVICE_NAME).$(STS_NAMESPACE).svc.cluster.local"volumeMounts:- name: taosdatamountPath: /var/lib/taosstartupProbe:exec:command:- taos-checkfailureThreshold: 360periodSeconds: 10readinessProbe:exec:command:- taos-checkinitialDelaySeconds: 5timeoutSeconds: 5000livenessProbe:exec:command:- taos-checkinitialDelaySeconds: 15periodSeconds: 20volumeClaimTemplates:- metadata:name: taosdataspec:accessModes:- "ReadWriteOnce"storageClassName: "standard"resources:requests:storage: "5Gi"
可以看到部署成功如下图所示:
第三步:配置 Service 服务
其中创建了一个 Service 配置文件:taosd-service.yaml,内容如下:
---
apiVersion: v1
kind: Service
metadata:name: "taosd"labels:app: "tdengine"
spec:ports:- name: tcp6030protocol: "TCP"port: 6030- name: tcp6041protocol: "TCP"port: 6041selector:app: "tdengine"
部署成功如下图所示:
二、集群测试
输出如下:
taos> show dnodes
id | endpoint | vnodes | support_vnodes | status | create_time | reboot_time | note | active_code | c_active_code |
=============================================================================================================================================================================================================================================
1 | tdengine-0.ta... | 0 | 16 | ready | 2023-07-19 17:54:18.552 | 2023-07-19 17:54:18.469 | | | |
2 | tdengine-1.ta... | 0 | 16 | ready | 2023-07-19 17:54:37.828 | 2023-07-19 17:54:38.698 | | | |
3 | tdengine-2.ta... | 0 | 16 | ready | 2023-07-19 17:55:01.141 | 2023-07-19 17:55:02.039 | | | |
Query OK, 3 row(s) in set (0.001853s)
查看当前mnode
kubectl exec -it tdengine-1 -n tdengine-test -- taos -s "show mnodes\G"
taos> show mnodes\G
*************************** 1.row ***************************
id: 1
endpoint: tdengine-0.taosd.tdengine-test.svc.cluster.local:6030
role: leader
status: ready
create_time: 2023-07-19 17:54:18.559
reboot_time: 2023-07-19 17:54:19.520
Query OK, 1 row(s) in set (0.001282s)
创建mnode
kubectl exec -it tdengine-0 -n tdengine-test -- taos -s "create mnode on dnode 2"
kubectl exec -it tdengine-0 -n tdengine-test -- taos -s "create mnode on dnode 3"
查看mnode
kubectl exec -it tdengine-1 -n tdengine-test -- taos -s "show mnodes\G"
taos> show mnodes\G
*************************** 1.row ***************************
id: 1
endpoint: tdengine-0.taosd.tdengine-test.svc.cluster.local:6030
role: leader
status: ready
create_time: 2023-07-19 17:54:18.559
reboot_time: 2023-07-20 09:19:36.060
*************************** 2.row ***************************
id: 2
endpoint: tdengine-1.taosd.tdengine-test.svc.cluster.local:6030
role: follower
status: ready
create_time: 2023-07-20 09:22:05.600
reboot_time: 2023-07-20 09:22:12.838
*************************** 3.row ***************************
id: 3
endpoint: tdengine-2.taosd.tdengine-test.svc.cluster.local:6030
role: follower
status: ready
create_time: 2023-07-20 09:22:20.042
reboot_time: 2023-07-20 09:22:23.271
Query OK, 3 row(s) in set (0.003108s)