【进阶版06】生产级Rancher+K8S部署ThingsBoard PE专业版集群之六:拉取 ThingsBoard PE 3.6.4 PE 映像,克隆脚本,修改配置文件

目录

1、从 docker hub 拉取 ThingsBoard PE 镜像(所有节点)

2、批量保存和载入镜像脚本

2.1、批量保存镜像到本地

2.2、批量载入镜像

3、克隆 ThingsBoard PE Kubernetes 脚本(主节点)

4、修改配置文件(主节点)

4.1、配置 .env

4.2、配置 cassandra.yml

以下3个配置可不作修改!

4.3、配置database-setup.yml

4.4、配置thingsboard.yml,从本地获取镜像

4.5、配置tb-node.yml,从本地获取镜像

5、获取并配置许可证密钥

5.1、获取许可证密钥

5.2、配置许可证密钥


  • 如需查阅上一步骤,请点击下面链接:

【进阶版05】生产级Rancher+K8S部署ThingsBoard PE专业版集群之五:Rancher 2.8.3 服务器终端kubectl-1.28.2 命令行工具设置-CSDN博客文章浏览阅读544次,点赞4次,收藏8次。在生产环境中部署ThingsBoard PE专业版集群时,利用Rancher 2.8.3和Kubernetes(K8S)可以大大简化部署和管理过程。在这篇文章中,我们将深入探讨如何在Rancher 2.8.3的服务器终端中使用kubectl-1.28.2命令行工具进行环境配置,以支持ThingsBoard PE专业版集群的部署。https://blog.csdn.net/weixin_67440240/article/details/137978101

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 的环境配置,两种方案:
  1. postgres:使⽤ PostgreSQL 数据库,一般用于学习、研究和开发。
  2. hybrid:使⽤ PostgreSQL 作为实体数据库,使⽤ Cassandra 作为时间序列数据库,主要用于企业级的生产环境。
  • 本文是企业级K8S本地部署ThingsBoard专业版集群,因此选⽤hybrid⽅式,修改2个地方:
  1. DATABASE=hybrid
  2. 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"
  • 完成本章内容后,期待下一步骤,请点击下面链接:

【进阶版07】生产级Rancher+K8S部署ThingsBoard PE专业版集群之七:创建K8S集群PV存储库,部署ThingsBoard 资源-CSDN博客文章浏览阅读84次,点赞2次,收藏3次。在本文中,我们将继续探讨在Rancher和Kubernetes(K8s)环境中部署ThingsBoard PE专业版集群的过程。在这一部分,我们将重点关注如何创建Kubernetes(K8s)集群的持久卷(Persistent Volume,简称PV)存储库,这是确保ThingsBoard PE集群稳定运行的关键环节。https://blog.csdn.net/weixin_67440240/article/details/138027054

  • 29
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值