基于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 -a
,
sudo 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
部署测试:
kubectl apply -f k8s/node-job_node1.yaml
查看Log
kubectl logs <pod names> -n federated
基于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 -a
,sudo 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库:
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
4. 部署PVC
kubectl apply -f k3s_manifests/rabbitmq-pvc.yaml
5. 确认RabbitMQTT工作状态
6. 部署边缘数据生成器:
7. 部署中心数据分析器
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