【毕设之路】树莓派+边缘计算
树莓派搭建边缘计算平台KubeEdge
一、前期软硬件准备
树莓派4B三台:
USB读卡器一个:
SD卡格式化工具:SD Card Formatter
官方镜像烧录工具:Raspberry Pi Imager
远程桌面:VNC Viewer
二、树莓派的初始化
1、烧录镜像
镜像选择Raspberry Pi OS (64-bit) Debian 12 (Bookworm)
配置树莓派用户密码以及WiFi热点名及密码:
记得开启SSH服务:
2、写入WIFI配置文件
创建文件wpa_supplicant.conf,后写入内容:
country=CN
ctrl_interface=/var/run/wpa_supplicant
update_config=1
network={
ssid="user" //你的热点名称
psk="123456" //你的热点密码
priority=1
}
移动热点可以使用手机的,也可以使用电脑的,我这里使用电脑开启移动热点。
之后,将wpa_supplicant.conf文件复制到刚刚烧录完成的SD卡的bootfs根目录下:
然后将SD卡从读卡器取出,插入树莓派SD卡槽,并将树莓派开机。
3、SSH连接树莓派
查看移动热点:
发现三台树莓派均已成功连上热点。
然后使用Xshell连接树莓派:
4、启动VNC服务
在终端输入命令:sudo raspi-config
进入配置界面,依次选择:Interface Options -> VNC -> Yes ,等待服务开启即可。
5、登录远程桌面
打开VNC Viewer并输入树莓派ip地址进行连接:
输入账号密码后即可登录到远程桌面上:
6、配置中文界面
依次执行:
sudo apt-get install ttf-wqy-zenhei
sudo apt-get install fcitx fcitx-googlepinyin fcitx-module-cloudpinyin fcitx-sunpinyin scim-pinyin
之后在终端输入 sudo raspi-config 进入配置界面:
依次进入:Localisation Options—>Locale,找到 zh_CN UTF-8,
把光标移动到前面,然后按下空格键打上*号,之后回车确认。
配置完成后,输入sudo reboot重启,重启后,即可使用中文输入法和中文显示界面。
7、树莓派更换软件源
终端输入:
uname -m
cat /etc/os-release
记住版本号信息。
打开清华大学开源软件镜像站:
找到raspberrypi后点击后方蓝色问号,选择好对应的版本号并复制下方内容:
deb https://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ bookworm main
执行下列指令并将刚刚复制的内容写入配置文件中:
sudo vi /etc/apt/sources.list.d/raspi.list //写入
sudo cat /etc/apt/sources.list.d/raspi.list //查看
后找到raspbian点击蓝色问号,根据一开始的版本型号选择对应命令,点击蓝色的Debian帮助:
若无拉取失败的问题,则并复制下方红框内容:
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware
deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware
deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware
deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware
# 以下安全更新软件源包含了官方源与镜像站配置,如有需要可自行修改注释切换
deb https://security.debian.org/debian-security bookworm-security main contrib non-free non-free-firmware
deb-src https://security.debian.org/debian-security bookworm-security main contrib non-free non-free-firmware
同理,执行下面的命令,将刚刚复制的内容写入配置文件中:
sudo vi /etc/apt/sources.list //写入
sudo cat /etc/apt/sources.list //查看
执行下面的命令同步更新源:
sudo apt-get update
执行下面的命令更新软件包:
sudo apt-get upgrade
换源完成。
三、安装Docker
1、安装一些基本工具
安装一些必要的工具,如curl、wget和git:
sudo apt install -y curl wget git
2、安装Docker
卸载先前的Docker残留文件(若有):
sudo apt remove --purge docker docker-engine docker.io containerd runc -y
sudo rm -rf /var/lib/docker
在树莓派上安装Docker(使用官方脚本):
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
验证安装:
docker --version
sudo systemctl status docker
检查Docker组:
getent group | grep docker
预期输出:类似docker:x:998: docker:x:991:
将用户添加到Docker组:
安装完成后,将pi用户添加到docker组:
sudo usermod -aG docker pi
检查是否添加成功:
groups pi
预期输出(包含docker):
pi : pi adm dialout cdrom sudo audio video plugdev games users input render netdev spi i2c gpio lpadmin docker
验证Docker权限:
docker ps
若出现sock报错:
permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.48/containers/json": dial unix /var/run/docker.sock: connect: permission denied
检查/var/run/docker.sock权限:
ls -l /var/run/docker.sock
预期输出:srw-rw---- 1 root docker 0 Mar 21 13:30 /var/run/docker.sock
or srw-rw---- 1 root docker 0 3月21日 13:40 /var/run/docker.sock
若执行docker ps再次报错,应为权限错误,再次授权:
sudo chown root:docker /var/run/docker.sock
sudo chmod 660 /var/run/docker.sock
再次验证:
执行:
sudo docker ps
结果表示成功,docker权限正常。
四、准备KubeEdge安装环境
1、下载KubeEdge的keadm工具
KubeEdge提供了一个方便的工具keadm来简化安装。前往KubeEdge GitHub Release页面https://github.com/kubeedge/kubeedge/releases),选择最新版本(例如v1.15.0)。由于树莓派4B是ARM架构(armhf或arm64,视系统位数而定),需要下载对应的ARM版本。
检查你的系统架构:
uname -m
- 如果返回armv7l,则为32位ARM(armhf)。
- 如果返回aarch64,则为64位ARM(arm64)。
下载适用于ARM的keadm(以v1.15.0为例,假设使用64位系统):
wget https://github.com/kubeedge/kubeedge/releases/download/v1.15.0/keadm-v1.15.0-linux-arm64.tar.gz
tar -xzf keadm-v1.15.0-linux-arm64.tar.gz
sudo mv keadm-v1.15.0-linux-arm64/keadm/keadm /usr/local/bin/
验证安装:
keadm version
2、关闭Swap(可选但推荐)
KubeEdge依赖Kubernetes组件,而Kubernetes通常要求关闭Swap以避免性能问题:
sudo swapoff -a
sudo sed -i '/swap/d' /etc/fstab
3、部署KubeEdge CloudCore(云端)
如果你的树莓派仅作为边缘节点,可以跳过此步骤,直接在另一台设备(例如x86_64服务器或虚拟机)上部署CloudCore,并获取连接信息。这里假设你在一台单独的云端服务器上部署CloudCore。
安装x86_64架构的keadm,即amd64:
wget https://github.com/kubeedge/kubeedge/releases/download/v1.15.0/keadm-v1.15.0-linux-amd64.tar.gz
解压文件:
tar -xzf keadm-v1.15.0-linux-amd64.tar.gz
移动 keadm 到 /usr/local/bin:
sudo mv keadm-v1.15.0-linux-amd64/keadm/keadm /usr/local/bin/
验证安装:
keadm version
在云端服务器上安装CloudCore:
- 在云端设备上安装Kubernetes(建议版本与KubeEdge兼容,例如v1.24或v1.25)。
- 使用keadm初始化CloudCore:
keadm init --advertise-address=<云端公网或内网IP> --kubeedge-version=v1.15.0
- 获取连接Token:
keadm gettoken
保存输出的Token,边缘节点需要使用它加入集群。
检查CloudCore状态
在云端运行:
kubectl get pods -n kubeedge
确保cloudcore Pod处于运行状态。
4、部署KubeEdge EdgeCore(边缘端)
在树莓派4B上部署EdgeCore以加入云端集群。
1、下载EdgeCore二进制文件 从KubeEdge Release页面下载适用于ARM架构的KubeEdge二进制文件:
wget https://github.com/kubeedge/kubeedge/releases/download/v1.15.0/kubeedge-v1.15.0-linux-arm64.tar.gz
tar -xzf kubeedge-v1.15.0-linux-arm64.tar.gz
sudo mkdir -p /etc/kubeedge
sudo cp kubeedge-v1.15.0-linux-arm64/edge/edgecore /usr/local/bin/
若后续报错,可能是因为网络原因下载中断,压缩包不完整,可执行下列指令观察压缩包是否为约139M的大小:
ls -lh kubeedge-v1.15.0-linux-arm64.tar.gz
2、加入云端集群 使用之前从云端获取的Token,将树莓派加入集群:
keadm join --cloudcore-ipport=<云端IP:10000> --token=<从keadm gettoken获取的Token> --kubeedge-version=v1.15.0 --runtimetype=docker --edgenode-name=raspberrypi-4b
- <云端IP:10000>: 云端CloudCore的IP和端口(默认10000)。
- <Token>: 从云端获取的Token。
- --edgenode-name: 为树莓派指定一个唯一的边缘节点名称。
3、验证边缘节点 在云端运行以下命令检查节点状态:
kubectl get nodes
你应该能看到名为raspberrypi-4b的节点,状态为Ready。
5、验证边缘端是否部署成功
执行:
edgecore --version
若报错1: 则检查目录是否存在并授权:
ls -ld /var/lib/kubeedge
sudo mkdir -p /var/lib/kubeedge
sudo chown pi:pi /var/lib/kubeedge
若报错2:
则手动创建/etc/kubeedge/manifests目录并设置权限:
sudo mkdir -p /etc/kubeedge/manifests
sudo chown pi:pi /etc/kubeedge /etc/kubeedge/manifests
若无报错,则输出:
发现部分模块已成功运行:
1、版本号输出:
- I0321 14:02:17.172601 3146 server.go:102] Version: v1.15.0: edgecore二进制正常运行。
2、模块注册:
- twin、edged、websocket、eventbus、metamanager模块成功注册:
- I0321 14:02:17.216815 3146 module.go:52] Module twin registered successfully
I0321 14:02:17.220898 3146 module.go:52] Module edged registered successfully
...
3、数据库初始化:
- table device already exists, skip等日志表明/var/lib/kubeedge/edgecore.db已创建并正常工作。
4、模块启动:
- edged、twin、eventbus、metamanager等模块开始启动:
- I0321 14:02:17.225667 3146 core.go:46] starting module edged
I0321 14:02:17.225841 3146 edged.go:122] Starting edged...
5、本地IP检测:
- I0321 14:02:17.222470 3146 edgestream.go:55] Get node local IP address successfully: 192.168.137.65: 边缘节点IP自动检测为192.168.137.65。
警告(Warning)
- NodeIP未指定: W0321 14:02:17.172413 3146 validation_others.go:24] NodeIP is empty: 配置文件未设置nodeIP,使用默认IP。这不影响当前运行,可暂时忽略。
错误(Error)
- CloudCore证书获取失败:
- F0321 14:02:17.227638 3146 certmanager.go:96] Error: failed to get CA certificate, err: Get "https://192.168.137.65:10002/ca.crt": dial tcp 192.168.137.65:10002: connect: connection refused:
- edgecore尝试从192.168.137.65:10002获取CA证书,但连接被拒绝。
- 原因:192.168.137.65是树莓派自身IP,而CloudCore未运行(你还未部署云端)。
- F0321 14:02:17.227638 3146 certmanager.go:96] Error: failed to get CA certificate, err: Get "https://192.168.137.65:10002/ca.crt": dial tcp 192.168.137.65:10002: connect: connection refused:
- MQTT连接失败:
- E0321 14:02:17.228671 3146 common.go:101] connect error: Network Error : dial tcp 127.0.0.1:1883: connect: connection refused:
- eventbus模块尝试连接内置MQTT服务器(127.0.0.1:1883),但失败。
- 原因:内置MQTT未正确启动(可能是配置问题或依赖未满足)。
- E0321 14:02:17.228671 3146 common.go:101] connect error: Network Error : dial tcp 127.0.0.1:1883: connect: connection refused:
无云端配置验证边缘端是否部署成功:
当前输出表明边缘端部分功能已就位,但因cloudHub和eventBus问题导致启动失败。以下是调整和验证步骤:
步骤 1: 禁用cloudHub模块
edgecore因尝试连接CloudCore而退出,需禁用cloudHub:
1、编辑配置文件:
sudo vi /etc/kubeedge/config/edgecore.yaml
2、确保cloudHub禁用:
apiVersion: edgecore.config.kubeedge.io/v1alpha2
kind: EdgeCore
modules:
edged:
enable: true
eventBus:
enable: true
mqttMode: 0 # 内置MQTT
metaManager:
enable: true
twin:
enable: true
cloudHub:
enable: false # 禁用云端连接
保存并退出,然后测试:
sudo edgecore --version
确保不再出现certmanager相关的connection refused错误。
步骤 2: 处理MQTT问题
eventbus模块依赖内置MQTT(mqttMode: 0),但当前未启动。可以选择修复或禁用:
1、尝试修复内置MQTT:
- 确保配置正确:
modules:
eventBus:
enable: true
mqttMode: 0
mqttServer: "127.0.0.1:1883"
运行并观察:
sudo edgecore --logtostderr --v=2
如果仍报connection refused,说明内置MQTT未正常工作。
2、临时禁用eventBus(推荐):
- 编辑配置文件:
sudo nano /etc/kubeedge/config/edgecore.yaml
设置:
modules:
eventBus:
enable: false
测试:
sudo edgecore --logtostderr --v=2
步骤 3: 验证本地模块运行
运行调试模式,检查核心模块:
sudo edgecore --logtostderr --v=2
预期输出:
- edged、twin、metamanager模块启动:
I0321 ... module.go:52] Module edged registered successfully
I0321 ... edged.go:122] Starting edged...
- 无致命错误(FATAL)。
如果成功: 按Ctrl+C退出,边缘端本地部署基本完成。
五、 测试部署
1、创建一个简单的Pod 在云端创建一个测试Pod,例如Nginx:
kubectl run nginx --image=nginx --restart=Never
kubectl get pods
2、检查边缘端 在树莓派上运行:
docker ps
你应该能看到Nginx容器正在运行。
日志排查: 如果遇到问题,检查边缘端日志:
sudo journalctl -u edgecore
更多推荐
所有评论(0)