Apache IoTDB 在 Kubernetes 集群中的部署与实践指南
Apache IoTDB 是面向物联网的时序数据库。介绍基于 Kubernetes 和 Helm 的高可用部署方案。内容包括环境准备、PV 配置、Helm Chart 参数调整、私有仓库认证、安装流程及激活方法。详细说明了 ConfigNode 与 DataNode 的资源规划、存储持久化策略、故障排查手段以及三种激活模式,支持快速验证集群状态与连接测试。

Apache IoTDB 是面向物联网的时序数据库。介绍基于 Kubernetes 和 Helm 的高可用部署方案。内容包括环境准备、PV 配置、Helm Chart 参数调整、私有仓库认证、安装流程及激活方法。详细说明了 ConfigNode 与 DataNode 的资源规划、存储持久化策略、故障排查手段以及三种激活模式,支持快速验证集群状态与连接测试。

需要在本地有一个可用的 Kubernetes 集群,作为部署 IoTDB 集群的基础。
| 组件 | 版本要求 |
|---|---|
| Kubernetes | 1.24 以上 |
| IoTDB | v1.3.3.2 以上 |
| 存储类 | local-storage |
| 节点配置 | 4 核 8G 起 |
注意:在执行命名空间创建操作之前,需验证所指定的命名空间名称在 Kubernetes 集群中尚未被使用。如果命名空间已存在,创建命令将无法执行。
kubectl create ns iotdb-ns
kubectl get ns
PV 用于持久化存储 IoTDB 的 ConfigNode 和 DataNode 的数据,集群中有几个节点就要创建几个 PV。
注意:1 个 ConfigNode 和 1 个 DataNode 也算 2 个节点,要 2 个 PV。
博主这边以 3ConfigNode、3DataNode 为例:
新建文件夹放 yaml 文件
创建 pv.yaml 文件命令:
touch pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: iotdb-pv-01
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: local-storage
hostPath:
path: /data/k8s-data/iotdb-pv-01
type: DirectoryOrCreate
kubectl apply -f pv-01.yaml
kubectl apply -f pv-02.yaml
# 这里一直到 pv-06.yaml
kubectl get pv
注意:要在所有 Kubernetes 节点上创建对应的文件夹。
创建命令:
mkdir -p /data/k8s-data/iotdb-pv-01
mkdir -p /data/k8s-data/iotdb-pv-02
# 这里一直到 pv-06.yaml
需要参考 Helm 官网,此处不做过多叙述。 Helm 官方安装链接
需要联系工作人员获取 IoTDB 的 Helm Chart。
如果谁遇到代理问题,可以取消代理设置来解决:
git clone 报错如下,说明是配置了代理,需要把代理关掉 fatal: unable to access 'https://gitlab.timecho.com/r-d/db/iotdb-cluster-k8s.git/': gnutls_handshake() failed: The TLS connection was non-properly terminated.
取消代理命令:
unset HTTPS_PROXY
values.yaml 文件示例:
nameOverride: "iotdb"
fullnameOverride: "iotdb"
image:
repository: nexus.infra.timecho.com:8143/timecho/iotdb-enterprise
pullPolicy: IfNotPresent
tag: 1.3.3.2-standalone
storage:
className: local-storage
datanode:
name: datanode
nodeCount: 3
enableRestService: true
storageCapacity: 10Gi
resources:
requests:
memory: 2Gi
cpu: 1000m
limits:
memory: 4Gi
cpu: 1000m
confignode:
name: confignode
nodeCount: 3
storageCapacity: 10Gi
resources:
requests:
memory: 512Mi
cpu: 1000m
limits:
memory: 1024Mi
cpu: 2000m
configNodeConsensusProtocolClass:
'xxxxxx'是 IoTDB 私有仓库的账号、密码、邮箱。
kubectl create secret docker-registry timecho-nexus \
--docker-server='nexus.infra.timecho.com:8143' \
--docker-username='xxxxxx' \
--docker-password='xxxxxx' \
--docker-email='xxxxxx' \
-n iotdb-ns
查看 secret:
kubectl get secret timecho-nexus -n iotdb-ns
查看并输出为 yaml:
kubectl get secret timecho-nexus --output=yaml -n iotdb-ns
查看并解密:
kubectl get secret timecho-nexus --output="jsonpath={.data\.dockerconfigjson}" -n iotdb-ns | base64 --decode
kubectl patch serviceaccount default -n iotdb-ns -p'{"imagePullSecrets": [{"name": "timecho-nexus"}]}'
查看命名空间的该条信息:
kubectl get serviceaccounts -n iotdb-ns -o yaml
进入文件夹:
cd iotdb-cluster-k8s/helm
安装 iotdb:
helm install iotdb ./ -n iotdb-ns
helm list -n iotdb-ns
查看 iotdb 的 pods:
kubectl get pods -n iotdb-ns -o wide
执行命令后,输出了带有 confignode 和 datanode 标识的各 3 个 Pods,总共 6 个 Pods,即表明安装成功;需要注意的是,并非所有 Pods 都处于 Running 状态,未激活的 datanode 可能会持续重启,但在激活后将恢复正常。
kubectl get events -n iotdb-ns watch
kubectl get events -n iotdb-ns
kubectl describe pod confignode-0 -n iotdb-ns
kubectl describe pod datanode-0 -n iotdb-ns
kubectl logs -n iotdb-ns confignode-0 -f
方案 1:直接在 Pod 中激活(最简单) 拿到机器码后进行激活:
kubectl exec -it -n iotdb-ns confignode-0 -- /iotdb/sbin/start-activate.sh
kubectl exec -it -n iotdb-ns confignode-1 -- /iotdb/sbin/start-activate.sh
kubectl exec -it -n iotdb-ns confignode-2 -- /iotdb/sbin/start-activate.sh
方案 2:进入 confignode 的容器中激活 拿到机器码后进行激活:
kubectl exec -it -n iotdb-ns confignode-0 -- /bin/bash
cd /iotdb/sbin
/bin/bash start-activate.sh
方案 3:手动激活
kubectl describe pod confignode-0 -n iotdb-ns | grep -e "Node:" -e "Path:"
结果示例:
Node: a87/172.20.31.87 Path: /data/k8s-data/env/confignode/.env
kubectl get pvc -n iotdb-ns | grep "confignode-0"
也可以查看多个 confignode:
for i in {0..2}; do echo confignode-$i; kubectl describe pod confignode-${i} -n iotdb-ns | grep -e "Node:" -e "Path:"; echo "----"; done
kubectl describe pv iotdb-pv-04 | grep "Path:"
结果示例:
Path: /data/k8s-data/iotdb-pv-04
kubectl get pods -n iotdb-ns -o wide
结果示例:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
confignode-0 1/1 Running 0 75m 10.20.187.14 a87 <none> <none>
confignode-1 1/1 Running 0 75m 10.20.191.75 a88 <none> <none>
confignode-2 1/1 Running 0 75m 10.20.187.16 a87 <none> <none>
datanode-0 1/1 Running 10 (5m54s ago) 75m 10.20.191.74 a88 <none> <none>
datanode-1 1/1 Running 10 (5m42s ago) 75m 10.20.187.15 a87 <none> <none>
datanode-2 1/1 Running 10 (m55s ago) m a88 <> <>
kubectl get svc -n iotdb-ns
start-cli.sh -h 172.20.31.86 -p 31895
start-cli.sh -h 172.20.31.87 -p 31895
start-cli.sh -h 172.20.31.88 -p 31895
本文详细介绍了 Kubernetes 与 IoTDB 数据库的集成部署。通过 Kubernetes 的容器编排能力,IoTDB 可以快速部署,并实现高可用性。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online