目录
1、从 docker hub 拉取 ThingsBoard PE 镜像(所有节点)
3、克隆 ThingsBoard PE Kubernetes 脚本(主节点)
- 如需查阅上一步骤,请点击下面链接:
1、从 docker hub 拉取 ThingsBoard PE 镜像(所有节点)
# 运行以下命令从 Docker 中心拉取映像
docker pull thingsboard/tb-pe-node:3.6.4PE
docker pull thingsboard/tb-pe-web-report:3.6.4PE
docker pull thingsboard/tb-pe-web-ui:3.6.4PE
docker pull thingsboard/tb-pe-js-executor:3.6.4PE
docker pull thingsboard/tb-pe-http-transport:3.6.4PE
docker pull thingsboard/tb-pe-mqtt-transport:3.6.4PE
docker pull thingsboard/tb-pe-coap-transport:3.6.4PE
docker pull thingsboard/tb-pe-lwm2m-transport:3.6.4PE
docker pull thingsboard/tb-pe-snmp-transport:3.6.4PE
2、批量保存和载入镜像脚本
- 考虑到docker hub 拉取镜像,经常受网络限制,速度极慢,因此建议:从 docker hub 拉取 ThingsBoard PE 镜像后,镜像批量保存到本地,今后使用时就无需重新拉取!
2.1、批量保存镜像到本地
- 编制批量保存镜像到本地脚本
# 创建本地镜像文件保存目录
mkdir -p /data/docker/image_save/
# 进入本地镜像文件保存目录
cd /data/docker/image_save/
# 编制批量保存镜像到本地脚本
vi save_images.sh
- 将下面内容复制到save_images.sh文件里:
#!/bin/bash
# 获取到 "image:tag" 格式的镜像名
IMG_NAME=`docker images | grep -v TAG | awk '{print $1":"$2}'`
# 如果原本镜像名中存在 "/" 是需要去掉的
echo $IMG_NAME | awk '{gsub(/ /,"\n",$0)} {print $0}'
# 定义镜像存放目录
DIR="/data/docker/image_save"
if [ ! -d "$DIR" ]; then
echo -e "\033[34m${DIR}\033[0m 不存在"
mkdir -p "$DIR"
echo -e "\033[34m${DIR}\033[0m 已创建"
else
echo -e "\033[34m${DIR}\033[0m 已存在"
fi
echo ""
for IMAGE in $IMG_NAME
do
echo -e "正在保存 \033[33m${IMAGE}\033[0m"
SAVE_NAME=`echo $IMAGE | awk -F: '{print $1"_"$2}' | sed 's/\//_/g'`
docker save $IMAGE -o ${DIR}/${SAVE_NAME}.tar
echo -e "已保存到 \033[34m${DIR}/\033[31m${SAVE_NAME}.tar\033[0m"
echo ""
done
- 新增的脚本并无执行权限,当前测试直接设置权限给777
#修改文件权限为简单粗暴的所有者、所属组和其他人都有读写执行权限
chmod 777 save_images.sh
-
执行批量保存镜像到本地脚本
# 查看已有镜像文件
docker images
# 进入本地镜像文件保存目录
cd /data/docker/image_save/
# 编制批量保存镜像到本地脚本
./save_images.sh
- 单个镜像保存命令
# 命令一:
docker save -o /data/docker/nginx_latest.tar nginx
# /data/docker/nginx_latest.tar 保存文件名,必须为tar类型,可加保存路径
# nginx 要保存的镜像(名称或ID均可,名称后可加TAG指定版本)
# 命令二:
docker save nginx > nginx_latest01.tar
# nginx:要保存的镜像(名称或ID均可)
# nginx_latest01.tar 要保存的镜像tar文件(名称或ID均可,名称后可加TAG指定版本)
2.2、批量载入镜像
- 编制批量载入镜像脚本
# 进入本地镜像文件保存目录
cd /data/docker/image_save/
# 编制批量保存镜像到本地脚本
vi load_images.sh
- 将下面内容复制到load_images.sh文件里:
#!/bin/bash
# 在此处填写镜像文件的保存目录
IMAGE_DIR="/data/docker/image_save"
for IMAGE in `ls $IMAGE_DIR`
do
echo -e "正在导入镜像 \033[33m$IMAGE\033[0m"
docker load -i ${IMAGE_DIR}/${IMAGE}
echo -e "已成功导入镜像 \033[33m$IMAGE\033[0m"
echo ""
done
- 新增的脚本并无执行权限,当前测试直接设置权限给777
-
#修改文件权限为简单粗暴的所有者、所属组和其他人都有读写执行权限 chmod 777 load_images.sh
- 执行批量载入镜像脚本
# 进入本地镜像文件保存目录
cd /data/docker/image_save/
# 编制批量保存镜像到本地脚本
./load_images.sh
-
载入单个镜像文件
# 命令一:
docker load --input nginx_latest.tar
# 命令二:
docker load < nginx_latest.tar
3、克隆 ThingsBoard PE Kubernetes 脚本(主节点)
yum install -y git
git clone -b release-3.6.4 https://github.com/thingsboard/thingsboard-pe-k8s.git --depth 1
cd /root/thingsboard-pe-k8s/minikube
-
因网络问题克隆容易失败,需要多执行几次克隆脚本命令,一般3次可以成功。
4、修改配置文件(主节点)
克隆 ThingsBoard PE Kubernetes 脚本,然后进入thingsboard-pe-k8s/minikube目录,修改5个文件配置。
4.1、配置 .env
vi /root/thingsboard-pe-k8s/minikube/.env
# Database used by ThingsBoard, can be either postgres (PostgreSQL) or hybrid (PostgreSQL for entities database and Cassandra for timeseries database).
# According to the database type corresponding kubernetes resources will be deployed (see postgres.yml, cassandra.yml for details).
# DATABASE=postgres 添加注释,并增加下一行!
DATABASE=hybrid
# Replication factor for Cassandra database (will be ignored if PostgreSQL was selected as the database).
# Must be less or equals to the number of Cassandra nodes which can be configured in ./common/cassandra.yml ('StatefulSet.spec.replicas' property)
CASSANDRA_REPLICATION_FACTOR=2 #把 1 改为 2
- 修改 .env 的环境配置,两种方案:
- postgres:使⽤ PostgreSQL 数据库,一般用于学习、研究和开发。
- hybrid:使⽤ PostgreSQL 作为实体数据库,使⽤ Cassandra 作为时间序列数据库,主要用于企业级的生产环境。
- 本文是企业级K8S本地部署ThingsBoard专业版集群,因此选⽤hybrid⽅式,修改2个地方:
- DATABASE=hybrid
- CASSANDRA_REPLICATION_FACTOR=2 【此处没有修改!】
4.2、配置 cassandra.yml
vi /root/thingsboard-pe-k8s/minikube/cassandra.yml
- 因为CASSANDRA_REPLICATION_FACTOR必须⼩于或者等于cassandra的 副本数,所以需要修改 cassandra.yml 中cassandra的副本数为3。
spec:
serviceName: cassandra
replicas: 3 # 修改 replicas: 3
volumeClaimTemplates:
- metadata:
name: cassandra-data
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 8Gi # 修改 storage: 8Gi
4.3、配置database-setup.yml
vi /root/thingsboard-pe-k8s/minikube/database-setup.yml
- #将Always改为IfNotPresent
- imagepullpolicy: ifnotpresent 表示当镜像不存在于本地节点时,才从远程仓库拉取该镜像,并在拉取成功后保存在本地节点上。如果本地已经存在同名镜像,则不会从远程仓库拉取镜像。该策略的作用是在保证镜像存在情况下,尽可能地减少网络请求和下载时间,提高应用启动速度。
- tb-db-setup.imagePullPolicy=IfNotPresent
apiVersion: v1
kind: Pod
metadata:
name: tb-db-setup
namespace: thingsboard
spec:
volumes:
- name: tb-node-config
configMap:
name: tb-node-config
items:
- key: conf
path: thingsboard.conf
- key: logback
path: logback.xml
- name: tb-node-logs
emptyDir: {}
containers:
- name: tb-db-setup
imagePullPolicy: IfNotPresent # Always改为IfNotPresent
image: thingsboard/tb-pe-node:3.6.3PE
env:
- name: TB_SERVICE_ID
valueFrom:
fieldRef:
fieldPath: metadata.name
envFrom:
- configMapRef:
name: tb-node-db-config
volumeMounts:
- mountPath: /config
name: tb-node-config
- mountPath: /var/log/thingsboard
name: tb-node-logs
command: ['sh', '-c', 'while [ ! -f /tmp/install-finished ]; do sleep 2; done;']
restartPolicy: Never
4.4、配置thingsboard.yml,从本地获取镜像
vi /root/thingsboard-pe-k8s/minikube/thingsboard.yml
# imagePullPolicy: Always 修改为: IfNotPresent
# 具体修改处如下:
tb-ie-logs.imagePullPolicy: Always # Always 修改为: IfNotPresent
tb-js-executor.imagePullPolicy: Never # Always 修改为: IfNotPresent
tb-web-report.imagePullPolicy: Never # Always 修改为: IfNotPresent
tb-mqtt-transport.imagePullPolicy: Never # Always 修改为: IfNotPresent
tb-http-transport.imagePullPolicy: Never # Always 修改为: IfNotPresent
tb-coap-transport.imagePullPolicy: Never # Always 修改为: IfNotPresent
tb-web-ui.imagePullPolicy: Never # Always 修改为: IfNotPresent
4.5、配置tb-node.yml,从本地获取镜像
vi /root/thingsboard-pe-k8s/minikube/tb-node.yml
# imagePullPolicy: Always 修改为 imagePullPolicy: IfNotPresent
# 按SHIFT键,输入:,然后输入下列命令进行查找替换
:%s/imagePullPolicy: Always/imagePullPolicy: IfNotPresent/g
5、获取并配置许可证密钥
5.1、获取许可证密钥
- 参照官网步骤:
Pricing | ThingsBoardhttps://thingsboard.io/pricing/
5.2、配置许可证密钥
vi /root/thingsboard-pe-k8s/minikube/tb-node.yml
<Shift>键+:/TB_LICENSE_SECRET #在tb-node.yml文件中查找TB_LICENSE_SECRET所在行
- 放置 TB_LICENSE_SECRET 参数:
# tb-node StatefulSet configuration
- name: TB_LICENSE_SECRET
value: "PUT_YOUR_LICENSE_SECRET_HERE"
- 完成本章内容后,期待下一步骤,请点击下面链接: