Update README.md
@version: 1.0.0 @author:Tianjian Jiang
本项目基于K3S集群以及NFS技术,用于验证K3S中的MQTT通信技术以及NFS、Docker相关的部分。
在一个Node节点上面运行传感器的模拟,通过随机数进行模拟数值,并通过MQTT的异步消息机制发送到Master节点上面。由Master节点对于接收到的消息进行处理, Master节点每隔60秒统计一次节点上发送的消息的异常数据。并将Log放在PVC中。
新建目录: sudo mkdir -p /mnt/shared
sudo mkdir -p /mnt/shared
安装NFS-Server: sudo apt install nfs-kernel-server
sudo apt install nfs-kernel-server
编辑配置文件: sudo vim /etc/exports,加入一行 /mnt/shared *(rw,sync,no_subtree_check)
sudo vim /etc/exports
/mnt/shared *(rw,sync,no_subtree_check)
导出配置: sudo exportfs -a, sudo exportfs -r
sudo exportfs -a
sudo exportfs -r
重启服务器: sudo systemctl start nfs-kernel-server sudo systemctl enable nfs-kernel-server
sudo systemctl start nfs-kernel-server
sudo systemctl enable nfs-kernel-server
检查状态: sudo systemctl status nfs-kernel-server, 如有报错再行处理。
sudo systemctl status nfs-kernel-server
挂载目录: sudo mount -t nfs 10.3.0.15:/mnt/shared /mnt/shared
sudo mount -t nfs 10.3.0.15:/mnt/shared /mnt/shared
更新库: sudo apt-get update
sudo apt-get update
安装证书与curl包: sudo apt-get install ca-certificates curl
sudo apt-get install ca-certificates curl
加入权限: sudo install -m 0755 -d /etc/apt/keyrings
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 curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
加入权限: sudo chmod a+r /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
安装Docker: sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
curl -sfL https://get.k3s.io | sh -
国内镜像加速: curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -
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 -
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
myserver
mynodetoken
cat /var/lib/rancher/k3s/server/node-token
安装本地Docker仓库 docker pull registry:2
docker pull registry:2
运行本地Docker仓库 docker run -d -p 5000:5000 --restart=always --name registry registry:2
docker run -d -p 5000:5000 --restart=always --name registry registry:2
编译Docker文件: 边缘处理器:docker build -t edge-processor:latest .,
docker build -t edge-processor:latest .
中心分析器:docker build -t center-analyzer:latest .
docker build -t center-analyzer:latest .
打标签 sudo docker tag docker.io/library/center-analyzer:latest localhost:5000center-analyzer:latest
sudo docker tag docker.io/library/center-analyzer:latest localhost:5000center-analyzer:latest
推送到本地仓库 docker push localhost:5000/center-analyzer:latest
docker push localhost:5000/center-analyzer:latest
注意: 中心分析器的Docker在Master上面部署,边缘处理器的Docker在Node上面部署。这里后面的Tag需要自己手动设置,尽量后编译的不要与之前设置的重复,修改Tag之后需要在k8s文件夹中对应的yaml进行修改。
kompose convert -f docker-compose-rabbitmq.yml -o k3s_manifests/
kubectl apply -f k3s_manifests/namespace.yaml
shell kubectl apply -f k3s_manifests/rabbitmq-deployment.yaml kubectl apply -f k3s_manifests/rabbitmq-service.yaml
kubectl apply -f k3s_manifests/rabbitmq-pvc.yaml
kubectl get pods -n iot-demo -w # 确保 rabbitmq pod 状态是 Running # 确保 rabbitmq service 创建成功 kubectl get svc -n iot-demo
kubectl apply -f k3s_manifests/edge_generator_deployment.yaml kubectl apply -f k3s_manifests/edge_generator_service.yaml
kubectl apply -f k3s_manifests/center_analyzer_deployment.yaml kubectl apply -f k3s_manifests/center_analyzer_service.yaml
检查Pods的状态 kubectl get pods -n iot-demo -o wide
kubectl get pods -n iot-demo -o wide
查看边缘生成器的日志: kubectl logs -n iot-demo <edge-generator-pod-name>
kubectl logs -n iot-demo <edge-generator-pod-name>
查看中心分析器的日志: kubectl logs -n iot-demo center-analyzer-<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 port-forward service/rabbitmq 15672:15672 -n iot-demo
kubectl apply -f k8s/node-job_node1.yaml
kubectl logs <pod names> -n federated
©Copyright 2023 CCF 开源发展委员会 Powered by Trustie& IntelliDE 京ICP备13000930号
基于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-serversudo 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/shared2. 安装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.asccurl -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-plugin3. 安装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-token4. 安装编译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.yaml3. 部署 RabbitMQ
4. 部署PVC
kubectl apply -f k3s_manifests/rabbitmq-pvc.yaml5. 确认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-demoTools
部署测试:
kubectl apply -f k8s/node-job_node1.yaml查看Log
kubectl logs <pod names> -n federated