ThingsBoard容器编排:Docker Compose到Kubernetes迁移

ThingsBoard容器编排:Docker Compose到Kubernetes迁移

【免费下载链接】thingsboard Open-source IoT Platform - Device management, data collection, processing and visualization. 【免费下载链接】thingsboard 项目地址: https://gitcode.com/GitHub_Trending/th/thingsboard

引言

随着物联网项目规模的扩大,ThingsBoard的部署架构需要从简单的Docker Compose转向更强大的Kubernetes(K8s)编排系统。本文将详细介绍迁移过程,包括架构分析、资源配置转换和验证步骤,帮助运营人员平滑过渡到K8s环境。

现有Docker Compose架构分析

服务组成

当前Docker Compose配置包含多个核心服务,分布在docker/docker-compose.yml中:

  • 核心服务:tb-core1、tb-core2(负载均衡部署)
  • 规则引擎:tb-rule-engine1、tb-rule-engine2
  • 传输服务:MQTT、HTTP、CoAP、LwM2M、SNMP等协议支持
  • 辅助服务:ZooKeeper(服务发现)、tb-js-executor(JavaScript脚本执行)、tb-vc-executor(版本控制执行器)
  • 负载均衡:HAProxy作为入口流量分发

关键配置示例

ZooKeeper配置确保服务发现功能:

ZOOKEEPER_ENABLED=true
ZOOKEEPER_URL=zookeeper:2181

来源:docker/tb-node.env

MQTT传输服务配置:

MQTT_BIND_ADDRESS=0.0.0.0
MQTT_BIND_PORT=1883
MQTT_TIMEOUT=10000

来源:docker/tb-mqtt-transport.env

迁移准备:Kubernetes资源规划

命名空间规划

创建专用命名空间隔离ThingsBoard资源:

apiVersion: v1
kind: Namespace
metadata:
  name: thingsboard

核心资源类型映射

Docker Compose概念Kubernetes对应资源配置文件示例
服务(Service)Deploymenttb-core-deployment.yaml
环境变量ConfigMap/Secrettb-configmap.yaml
端口映射Service (NodePort/LoadBalancer)tb-service.yaml
数据卷PersistentVolumeClaimtb-pvc.yaml
负载均衡Ingresstb-ingress.yaml

核心服务迁移步骤

1. 配置文件转换

将环境变量文件转换为K8s ConfigMap:

Docker Compose环境变量K8s ConfigMap:

apiVersion: v1
kind: ConfigMap
metadata:
  name: tb-node-config
  namespace: thingsboard
data:
  ZOOKEEPER_ENABLED: "true"
  ZOOKEEPER_URL: "zk-service:2181"
  JS_EVALUATOR: "remote"
  TRANSPORT_TYPE: "remote"

基于docker/tb-node.env转换

2. 部署核心服务

创建tb-core Deployment(示例):

apiVersion: apps/v1
kind: Deployment
metadata:
  name: tb-core
  namespace: thingsboard
spec:
  replicas: 2
  selector:
    matchLabels:
      app: tb-core
  template:
    metadata:
      labels:
        app: tb-core
    spec:
      containers:
      - name: tb-core
        image: thingsboard/tb-node:latest
        ports:
        - containerPort: 8080
        - containerPort: 7070
        envFrom:
        - configMapRef:
            name: tb-node-config
        volumeMounts:
        - name: tb-config
          mountPath: /config
        - name: tb-logs
          mountPath: /var/log/thingsboard
  volumes:
  - name: tb-config
    configMap:
      name: tb-node-config-files
  - name: tb-logs
    persistentVolumeClaim:
      claimName: tb-logs-pvc

3. 服务暴露与负载均衡

替换HAProxy配置为K8s Service和Ingress:

HAProxy MQTT转发配置K8s Service:

apiVersion: v1
kind: Service
metadata:
  name: tb-mqtt-transport
  namespace: thingsboard
spec:
  selector:
    app: tb-mqtt-transport
  ports:
  - port: 1883
    targetPort: 1883
    protocol: TCP
  type: LoadBalancer

对应docker/haproxy/config/haproxy.cfg中MQTT监听配置

数据持久化方案

持久卷配置

为核心服务日志和配置创建PersistentVolumeClaim:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: tb-logs-pvc
  namespace: thingsboard
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi

迁移验证与测试

服务健康检查

部署后验证所有Pod状态:

kubectl get pods -n thingsboard

功能验证清单

  1. 服务发现:验证ZooKeeper集群连接状态
  2. 协议连接:测试MQTT客户端连接(端口1883)
  3. 数据流程:发送测试遥测数据并验证规则引擎处理
  4. Web访问:通过Ingress访问ThingsBoard UI

常见问题与解决方案

服务间通信问题

症状:核心服务无法连接到ZooKeeper
解决方案:确保Service名称解析正确,检查docker/tb-node.env中的ZOOKEEPER_URL配置是否更新为K8s Service名称

资源限制调整

根据实际负载调整Deployment资源请求:

resources:
  requests:
    memory: "2Gi"
    cpu: "1"
  limits:
    memory: "4Gi"
    cpu: "2"

总结与下一步

通过本文步骤,已完成从Docker Compose到Kubernetes的核心迁移。后续建议:

  1. 实施监控方案:部署Prometheus和Grafana监控集群状态
  2. 自动扩缩容:配置HPA(Horizontal Pod Autoscaler)应对负载变化
  3. 备份策略:定期备份数据库和配置数据
  4. CI/CD集成:实现Kubernetes资源的自动化部署

完整的Kubernetes迁移资源清单可参考项目docker/目录下的迁移指南和示例配置文件。

【免费下载链接】thingsboard Open-source IoT Platform - Device management, data collection, processing and visualization. 【免费下载链接】thingsboard 项目地址: https://gitcode.com/GitHub_Trending/th/thingsboard

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值