Skip to content

阿里云实战 K8s 部署 ThingsBoard 集群 ​

正文与配图来自原稿。用两台(可更多)阿里云 ECS 搭 kubeadm 集群,再跑官方 CE K8s 脚本。按量付费适合练手,用完释放;生产请改用云盘 CSI、托管 ACK、较新 K8s/TB 版本。

1、概述 ​

本地虚拟机资源不够时,可租阿里云 ECS(按小时),连贯时间做完再释放。本稿记录一次跑通的流程。

2、环境准备(ECS) ​

统一 CentOS 7.8 示例。

  1. 登录阿里云 → 云服务器 ECS → 创建实例

ECS

创建

  1. 按量付费;选地域、默认网络

按量

地域

网络

  1. 规格:讲课演示约 4 核 + 较大内存;生产 CPU/内存要按规模加

规格

  1. 镜像 CentOS、系统盘约 40G(生产不够再加大)

镜像

磁盘

  1. 带宽按量、安全组、密码;购买 ≥2 台(1 master + 1 node)

带宽

安全组

密码

台数

下单需账户有余额(原稿提示余额需足够);生成实例后用 Xshell 等连接。

实例就绪

3、集群规划 ​

角色数量说明
master1控制面
node≥1工作节点,可继续加

SSH

下文命令标注:主节点 / 工作节点 / 全部节点。

4、Kubeadm 多节点集群 ​

原稿版本:kubeadm / kubelet / kubectl 1.19.0 + Docker 20.10.x。新环境请自行评估版本兼容性。

4.1、安装 Docker(全部节点) ​

bash
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum list docker-ce --showduplicates | sort -r
yum -y install docker-ce-20.10.10-3.el7
docker -v
systemctl enable docker.service
systemctl start docker
systemctl status docker

4.2、Kubernetes yum 源(全部节点) ​

bash
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

4.3、安装组件(全部节点) ​

bash
yum install -y kubelet-1.19.0 kubeadm-1.19.0 kubectl-1.19.0

4.4、主节点 init ​

将 --apiserver-advertise-address 换成 master 内网 IP:

bash
kubeadm init \
  --apiserver-advertise-address=<MASTER_内网IP> \
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.19.0 \
  --service-cidr=10.96.0.0/12 \
  --pod-network-cidr=10.244.0.0/16

init 输出

记下输出中的 kubeadm join ...。

4.5、主节点 kubeconfig ​

bash
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

4.6、工作节点 join ​

在每台 node 执行 init 给出的 join(token / hash 以你环境为准)。

4.7~4.8、网络插件 ​

bash
kubectl get nodes   # 未装 CNI 前多为 NotReady
# 推荐
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 或本地保存 kube-flannel.yml 再 apply(原稿含完整 YAML)

flannel

4.9~4.10、确认就绪 ​

bash
kubectl get node
kubectl get pods -n kube-system

全部 Running 后再装 ThingsBoard:

kube-system

5、部署 ThingsBoard ​

5.1、准备三类 PV(hostPath 实验用法) ​

在 master 上准备并 apply:

  • thingsboard-db-pv.yml — postgres、cassandra-0/1/2
  • thingsboard-third-pv.yml — zookeeper / kafka 等
  • thingsboard-tb-pv.yml — tb-node、各 transport 日志

要点:claimRef 与脚本里 PVC 名一致;Cassandra 多副本用 -cassandra-0 等后缀。YAML 篇幅长,结构与 Minikube 不推荐篇 同类,按原稿三份文件准备即可。

PV 文件

bash
kubectl apply -f thingsboard-db-pv.yml
kubectl apply -f thingsboard-third-pv.yml
kubectl apply -f thingsboard-tb-pv.yml
kubectl get pv

get pv

5.2、拉取脚本 ​

GitHub 慢可同步到 Gitee 再克隆:

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

clone

目录

5.3、改 .env ​

postgres 或 hybrid;hybrid 时 CASSANDRA_REPLICATION_FACTOR ≤ Cassandra 副本数。

.env

cassandra 副本

5.4、按序执行脚本 ​

bash
./k8s-install-tb.sh --loadDemo      # 完成后再往下
./k8s-deploy-thirdparty.sh
./k8s-deploy-resources.sh

若 routes.yml 报 Ingress networking.k8s.io/v1 不识别:原稿在 1.19 上可消失;更旧 API 需改 Ingress 版本或跳过改 NodePort。

bash
kubectl get pods
kubectl get deployment,pod,svc

pods

svc

6、暴露外网访问 ​

集群内 ClusterIP 外网不可达,改为 NodePort:

bash
kubectl edit svc tb-web-ui   # type: NodePort
kubectl edit svc tb-node
kubectl get deployment,pod,svc

web-ui

tb-node

端口

在阿里云安全组放行对应 NodePort(以及需要的 MQTT 端口):

安全组端口

7、验证 ​

text
http://<ECS公网IP>:<tb-web-ui-NodePort>/login

登录页

登录后

控制台

8、小结与注意 ​

项建议
费用按量 ECS 练完即释放
存储hostPath 仅实验;生产用云盘 StorageClass
版本原稿 1.19 + TB 3.4.4;新项目跟官方 ACK / 新脚本
入口NodePort 简单;长期用 Ingress / SLB

同仓库脚本在 Minikube 上的旧踩坑见 Minikube 不推荐篇;较新单机 K8s 体验见 Ubuntu 24.04 Minikube。