本指南将帮助你在AWS的集群模式下配置ThingsBoard。
ThingsBoard微服务在Kubernetes集群上运行。
需要安装kubeone,terraform(v0.11+)和kubectl(v1.16+)。
kubeOne - 用于创建和管理kubernetes集群。
terraform - 用于在AWS中创建和管理云基础架构。
你可以选择其他可用的Kubernetes集群部署解决方案。
git clone https://github.com/thingsboard/thingsboard-ce-k8s.git
cd ./aws
Kubeone需要ssh密钥才能访问ec2实例默认情况下terraform使用~/.ssh/id_rsa and ~/.ssh/id_rsa.pub。但是你可以将ssh密钥生成到任何文件夹并将此路径添加到terraform变量文件中。 生成ssh密钥请执行以下命令:
ssh-keygen
你还需要访问AWS它可以是IAM用户或IAM角色。你需要有一个AWS_ACCESS_KEY和AWS_SECRET_ACCESS_KEY。 添加环境变量请执行以下命令:
export AWS_PROFILE=default
export AWS_ACCESS_KEY=xxxxxxxxx
export AWS_SECRET_ACCESS_KEY=xxxxxxxxxxxxxx
初始化terraform工作目录请执行以下命令:
terraform init
创建terraform配置文件请执行以下命令:
nano terraform.tfvars
并添加以下示例配置:
cluster_name = "k8s-cluster-example"
aws_region = "eu-west-1"
control_plane_type = "t3.medium"
现在我们使用这个示例配置但是你可以在variables.tf
中看到所有变量。
要查看将创建什么基础架构请执行以下命令:
terraform plan
要创建此基础结构请执行以下命令:
terraform apply
执行此命令后我们将具有创建k8s集群的基础结构对于kubeone我们需要生成具有所有资源ID的terraform输出文件,请执行以下命令:
terraform output -json > tf.state
生成kubeone的配置文件请执行以下命令:
kubeone config print --full > config.yml
你可以自己更改设置我们将使用默认配置。
要将ssh密钥添加到ssh代理,请执行以下命令:
ssh-add /path/to/your/id_rsa
要开始部署k8s集群请执行以下命令:
kubeone install config.yml -t tf.state
执行完此命令后你将在此目录$(pwd)/ 中创建一个具有三个主节点的k8s集群并为你的kubectl提供kubeconfig。
要为kubectl设置KUBECONFIG变量请执行以下命令:
export KUBECONFIG=$(pwd)/k8s-cluster-example-kubeconfig
并检查集群中的节点:
kubectl get nodes
对于管理工作者节点kubeone使用机器部署请执行以下命令:
kubectl get machinedeployments -n kube-system
要扩展你的worker节点请执行以下命令:
kubectl --namespace kube-system scale machinedeployment/$MACHINE-DEPLOYMENT-NAME --replicas=3
从ThingsBoard v2.2开始可以使用新的微服务架构和Docker容器安装ThingsBoard集群。
有关更多详细信息请参见微服务架构页面。
回到根目录cd ../
中。
在.env
文件中将PLATFORM
字段值设置为aws
。
在执行初始安装之前可以配置与ThingsBoard一起使用的数据库的类型。
设置数据库类型在.env
文件中的DATABASE
变量的值更改为以下值:
postgres
- 使用PostgreSQL数据库;hybrid
- 使用PostgreSQL保存实体Cassandra时间序列数据;注意:根据数据库类型将部署相应的kubernetes资源(请参阅basic/postgres.yml
或high-availability/postgres-ha.yaml
进行复制的postgrescommon/cassandra.yml
有关详细信息)。
在执行初始安装之前你可以配置ThingsBoard部署的类型。
请将.env
文件中的DEPLOYMENT_TYPE
变量值更改为以下其中一个内容:
postgres
- 使用PostgreSQL数据库;hybrid
- 使用PostgreSQL保存实体Cassandra时间序列数据;注意:根据部署类型将部署相应的kubernetes资源(有关详细信息请参见basic
和high-availability
的内容)。
如果选择cassandra
作为DATABASE
则还可以配置Cassandra节点的数量(common/cassandra.yml
配置文件中的StatefulSet.spec.replicas
属性)和.env
文件中的CASSANDRA_REPLICATION_FACTOR
属性。建议有3个Cassandra节点的CASSANDRA_REPLICATION_FACTOR
等于1。
注意: 如果你想配置CASSANDRA_REPLICATION_FACTOR
请先阅读Cassandra文档。
另外要以high-availability
部署模式运行PostgreSQL需要安装helm
。
执行以下命令以运行安装:
./k8s-install-tb.sh --loadDemo
说明:
--loadDemo
- 可选参数是否安装演示数据。执行以下命令来部署第三方资源:
./k8s-deploy-thirdparty.sh
如果是第一次在high-availability
的DEPLOYMENT_TYPE
中运行ThingsBoard未配置Redis集群则在系统提示时输入‘yes’。
执行以下命令以部署ThingsBoard资源:
./k8s-deploy-resources.sh
一段时间后当所有资源都将成功启动时可以使用负载均衡器的dns名称在浏览器中打开ThingsBoard Web界面。
可以使用以下命令查看负载均衡器的DNS名称:
kubectl get ingress -oyaml
或者在AWS ELB页面上看到此名称。
你应该看到ThingsBoard登录页面。
使用以下默认凭据:
如果使用演示数据(使用--loadDemo
标志)安装了数据库则还可以使用以下凭据:
如有任何问题可以检查服务日志中是否有错误。 例如要查看ThingsBoard节点日志请执行以下命令:
1)获取正在运行的tb节点容器的列表:
kubectl get pods -l app=tb-node
2)获取tb节点容器的日志:
kubectl logs -f [tb-node-pod-name]
说明:
tb-node-pod-name
- 从正在运行的tb-node pod列表中获得的tb-node pod名称。使用kubectl get pods
查看所有Pod的状态。
使用kubectl get services
查看所有服务的状态。
使用kubectl get deployments
来查看所有部署的状态。
有关详细信息请参见kubectl Cheat Sheet命令参考。
执行以下命令删除所有ThingsBoard微服务:
./k8s-delete-resources.sh
执行以下命令删除所有第三方微服务:
./k8s-delete-thirdparty.sh
执行以下命令删除所有资源(包括数据库):
./k8s-delete-all.sh
删除k8s集群和AWS资源你可以执行以下命令:
kubeone reset config.yml -t tf.state
terraform destroy
如果需要数据库升级请执行以下命令:
./k8s-delete-resources.sh
./k8s-upgrade-tb.sh --fromVersion=[FROM_VERSION]
./k8s-deploy-resources.sh
说明:
FROM_VERSION
- 从哪个版本开始升级关于fromVersion
值请参见升级说明。入门指南 - 这些指南提供了ThingsBoard主要功能的快速概述。
设备连接 - 了解如何根据您的连接方式或解决方案连接设备。
数据看板 - 这些指南包含有关如何配置复杂的ThingsBoard仪表板的说明。
数据处理 - 了解如何使用ThingsBoard规则引擎。
数据分析 - 了解如何使用规则引擎执行基本的分析任务。
硬件样品 - 了解如何将各种硬件平台连接到ThingsBoard。
高级功能 - 了解高级ThingsBoard功能。
开发指南 - 了解ThingsBoard中的贡献和开发。