技术交流

学习资料

立即试用 商务报价
社区版
社区版 专业版 云服务 Edge Edge PE 网关 授权服务 Trendz分析 Mobile 应用程序 Mobile PE应用程序
入门 文档 指南 安装 架构 API 常见问题

本页目录

GCP单体安装

本指南将帮助你在GKE中以单体方式安装ThingsBoard。

先决条件

工具安装

在GKE集群上部署ThingsBoard需要安装kubectl, gcloud请参阅开始指南文档。

创建新项目或选择现有项目。

执行以下命令:

1
gcloud init

启用GCP服务

执行以下命令为项目启用GKE和SQL服务:

1
gcloud services enable container.googleapis.com sql-component.googleapis.com sqladmin.googleapis.com

步骤 1. 克隆脚本

克隆GCP脚本并设置为工作目录。

1
2
git clone -b release-3.5.1 https://github.com/thingsboard/thingsboard-сe-k8s.git
cd thingsboard-сe-k8s/gcp/monolith

步骤 2. 定义环境变量

定义将在本指南后面的各种命令中使用的环境变量。

执行以下命令:

1
2
3
4
5
6
7
export GCP_PROJECT=$(gcloud config get-value project)
export GCP_REGION=us-central1
export GCP_ZONE=us-central1-a
export GCP_NETWORK=default
export TB_CLUSTER_NAME=tb-ce
export TB_DATABASE_NAME=tb-db
echo "You have selected project: $GCP_PROJECT, region: $GCP_REGION, network: $GCP_NETWORK zone: $GCP_ZONE, cluster: $TB_CLUSTER_NAME and database: $TB_DATABASE_NAME"

说明:

  • 获取项目ID名称为GCP_PROJECT;
  • us-central1表示计算区域变量名为GCP_REGION;
  • us-central1-a表示计算区域变量名为GCP_ZONE;
  • default表示默认网络变量名为GCP_NETWORK;
  • tb-ce表示集群名称变量名为$TB_CLUSTER_NAME;
  • tb-db表示数据库服务名称变量名为TB_DATABASE_NAME;

步骤 3. GKE集群配置

创建具有1e2-standard-4计算机类型的节点的区域群集。

执行以下命令(推荐):

1
2
3
4
5
6
7
8
9
gcloud container clusters create $TB_CLUSTER_NAME \
--release-channel stable \
--zone $GCP_ZONE \
--node-locations $GCP_ZONE \
--network=$GCP_NETWORK \
--enable-ip-alias \
--num-nodes=1 \
--node-labels=role=main \
--machine-type=e2-standard-4

或者可以使用本指南进行自定义群集设置。

步骤 4. 更新kubectl

执行以下命令更新kubectl:

1
gcloud container clusters get-credentials $TB_CLUSTER_NAME --zone $GCP_ZONE

步骤 5. 配置数据库

步骤 5.1 PostgreSQL实例

5.1 先决条件

启用网络服务并允许K8S集群连接到数据库实例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
gcloud services enable servicenetworking.googleapis.com --project=$GCP_PROJECT

gcloud compute addresses create google-managed-services-$GCP_NETWORK \
--global \
--purpose=VPC_PEERING \
--prefix-length=16 \
--network=projects/$GCP_PROJECT/global/networks/$GCP_NETWORK

gcloud services vpc-peerings connect \
--service=servicenetworking.googleapis.com \
--ranges=google-managed-services-$GCP_NETWORK \
--network=$GCP_NETWORK \
--project=$GCP_PROJECT
    

5.2 创建数据库实例

使用数据库版”PostgreSQL 12“和以下说明创建PostgreSQL实例:

  • K8S集群GCP_REGION同一区域;
  • K8S集群GCP_REGION同一网络;
  • 专网IP地址连接到实例并禁用公有IP地址;
  • 高可用数据库实例用于生产,单一实例用于开发;
  • 最低配置2颗CPU和7.5GB内存满足多数要求,如果需要你可以在后面进行修改;

执行以下命令:

1
2
3
4
5
6
gcloud beta sql instances create $TB_DATABASE_NAME \
--database-version=POSTGRES_12 \
--region=$GCP_REGION --availability-type=regional \
--no-assign-ip --network=projects/$GCP_PROJECT/global/networks/$GCP_NETWORK \
--cpu=2 --memory=7680MB

或者按照本指南配置数据库。

命令成功并输出如IP地址 (YOUR_DB_IP_ADDRESS)并记住备用:

1
2
3
Created [https://sqladmin.googleapis.com/sql/v1beta4/projects/YOUR_PROJECT_ID/instances/thingsboard-db].
NAME            DATABASE_VERSION  LOCATION       TIER              PRIMARY_ADDRESS  PRIVATE_ADDRESS  STATUS
tb-db           POSTGRES_12       us-central1-f  db-custom-2-7680  35.192.189.68    -                RUNNABLE

5.3 设置密码

为新的数据库服务器实例设置密码:

1
2
3
gcloud sql users set-password postgres \
--instance=$TB_DATABASE_NAME \
--password=secret

说明:

  • thingsboard是数据库的名称你可以输入其他名称变量名为YOUR_DB_NAME
  • secret是数据库密码变量名为YOUR_DB_PASSWORD

5.4 创建数据库

在postgres数据库服务器实例中创建“thingsboard”数据库:

1
gcloud sql databases create thingsboard --instance=$TB_DATABASE_NAME

步骤 5.2 Cassandra(可选)

如果计划每秒插入超过5K的数据点或想要优化存储空间建议使用Cassandra这只是一个可选步骤。

配置节点

将Cassandra实例托管配置到其他节点组,建议至少使用4个vCPU和16GB内存。

我们将创建3个单独的节点每个区域1个节点,由于我们计划使用区域磁盘因此我们不希望k8s在相应磁盘不可用的节点上启动Pod。
这些区域将具有相同的节点标签并使用此标签来定位有状态集的部署。

1
2
3
4
5
6
gcloud container node-pools create cassandra1 --cluster=$TB_CLUSTER_NAME --zone=$GCP_ZONE --node-locations=$GCP_ZONE1 \
--node-labels=role=cassandra --num-nodes=1 --min-nodes=1 --max-nodes=1 --machine-type=e2-standard-4
gcloud container node-pools create cassandra2 --cluster=$TB_CLUSTER_NAME --zone=$GCP_ZONE --node-locations=$GCP_ZONE2 \
--node-labels=role=cassandra --num-nodes=1 --min-nodes=1 --max-nodes=1 --machine-type=e2-standard-4
gcloud container node-pools create cassandra3 --cluster=$TB_CLUSTER_NAME --zone=$GCP_ZONE --node-locations=$GCP_ZONE3 \
--node-labels=role=cassandra --num-nodes=1 --min-nodes=1 --max-nodes=1 --machine-type=e2-standard-4
有状态部署Cassandra

创建命名空间:

1
2
kubectl apply -f tb-namespace.yml
kubectl config set-context $(kubectl config current-context) --namespace=thingsboard

部署到新的节点组:

1
kubectl apply -f receipts/cassandra.yml

Cassandra集群的启动需要几分钟可以使用以下方法监控该过程:

1
kubectl get pods
更新数据库设置

编辑ThingsBoard数据库设置文件并添加Cassandra设置

1
2
3
echo "  DATABASE_TS_TYPE: cassandra" >> tb-node-db-configmap.yml
echo "  CASSANDRA_URL: cassandra:9042" >> tb-node-db-configmap.yml
echo "  CASSANDRA_LOCAL_DATACENTER: $GCP_REGION"  >> tb-node-db-configmap.yml

检查设置是否已更新:

1
cat tb-node-db-configmap.yml | grep DATABASE_TS_TYPE

执行输出结果:

1
  DATABASE_TS_TYPE: cassandra
创建键空间

使用以下命令创建thingsboard键空间:

1
2
3
4
5
6
    kubectl exec -it cassandra-0 -- bash -c "cqlsh -e \
                    \"CREATE KEYSPACE IF NOT EXISTS thingsboard \
                    WITH replication = { \
                        'class' : 'NetworkTopologyStrategy', \
                        'us-central1' : '3' \
                    };\""

步骤 6. 安装

编辑”tb-node-db-configmap.yml”并将YOUR_DB_IP_ADDRESSYOUR_DB_PASSWORD替换为步骤 5中获取的值。

1
nano tb-node-db-configmap.yml

执行以下命令运行安装:

1
./k8s-install-tb.sh --loadDemo

说明:

  • --loadDemo -可选参数用于是否加载演示数据。

此命令完成后应该会在控制台中看到下行内容:

1
Installation finished successfully!

步骤 7. 启动

执行以下命令部署资源:

1
./k8s-deploy-resources.sh

几分钟后使用kubectl get pods查看tb-node-0状态是否是READY

步骤 8. 配置负载均衡

8.1 配置HTTP(S)

有2种基础配置选项设置HTTP(S)负载均衡访问ThingsBoard实例Web界面:

  • http - 推荐用于开发优点是配置简单,成本最低,不适合生产。
  • https - 推荐用于生产优点是配置简单,流量重定向至HTTPS端口,提高安全性,适合生产。

请参阅下面的链接/说明了解如何配置每个建议的选项。

HTTP

执行以下命令以部署http负载均衡:

1
kubectl apply -f receipts/http-load-balancer.yml

负载均衡配置过程可能需要一些时间可以使用以下命令定期检查负载均衡器的状态:

1
kubectl get ingress

配置成功后输出:

1
2
NAME                   CLASS    HOSTS   ADDRESS         PORTS   AGE
tb-http-loadbalancer   <none>   *       34.111.24.134   80      7m25s

现在可以使用地址(在命令输出中看到的地址而不是34.111.24.134)访问HTTP Web UI(端口80)并通过HTTP API连接到设备使用以下默认凭据:

  • System Administrator: sysadmin@thingsboard.org / sysadmin
  • Tenant Administrator: tenant@thingsboard.org / tenant
  • Customer User: customer@thingsboard.org / customer

HTTPS

官方文档页面介绍了使用Google管理的SSL证书配置负载均衡的过程。
以下说明摘自官方文档在继续操作之前请确保仔细阅读先决条件

1
gcloud compute addresses create thingsboard-http-lb-address --global

https-load-balancer.yml文件中的PUT_YOUR_DOMAIN_HERE替换为有效的域名:

1
nano receipts/https-load-balancer.yml

执行以下命令以部署https负载均衡:

1
 kubectl apply -f receipts/https-load-balancer.yml

负载均衡配置过程可能需要一些时间你可以使用以下命令定期检查负载均衡的状态:

1
kubectl get ingress

配置成功后输出:

1
2
NAME                   CLASS    HOSTS   ADDRESS         PORTS   AGE
tb-https-loadbalancer   <none>   *       34.111.24.134   80      7m25s

现在将使用的域名分配给负载均衡IP地址(在命令输出中看到的地址而不是34.111.24.134)。

使用dig检查域名配置是否正确:

1
dig YOUR_DOMAIN_NAME

示例输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
; <<>> DiG 9.11.3-1ubuntu1.16-Ubuntu <<>> YOUR_DOMAIN_NAME
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12513
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;YOUR_DOMAIN_NAME.	IN	A

;; ANSWER SECTION:
YOUR_DOMAIN_NAME. 36 IN	A	34.111.24.134

;; Query time: 0 msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
;; WHEN: Fri Nov 19 13:00:00 EET 2021
;; MSG SIZE  rcvd: 74

分配后请等待Google管理的证书完成配置这最多可能需要60分钟可以使用以下命令检查证书的状态:

1
kubectl describe managedcertificate managed-cert

如果已正确配置后可以使用域名访问Web UI(通过https)和HTTP API连接设备。

注意: 负载均衡会将所有HTTP流量重定向到HTTPS不支持HTTPS的设备将无法连接到ThingsBoard,如果要支持此类设备可以为HTTP传输部署单独的负载均衡(推荐)也可以通过更改 https-load-balancer.yml文件中的重定向到Https设置来禁用重定向行为。

传输组件

这种类型的负载均衡要求自行预置和维护有效的HTTP over SSL证书遵循通用的SSL指南在tb-node.yml文件中配置所需的环境变量。

设置TCP负载均衡以将流量从443端口转发到相应的服务端口8080。
不支持http的80端口并自动重定向到https端口443。

1
 kubectl apply -f receipts/transparent-http-load-balancer.yml

8.2. 配置MQTT(可选)

如果使用MQTT协议连接设备请配置MQTT负载均衡。

执行以下命令以部署TCP负载均衡:

1
kubectl apply -f receipts/mqtt-load-balancer.yml

负载均衡将转发端口1883和8883的所有TCP流量。

MQTT SSL

这种类型的负载均衡要求自行配置和维护有效的SSL证书遵循基于SSL的通用MQTT指南在tb-node.yml文件中配置所需的环境变量。

8.3. 配置UDP(可选)

如果使用CoAP或LwM2M协议连接设备请配置UDP负载均衡器。

执行以下命令以部署UDP负载均衡:

1
kubectl apply -f receipts/udp-load-balancer.yml

负载均衡将转发以下端口的所有UDP流量:

  • 5683 - CoAP服务非安全端口
  • 5684 - CoAP服务安全DTLS端口。
  • 5685 - LwM2M服务非安全端口。
  • 5686 - LwM2M服务安全DTLS端口。
  • 5687 - LwM2M引导服务DTLS端口。
  • 5688 - LwM2M引导服务安全DTLS端口。

CoAP DTLS

这种类型的负载均衡要求自行预置和维护有效的SSL证书遵循基于DTLS的通用CoAP指南在tb-node.yml文件中配置所需的环境变量。

LwM2M DTLS

这种类型的负载均衡要求自行预置和维护有效的SSL证书遵循基于DTLS的通用CoAP指南在tb-node.yml文件中配置所需的环境变量。

步骤 9. 使用

现在可以使用负载均衡的IP地址在浏览器中打开ThingsBoard Web界面。

使用以下命令查看HTTP负载均衡的DNS名称(ADDRESS列):

1
kubectl get ingress

你应该看到类似的图片:

image

通过MQTT或COAP连接到集群需要获取相应的服务使用以下命令来完成:

1
kubectl get service

你应该看到类似的图片:

image

有两个负载均衡器

  • tb-mqtt-loadbalancer-external - MQTT协议
  • tb-coap-loadbalancer-external - COAP协议

使用EXTERNAL-IP字段连接到集群的负载均衡。

使用以下默认凭据:

  • System Administrator: sysadmin@thingsboard.org / sysadmin

如果使用演示数据(使用--loadDemo标志)安装了数据库则还可以使用以下凭据:

  • Tenant Administrator: tenant@thingsboard.org / tenant
  • Customer User: customer@thingsboard.org / customer

如果出现任何问题可以检查服务日志中的错误,例如要查看ThingsBoard节点日志请执行以下命令:

1
kubectl logs -f tb-node-0

kubectl get pods查看Pod的状态。
kubectl get services查看所有服务的状态。
kubectl get deployments查看所有部署的状态。
有关详细信息请参阅kubectl清单命令参考。

执行以下命令删除所有Pod:

1
./k8s-delete-resources.sh

执行以下命令删除所有pod和配置映射:

1
./k8s-delete-all.sh

升级

如果需要升级数据库请执行以下命令:

1
2
3
 ./k8s-delete-resources.sh
 ./k8s-upgrade-tb.sh --fromVersion=[FROM_VERSION]
 ./k8s-deploy-resources.sh

说明:

  • FROM_VERSION - 从哪个版本开始升级有关有效值请参阅升级说明

下一步

  • 入门指南 - 快速学习ThingsBoard相关功能。

  • 连接设备 - 学习如何根据你的连接方式或解决方案连接设备。

  • 可 视 化 - 学习如何配置复杂的ThingsBoard仪表板说明。

  • 数据处理 - 学习如何使用ThingsBoard规则引擎。

  • 数据分析 - 学习如何使用规则引擎执行基本的分析任务。

  • 硬件样品 - 学习如何将各种硬件平台连接到ThingsBoard。

  • 高级功能 - 学习高级ThingsBoard功能。

  • 开发指南 - 学习ThingsBoard中的贡献和开发。