确保拥有一个可用的 Kubernetes 集群(建议最低版本:Kubernetes 1.24),作为部署 IoTDB 集群的基础。
Kubernetes 版本要求:建议版本为 Kubernetes 1.24及以上
IoTDB版本要求:不能低于v1.3.3.2
注意:在执行命名空间创建操作之前,需验证所指定的命名空间名称在 Kubernetes 集群中尚未被使用。如果命名空间已存在,创建命令将无法执行,可能导致部署过程中的错误。
kubectl create ns iotdb-ns
kubectl get ns
PV用于持久化存储IoTDB的ConfigNode 和 DataNode的数据,有几个节点就要创建几个PV。
注:1个ConfigNode和1个DataNode 算2个节点,需要2个PV。
以 3ConfigNode、3DataNode 为例:
pv.yaml 文件,并复制六份,分别重命名为 pv01.yaml ~ pv06.yaml。#可新建个文件夹放yaml文件 #创建 pv.yaml 文件语句 touch pv.yaml
name 和 path 以确保一致性。pv.yaml 示例:
# pv.yaml apiVersion: v1 kind: PersistentVolume metadata: name: iotdb-pv-01 spec: capacity: storage: 10Gi # 存储容量 accessModes: # 访问模式 - ReadWriteOnce persistentVolumeReclaimPolicy: Retain # 回收策略 # 存储类名称,如果使用本地静态存储storageClassName 不用配置,如果使用动态存储必需设置此项 storageClassName: local-storage # 根据你的存储类型添加相应的配置 hostPath: # 如果是使用本地路径 path: /data/k8s-data/iotdb-pv-01 type: DirectoryOrCreate # 这行不配置就要手动创建文件夹
kubectl apply -f pv01.yaml kubectl apply -f pv-02.yaml ...
kubectl get pv
如果yaml里的hostPath-type未配置,需要手动创建对应的文件夹
在所有 Kubernetes 节点上创建对应的文件夹:
mkdir -p /data/k8s-data/iotdb-pv-01 mkdir -p /data/k8s-data/iotdb-pv-02 ...
安装Helm步骤请参考Helm官网
下载 Helm : 源码
如果遇到代理问题,取消代理设置:
git clone报错如下,说明是配置了代理,需要把代理关掉 fatal: unable to access ‘https://github.com/apache/iotdb-extras.git’: gnutls_handshake() failed: The TLS connection was non-properly terminated.
unset HTTPS_PROXY
确保使用的是支持的版本 >=1.3.3.2
values.yaml 示例:
nameOverride: "iotdb" fullnameOverride: "iotdb" #软件安装后的名称 image: repository: apache/iotdb pullPolicy: IfNotPresent tag: latest #软件所用的仓库和版本 storage: # 存储类名称,如果使用本地静态存储storageClassName 不用配置,如果使用动态存储必需设置此项 className: local-storage datanode: name: datanode nodeCount: 3 #datanode的节点数量 enableRestService: true storageCapacity: 10Gi #datanode的可用空间大小 resources: requests: memory: 2Gi #datanode的内存初始化大小 cpu: 1000m #datanode的CPU初始化大小 limits: memory: 4Gi #datanode的最大内存大小 cpu: 1000m #datanode的最大CPU大小 confignode: name: confignode nodeCount: 3 #confignode的节点数量 storageCapacity: 10Gi #confignode的可用空间大小 resources: requests: memory: 512Mi #confignode的内存初始化大小 cpu: 1000m #confignode的CPU初始化大小 limits: memory: 1024Mi #confignode的最大内存大小 cpu: 2000m #confignode的最大CPU大小 configNodeConsensusProtocolClass: org.apache.iotdb.consensus.ratis.RatisConsensus schemaReplicationFactor: 3 schemaRegionConsensusProtocolClass: org.apache.iotdb.consensus.ratis.RatisConsensus dataReplicationFactor: 2 dataRegionConsensusProtocolClass: org.apache.iotdb.consensus.iot.IoTConsensus
# 进入文件夹 cd iotdb-cluster-k8s/helm # 安装iotdb helm install iotdb ./ -n iotdb-ns
# helm list helm list -n iotdb-ns
# 查看 iotdb的pods kubectl get pods -n iotdb-ns -o wide
执行命令后,输出了带有confignode和datanode标识的各3个Pods,,总共6个Pods,即表明安装成功;需要注意的是,并非所有Pods都处于Running状态,未激活的datanode可能会持续重启,但在激活后将恢复正常。
# 查看k8s的创建log 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 # 查看confignode日志 kubectl logs -n iotdb-ns confignode-0 -f
查看iotdb-ns命名空间内的IP、状态等信息,确定全部运行正常
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 (5m55s ago) 75m 10.20.191.76 a88 <none> <none>
kubectl get svc -n iotdb-ns # 结果示例: # NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE # confignode-svc NodePort 10.10.226.151 <none> 80:31026/TCP 7d8h # datanode-svc NodePort 10.10.194.225 <none> 6667:31563/TCP 7d8h # jdbc-balancer LoadBalancer 10.10.191.209 <pending> 6667:31895/TCP 7d8h
端口即jdbc-balancer的端口,服务器为k8s任意节点的IP
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
新增pv,必须有可用的pv才可以扩容。
注意:DataNode重启后无法加入集群
原因:配置了静态存储的 hostPath 模式,并通过脚本修改了 iotdb-system.properties 文件,将 dn_data_dirs 设为 /iotdb6/iotdb_data,/iotdb7/iotdb_data,但未将默认存储路径 /iotdb/data 进行外挂,导致重启时数据丢失。
解决方案:是将 /iotdb/data 目录也进行外挂操作,且 ConfigNode 和 DataNode 均需如此设置,以确保数据完整性和集群稳定性。
示例:3 confignode 扩容为 4 confignode
修改iotdb-cluster-k8s/helm的values.yaml文件,将confignode的3改成4
helm upgrade iotdb . -n iotdb-ns
示例:3 datanode 扩容为 4 datanode
修改iotdb-cluster-k8s/helm的values.yaml文件,将datanode的3改成4
helm upgrade iotdb . -n iotdb-ns
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 (5m55s ago) 75m 10.20.191.76 a88 <none> <none> # datanode-3 1/1 Running 10 (5m55s ago) 75m 10.20.191.76 a88 <none> <none>