目录
目录README.md

基于K3S集群验证MQTT以及NFS技术的Demo

@version: 1.0.0 @author:Tianjian Jiang

简介

本项目基于K3S集群以及NFS技术,用于验证K3S中的MQTT通信技术以及NFS、Docker相关的部分。

在一个Node节点上面运行传感器的模拟,通过随机数进行模拟数值,并通过MQTT的异步消息机制发送到Master节点上面。由Master节点对于接收到的消息进行处理, Master节点每隔60秒统计一次节点上发送的消息的异常数据。并将Log放在PVC中。

预备环境

1. 安装NFS

Master端

新建目录: sudo mkdir -p /mnt/shared

安装NFS-Server: sudo apt install nfs-kernel-server

编辑配置文件: sudo vim /etc/exports,加入一行 /mnt/shared *(rw,sync,no_subtree_check)

导出配置: sudo exportfs -asudo exportfs -r

重启服务器: sudo systemctl start nfs-kernel-server sudo systemctl enable nfs-kernel-server

检查状态: sudo systemctl status nfs-kernel-server, 如有报错再行处理。

Node端

新建目录: sudo mkdir -p /mnt/shared

安装NFS-Server: sudo apt install nfs-kernel-server

挂载目录: sudo mount -t nfs 10.3.0.15:/mnt/shared /mnt/shared

2. 安装Docker

更新库: sudo apt-get update

安装证书与curl包: sudo apt-get install ca-certificates curl

加入权限: sudo install -m 0755 -d /etc/apt/keyrings

获取docker的公开Key: sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc

加入权限: sudo chmod a+r /etc/apt/keyrings/docker.asc

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

加入Docker库:

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt-get update

安装Docker: sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

3. 安装K3S

Master节点

curl -sfL https://get.k3s.io | sh -

国内镜像加速: curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -

Node节点

curl -sfL https://get.k3s.io | K3S_URL=https://myserver:6443 K3S_TOKEN=mynodetoken sh -

国内镜像加速:curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn K3S_URL=https://myserver:6443 K3S_TOKEN=mynodetoken sh -

其中myserver需要替换为Server的IP,mynodetoken需要替换为密钥,即通过在Server端获取,命令为:cat /var/lib/rancher/k3s/server/node-token

4. 安装编译Docker

安装本地Docker仓库 docker pull registry:2

运行本地Docker仓库 docker run -d -p 5000:5000 --restart=always --name registry registry:2

编译Docker文件: 边缘处理器:docker build -t edge-processor:latest .

中心分析器:docker build -t center-analyzer:latest .

打标签 sudo docker tag docker.io/library/center-analyzer:latest localhost:5000center-analyzer:latest

推送到本地仓库 docker push localhost:5000/center-analyzer:latest

注意: 中心分析器的Docker在Master上面部署,边缘处理器的Docker在Node上面部署。这里后面的Tag需要自己手动设置,尽量后编译的不要与之前设置的重复,修改Tag之后需要在k8s文件夹中对应的yaml进行修改。

实验

1. 生成RabbitMQTT配置文件

kompose convert -f docker-compose-rabbitmq.yml -o k3s_manifests/

2. 设置命名空间

kubectl apply -f k3s_manifests/namespace.yaml

3. 部署 RabbitMQ

shell
kubectl apply -f k3s_manifests/rabbitmq-deployment.yaml
kubectl apply -f k3s_manifests/rabbitmq-service.yaml

4. 部署PVC

kubectl apply -f k3s_manifests/rabbitmq-pvc.yaml

5. 确认RabbitMQTT工作状态

kubectl get pods -n iot-demo -w
# 确保 rabbitmq pod 状态是 Running
# 确保 rabbitmq service 创建成功
kubectl get svc -n iot-demo

6. 部署边缘数据生成器:

kubectl apply -f k3s_manifests/edge_generator_deployment.yaml
kubectl apply -f k3s_manifests/edge_generator_service.yaml

7. 部署中心数据分析器

kubectl apply -f k3s_manifests/center_analyzer_deployment.yaml
kubectl apply -f k3s_manifests/center_analyzer_service.yaml

8. 观察输出

检查Pods的状态 kubectl get pods -n iot-demo -o wide

查看边缘生成器的日志: kubectl logs -n iot-demo <edge-generator-pod-name>

查看中心分析器的日志: kubectl logs -n iot-demo center-analyzer-<pod-name>

使用 kubectl port-forward 转发: kubectl port-forward service/rabbitmq 15672:15672 -n iot-demo

Tools

部署测试:

kubectl apply -f k8s/node-job_node1.yaml

查看Log

kubectl logs <pod names> -n federated

邀请码