基于k8s部署thingsboard3.4(单机、微服务)

1,099 阅读4分钟

概述大纲

以微服务方式,部署thingsboard,探索云原生技术。

配合使用KubeSphere,一个以 Kubernetes 为内核的云原生分布式操作系统,降低k8s使用门槛,可视化方式应对部署thingsboard过程中问题,观察部署thingsboard状态,同时方便后续维护。

成果展示

image-20230513113001-kp2j5gy.png

image-20230513113036-du5usw7.png

image-20230513113150-azhayit.png

前言

image-20230512165511-xw7migu.png

前置条件

ThingsBoard微服务在Kubernetes集群上运行你需要有一个Kubernetes集群并且必须配置kubectl​​命令行工具才能与你的集群通信。

1、本次教程不用安装Minikube,但需要提前安装好Kubernetes集群

2、建议全新的linux,在 Linux 上以 All-in-One 模式安装 KubeSphere,同时完成Kubernetes集群

在 Linux 上以 All-in-One 模式安装 KubeSphere:kubesphere.io/zh/docs/v3.…

thingsboard3.4.4安装参考:基于Minikube集群安装方式 Cluster setup using Minikube | ThingsBoard Community Edition

第 1 步,查看thingsboard体系结构

参考:物联网板微服务架构 |事物板社区版 (thingsboard.io)

image-20230512172116-qnlilfr.png

第 2 步,复制安装脚本到本地目录, ThingsBoard CE Kubernetes scripts repository

git clone -b release-3.4.4 https://github.com/thingsboard/thingsboard-ce-k8s.git

cd thingsboard-ce-k8s/minikube

第 3 步。配置 ThingsBoard 数据库

在执行初始安装之前,您可以配置要与 ThingsBoard 一起使用的数据库类型。 为了设置数据库类型,将文件中变量的值更改为以下值之一:DATABASE.env​​

  • ​postgres​​- 使用PostgreSQL数据库;
  • ​hybrid​​- 将PostgreSQL用于实体数据库,将Cassandra用于时间序列数据库;

注意:根据数据库类型,将部署相应的 kubernetes 资源(有关详细信息,请参阅 和)。postgres.ymlcassandra.yml​​

如果选择为 ,您还可以配置 Cassandra 节点的数量(配置文件中的属性)和 in 文件。如果要配置,请先阅读 Cassandra 文档。cassandraDATABASEStatefulSet.spec.replicascassandra.ymlCASSANDRA_REPLICATION_FACTOR.envCASSANDRA_REPLICATION_FACTOR​​

建议有 3 个等于 2 的 Cassandra 节点。CASSANDRA_REPLICATION_FACTOR​​

如果测试,不用修改安装脚本,默认使用PostgreSQL数据库

第 4 步,运行安装脚本

执行以下命令运行安装:

./k8s-install-tb.sh --loadDemo
  • ​--loadDemo​​- 可选参数。是否加载其他演示数据。
  • 通过KubeSphere观察pod启动及完成状态,再执行下一步。

image-20230512175902-grj18q0.png

执行以下命令,部署第三方资源。

./k8s-deploy-thirdparty.sh
#通过KubeSphere观察pod启动及完成状态,再执行下一步。

执行以下命令以部署 ThingsBoard 资源:

./k8s-deploy-resources.sh

#通过KubeSphere观察pod启动及完成状态,再执行下一步。

Thingsboard空间内部,容器组全部正常启动

image-20230513112035-p9vs7iu.png

第 5 步,启用入口插件

在KubeSphere开启项目网关,允许被外网访问

KubeSphere 项目中的网关是一个 NGINX Ingress 控制器。KubeSphere 内置的用于 HTTP 负载均衡的机制称为应用路由,它定义了从外部到集群服务的连接规则。如需允许从外部访问服务,用户可创建路由资源来定义 URI 路径、后端服务名称等信息。

KubeSphere 除了提供项目范围的网关外,还提供集群范围的网关,使得所有项目都能共享全局网关。

准备工作

您需要创建一个企业空间、一个项目和一个用户 (project-admin​​​)。该用户必须被邀请至项目,并且在项目中的角色为 admin​​​。有关更多信息,请参见创建企业空间、项目、用户和角色

设置网关
  1. 以 project-admin​​ 用户登录 KubeSphere Web 控制台,进入您的项目,从左侧导航栏进入项目设置下的高级设置页面,然后点击设置网关。
    set-project-gateway
  2. 在弹出的对话框中选择网关的访问方式。
    access-method
    NodePort:通过网关访问服务对应的节点端口。
    LoadBalancer:通过网关访问服务的单独 IP 地址。
  3. 在设置网关对话框,您可以启用应用治理以使用 Tracing 功能和不同的灰度发布策略。如果启用应用治理后无法访问路由,请在路由 (Ingress) 中添加注解(例如 nginx.ingress.kubernetes.io/service-upstream: true​​)。
  4. 选择访问方式后点击保存。

image-20230513112309-pp4fh1e.png

一段时间后,当所有资源都成功启动时,您可以在浏览器中打开。上图中(网关地址+节点端口)

参考资料

  1. KubeSphere 3.3.0 发布:全面拥抱 GitOps:kubesphere.io/zh/news/kub…
  2. 在 Linux 上以 All-in-One 模式安装 KubeSphere:kubesphere.io/zh/docs/v3.…
  3. thingsboard3.4.4安装参考:基于Minikube集群安装方式: Cluster setup using Minikube | ThingsBoard Community Edition