一、前期软硬件准备

树莓派4B三台:

USB读卡器一个:

SD卡格式化工具:SD Card Formatter  

官方镜像烧录工具:Raspberry Pi Imager

SSH客户端:Xshell   Putty  (二选一)

远程桌面: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)
  1. NodeIP未指定: W0321 14:02:17.172413 3146 validation_others.go:24] NodeIP is empty: 配置文件未设置nodeIP,使用默认IP。这不影响当前运行,可暂时忽略。
错误(Error)
  1. 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未运行(你还未部署云端)。
  2. 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未正确启动(可能是配置问题或依赖未满足)。

无云端配置验证边缘端是否部署成功:

当前输出表明边缘端部分功能已就位,但因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

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐