- 前置要求
- 配置Kubernetes环境
- 添加TBMQ集群Helm仓库
- 修改默认chart值
- 创建命名空间
- 安装TBMQ Helm chart
- 验证HTTP访问
- 验证MQTT访问
- 故障排除
- 升级
- 卸载TBMQ Helm chart
- 删除Kubernetes集群
- 下一步
本指南将帮助你在自托管Kubernetes环境下使用官方Helm chart 部署TBMQ集群,以Minikube作为参考环境。 若在无云负载均衡器集成的自管集群中部署TBMQ,Minikube便于端到端测试。
前置要求
要在 Minikube 中使用 Helm 部署 TBMQ 集群,需在本地机器上安装以下工具:
配置Kubernetes环境
启动 Minikube
1
minikube start
安装 NGINX Ingress Controller
在 Minikube 等通用 Kubernetes 环境中暴露 HTTP(S) 服务,需安装 NGINX Ingress Controller。 本示例使用 Helm 安装并配置为 LoadBalancer 服务类型:
1
2
3
4
5
6
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
helm install nginx-ingress ingress-nginx/ingress-nginx \
--set controller.admissionWebhooks.enabled=false \
--set controller.service.type=LoadBalancer
这将在 default 命名空间部署 NGINX ingress controller,并配置为通过 LoadBalancer 服务对外暴露流量。 继续前,请确保 ingress controller pod 已运行且就绪:
1
kubectl get pods -n default
输出应类似:
1
2
NAME READY STATUS RESTARTS AGE
nginx-ingress-ingress-nginx-controller-xxxxx 1/1 Running 0 1m
启动 Minikube Tunnel
由于 Minikube 本身不支持外部 LoadBalancer 服务,需创建 tunnel 以在集群外暴露这些服务。 这是访问 NGINX Ingress Controller 和 TBMQ 的 MQTT LoadBalancer 等服务的必要条件。
在单独终端中运行以下命令:
1
minikube tunnel
此命令需要管理员权限,可能会提示输入密码。 它将在您的机器上创建网络路由并为 NGINX LoadBalancer 服务分配外部 IP。
启动 tunnel 后,验证 NGINX Ingress Controller 是否已获得 EXTERNAL-IP:
1
kubectl get svc -n default
示例输出:
1
2
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-ingress-ingress-nginx-controller LoadBalancer 10.101.102.99 192.168.49.2 80:32023/TCP,443:32144/TCP 2m
添加TBMQ集群Helm仓库
安装 chart 前,请将 TBMQ Helm 仓库添加到本地 Helm 客户端:
1
2
helm repo add tbmq-helm-chart https://helm.thingsboard.io/tbmq
helm repo update
修改默认chart值
要自定义 TBMQ 部署,请先从 chart 下载默认 values.yaml 文件:
1
helm show values tbmq-helm-chart/tbmq-cluster > values.yaml
External PostgreSQL
默认情况下,chart 会安装 Bitnami PostgreSQL 作为子 chart:
1
2
3
4
5
# 此部分将引入 bitnami/postgresql (https://artifacthub.io/packages/helm/bitnami/postgresql)。
# 若要添加额外配置参数,可将其放在 `postgresql` 键下,将传递给 bitnami/postgresql chart
postgresql:
# @param enabled 若 enabled 为 true,将忽略 externalPostgresql 配置
enabled: true
该 chart 将配置单节点实例,支持可配置的存储、备份和监控选项。
若已有 PostgreSQL 实例,可将 TBMQ 配置为外部连接。
为此,请将 postgresql.enabled 设为 false 以禁用内置 PostgreSQL,并在 externalPostgresql 部分指定连接详情。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 若在外部部署 PostgreSQL,请在此部分配置
externalPostgresql:
# @param host - 外部 PostgreSQL 服务器 host
host: ""
# @param port - 外部 PostgreSQL 服务器端口
##
port: 5432
# @param username - PostgreSQL 用户
##
username: "postgres"
# @param password - PostgreSQL 用户密码
##
password: "postgres"
# @param database - TBMQ 使用的 PostgreSQL 数据库名
##
database: "thingsboard_mqtt_broker"
负载均衡器配置
默认情况下,在 Kubernetes 上安装 TBMQ 时,Helm chart 会为标准 NGINX Ingress Controller 部署 HTTP 和 MQTT 流量配置。
1
2
loadbalancer:
type: "nginx"
此配置适用于 Minikube 及其他通用 Kubernetes 环境。
HTTPS 访问
目前 NGINX Ingress Controller 在负载均衡器层面的 HTTPS 终止尚未实现。此功能可能在后续版本中添加。
MQTTS 访问
NGINX Ingress Controller 不支持基于 TCP 的协议(如 MQTT)的 TLS 终止。 若要保护 MQTT 通信,必须在应用层(TBMQ 侧)直接配置双向 TLS(Mutual TLS 或 mTLS)。 有关配置双向 TLS 的详情,请参阅 TBMQ Helm chart 文档 此处。
创建命名空间
建议为 TBMQ 集群部署创建专用命名空间:
1
kubectl create namespace tbmq
1
kubectl config set-context --current --namespace=tbmq
这将把 tbmq 设为当前上下文的默认命名空间,因此您无需在每个命令中传递 –namespace 参数。
安装TBMQ Helm chart
现在可以使用 Helm chart 安装 TBMQ。
请确保当前目录与自定义的 values.yaml 文件所在目录一致。
1
2
3
helm install my-tbmq-cluster tbmq-helm-chart/tbmq-cluster \
-f values.yaml \
--set installation.installDbSchema=true
部署完成后,输出应类似以下内容:
1
2
3
4
5
6
7
8
9
10
NAME: my-tbmq-cluster
LAST DEPLOYED: Wed Mar 26 17:42:49 2025
NAMESPACE: tbmq
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
TBMQ 集群 my-tbmq-cluster 将在数分钟内部署完成。
信息:
命名空间:tbmq
验证HTTP访问
1
kubectl get ingress my-tbmq-cluster-http-lb
输出应类似:
1
2
NAME CLASS HOSTS ADDRESS PORTS AGE
my-tbmq-cluster-http-lb nginx * 10.111.137.85 80 47m
使用 my-tbmq-cluster-http-lb 的 ADDRESS 字段连接集群。
您将看到TBMQ登录页面。请使用以下 System Administrator(系统管理员)默认凭据:
用户名:
1
sysadmin@thingsboard.org
密码:
1
sysadmin
首次登录时,系统将要求您将默认密码修改为自定义密码,然后使用新凭据重新登录。
验证MQTT访问
若 minikube tunnel 已运行,您会看到列表中多出一个新服务,用于对外暴露 MQTT 流量:
1
2
3
4
5
6
Status:
machine: minikube
pid: 35528
route: 10.96.0.0/12 -> 192.168.49.2
minikube: Running
services: [nginx-ingress-ingress-nginx-controller, my-tbmq-cluster-mqtt-lb]
服务 my-tbmq-cluster-mqtt-lb 为用于 MQTT 通信的 LoadBalancer。可使用以下命令获取其 EXTERNAL-IP:
1
kubectl get svc my-tbmq-cluster-mqtt-lb
输出应类似:
1
2
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
my-tbmq-cluster-mqtt-lb LoadBalancer 10.101.27.40 ******* 1883:31041/TCP,8084:30151/TCP,8883:30188/TCP,8085:32706/TCP 41m
使用负载均衡器的 EXTERNAL-IP 字段通过 MQTT 协议连接集群。
故障排除
如遇问题,可查看服务日志中的错误。例如,要查看 TBMQ 日志,请执行以下命令:
1
kubectl logs -f my-tbmq-cluster-tbmq-node-0
使用以下命令查看所有 statefulsets 的状态:
1
kubectl get statefulsets
更多详情请参阅 kubectl Cheat Sheet 命令参考。
升级
Helm 支持自 TBMQ 2.1.0 版本起引入。自 TBMQ 2.2.0 起, Helm chart 已更新至 1.1.0 版本,并引入了升级选项。 有关如何升级 TBMQ Helm 部署的详细说明,请参阅 Artifact Hub 上 TBMQ Helm Chart 文档的 Upgrading 部分。
卸载TBMQ Helm chart
要卸载 TBMQ Helm chart,请运行以下命令:
1
helm delete my-tbmq-cluster
此命令将从当前 Kubernetes 上下文中设置的命名空间内移除与该 release 关联的所有 TBMQ 组件。
helm delete 命令仅移除 TBMQ 集群的逻辑资源。
要完全清理所有持久化数据,卸载后可能还需手动删除关联的 Persistent Volume Claims (PVCs):
1
kubectl delete pvc -l app.kubernetes.io/instance=my-tbmq-cluster
删除Kubernetes集群
执行以下命令删除 Minikube 集群:
1
minikube delete
下一步
-
快速入门指南 - 本指南提供 TBMQ 的快速概览。
-
安全指南 - 学习如何为 MQTT 客户端启用认证与授权。
-
配置指南 - 了解 TBMQ 配置文件和参数。
-
MQTT 客户端类型指南 - 了解 TBMQ 客户端类型。
-
与 ThingsBoard 集成 - 了解如何将 TBMQ 与 ThingsBoard 集成。