ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

基于CM4集群板的树莓派四节点K3s集群搭建实战指南

基于CM4集群板的树莓派四节点K3s集群搭建实战指南 去年夏天我接了个需求要在本地搭一套四节点的树莓派集群用来跑K8s学习和边缘侧的定时任务。刚开始很自然就想到买四块树莓派4B叠起来电源、网线、散热片、亚克力支架全算上桌面基本没法看了四根网线从交换机拖出来每个节点还得配一个官方电源适配器插线板上密密麻麻全是充电头。后来发现市面上有基于Compute Module 4的四槽集群板一块PCB解决供电、网络和固定起售价80美元左右一下子把布线复杂度打下来了。这篇文章就围绕这块板子从硬件架构、CM4选型、系统烧录到集群初始化把从裸板到四节点K3s跑通的全过程记录下来也把过程中踩过的坑一并说清楚。如果你也在纠结要不要用集群板替代树莓派4B堆叠或者已经入手了类似的CM4集群板但不知道怎么开始这篇文章基本就是一份完整的上手指南涵盖硬件、系统、网络和常见排障。1. 为什么搞四槽集群板而不是堆四块树莓派4B1.1 传统堆叠方案的真实痛点用四块树莓派4B组集群听起来简单实际上从物理层面就有一堆麻烦。首先是供电每块4B需要独立的5V/3A电源四块板子就是四个充电头还要确保墙插面板有足够的插座一旦某个电源质量不过关重负载下电压跌落节点随机重启就是家常便饭。其次是网络四根网线从交换机到每个派想理清楚哪根线对应哪个节点得贴标签时间一长标签脱落排查链路问题非常痛苦。然后是散热树莓派4B在CPU持续负载下SoC温度轻松超过80摄氏度叠层支架如果风道设计不好上层板子吸下层热风温度更难压。这些问题单独看都能忍受但凑在一起就非常难受。最关键的是树莓派4B本身是一台完整的小电脑HDMI、USB、音频等接口在集群场景里几乎用不上这些接口却占用了大量PCB面积导致四块板子堆叠起来体积很夸张。集群板方案不同它把计算模块直接插在一张大底板上整块板子统一供电、统一走线、统一散热所有IO通过板载接口引出密度和整洁度完全是另一个级别。1.2 集群板方案的核心思路所谓四槽Raspberry Pi集群板本质上是为树莓派Compute Module设计的主板板上没有CPU、内存和存储只提供电源、网络、M.2插槽、GPIO引出等周边电路。你需要自己买四块Compute Module插上去再配一个12V电源适配器插一根上行网线到主路由器四个节点就都通电入网了。这个思路和服务器主板的逻辑一模一样CPU、内存条是独立模块主板负责供电和互连。Cluster Board把这种模块化思路带到了树莓派生态里。它解决的不仅是整洁问题更重要的是运维体验——四个节点共享一个电源入口、一个上行网络口重启时不用蹲在插线板面前挨个拔插头直接断电整板重启或者通过板载管理功能独立控制每个节点的通断。80美元的价格指的是裸板价格不含CM4模块、电源、M.2 SSD这一点要提前有数。但和四块树莓派4B加四个电源加一个五口交换机的方案比集群板方案在成本上并不吃亏尤其在散热风扇、亚克力支架这些配件上省了不少钱桌面空间更是省出了一大块。1.3 这套方案适合谁我不是说每个人都应该用集群板。普通玩家手里如果已经有两三块树莓派4B拿来跑点轻量服务完全没必要换。但如果你有明确的多节点需求比如学K8s、跑Ceph实验、搭分布式爬虫、在家部署一套小型CI/CD集群集群板能把很多体力活省掉。还有一类人非常适合经常做硬件测试的嵌入式工程师。CM4模组在量产项目里非常常见做固件、驱动、散热用例时一块四槽集群板加上不同内存/存储容量的CM4混合插调试效率比单槽载板高很多一个节点刷挂了大不了重插。2. 80美元基板背后的硬件架构这钱到底花在哪2.1 四槽位板子的核心组成部分市面上这类四槽CM4集群板虽然品牌不同但硬件架构大同小异。核心部件有这几个四个CM4板对板连接器插槽用于插Compute Module 4电源输入电路通常是一个12V DC接口加DC-DC降压电路板载千兆交换机芯片负责四个节点与上行口的二层转发每组节点一个M.2 M-Key插槽通常支持Gen3 x1 NVMe SSD40Pin GPIO引出排针方便接线调试每节点电源LED、状态LED和一个复位按键供电是这类板子最需要重视的部分。CM4满载时单颗功耗大概在5到7瓦四颗满载就是20到28瓦考虑到M.2 SSD和交换芯片的功耗整板峰值功耗接近35到40瓦。用12V输入的好处是电流只有3A左右对DC接口和线材的负担比5V方案小很多。板上各节点使用独立的DC-DC降压电路把12V转为5V供CM4使用各节点之间电源基本隔离。网络部分板载交换芯片让四个节点的千兆MAC非常方便地汇聚成一个上行口。我在用的时候把上行口接到主交换机整组四个节点在局域网里就像一个小型接入层设备不再需要外置交换机和四根长网线。需要注意的是一些廉价板子可能用百兆交换芯片买的时候一定认准千兆。2.2 为什么用CM4而不是树莓派4B树莓派Compute Module 4和树莓派4B用的是同一颗BCM2711 SoC计算性能没有差别。区别在于CM4是一颗模块化的核心板尺寸大概只有一张名片大小55mm x 40mm没有网口、USB、HDMI这类周边接口只通过底部的金手指把GPIO、PCIe、HDMI、USB等信号全部引出。对集群板而言CM4这个形态有两个巨大优势。第一是体积密度四块CM4加上底座整体占用的空间大概只有两块树莓派4B叠起来那么大相同面积内计算核心数量翻倍。第二是灵活性同一块集群板可以随时更换不同配置的CM4比如四个节点用2GB版本跑K3s另外一个节点单独插一块8GB的版本作为管理节点这种混合配置在整机树莓派方案里非常难实现。很多人问CM4的GPIO引脚图和树莓派4B是否一致。答案是基本一致的CM4底部的金手指同样引出了40Pin GPIO包括I2C、SPI、UART、PWM等复用功能电气电平同样是3.3V。但要注意集群板上这些GPIO通常通过排针引出引出的顺序在某些板子上可能不是标准的40Pin排针排列务必参考你板子的说明书和原理图别默认拿树莓派4B的引脚定义去直接接线这一点后面会细说。2.3 完整成本拆解80美元只是开始标题里Starts at $80很有迷惑性很多人以为80美元就能拿到四节点集群实际上这只是底板价格。我按当时市场行情做了一个成本清单方便你评估总预算部件参考价格说明四槽集群板约80美元裸板含电源配件的话另算CM4 2GB Lite x4约120-160美元按单颗30-40美元估算实际波动大M.2 NVMe SSD 256GB x4约80-120美元可选不上SSD可用SD卡或eMMC12V 5A电源适配器约15-25美元大厂品牌略贵但更稳散热套件散热片风扇约10-20美元强烈建议买合计约305-405美元不含TF卡和杂项对比树莓派4B 4GB版本单价按60美元算四块就是240美元加上四个电源、一个五口交换机、支架和风扇总成本接近300美元。两者在硬件总价上其实能打个平手集群板方案胜在结构紧凑、运维方便树莓派4B方案胜在单板可以独立拿出来单独用比如偶尔拔一块出去做点别的实验。具体怎么选看你更看重哪种使用方式。3. Compute Module 4怎么选内存、eMMC、WiFi、GPIO引脚一个都不能错3.1 内存版本选多大合适CM4有1GB、2GB、4GB、8GB四个内存版本。做集群节点我建议至少2GB起步。如果跑K3s控制平面加工作节点如果都在这四颗里跑2GB节点勉强能跑但很紧张4GB会更从容单节点上可以多部署几个Pod。如果只是跑Docker Swarm或者普通容器2GB就够用了。我自己的方案是四颗全部用2GB Lite版加NVMe SSD跑K3s时把主节点和工作节点都在四节点上铺开。实测跑起来内存基本在70%到80%部署一些轻量服务问题不大但如果要跑Ceph或者构建大型Java项目内存就会吃紧。3.2 eMMC版本和Lite版本怎么判断CM4有带eMMC和不带eMMC两种不带eMMC的版本叫Lite版。Lite版没有板载存储必须从SD卡、NVMe或网络启动带eMMC版本则可以直接把系统写进eMMC里。给集群选型时我强烈建议优先考虑Lite版加M.2 NVMe。原因很简单系统跑在NVMe上IO性能远超eMMC软件包安装、容器拉取、日志写入都明显更快。还有一个非常现实的原因eMMC版烧录系统比SD卡/NVMe麻烦需要在Windows/Linux上用rpiboot工具把CM4切换到USB mass storage模式对新手不太友好。Lite版在集群板上只要插一张TF卡或者从M.2 NVMe上的系统引导省心很多。3.3 带不带WiFi的版本怎么选CM4分无线版和无无线版。我在集群场景里坚决选无WiFi版。原因有几个一是集群节点之间通信主要走有线网络WiFi接口完全用不上二是无WiFi版的板载天线区域会空出来信号电路不存在理论功耗略低三是WiFi模块在密集电磁环境下偶尔会争抢天线资源干扰有线通信虽小但没必要冒这个风险。当然如果某个节点需要临时脱离集群网络自己接入WiFi热点那么带无线版本就方便了。不过这种情况完全可以靠一块USB无线网卡临时解决没必要为了这个场景给四颗CM4都上无线版。3.4 GPIO引脚图才是最容易翻车的地方前面提到CM4的金手指引脚定义和树莓派4B的40Pin排针是兼容的但这里有几个实战中特别容易踩的坑。CM4的GPIO不是像4B那样从PCB顶部的排针引出而是从底部的板对板连接器上通过金手指引出的。在集群板上厂商会把GPIO信号接到板载排针但排针的物理排列顺序不一定按树莓派的40Pin标准走。有的板子做成两排20Pin有的做成两个单独的接头。我吃过一次亏拿到板子后默认按树莓派标准40Pin布局接了一个I2C温湿度传感器结果SCL和SDA完全反了排查半天发现板子上GPIO排针第二脚并不是5V而是被设计成I2C的SDA。从那以后任何集群板到手我第一步永远是去官网下载原理图和管脚定义表拿万用表测一下排针电压再决定接线方式。GPIO的电气特性也要注意CM4的GPIO是3.3V逻辑电平不是5V。如果接5V电平的外设必须加电平转换模块不然大概率烧坏GPIO引脚。板上如果同时有多个节点的GPIO排针还要确认所有节点是否共地不共地的话I2C/UART通信会出现随机数据错误。4. 组装与上电从裸板到四节点就绪的完整流程4.1 安装CM4和散热片第一步把四颗CM4从防静电袋取出来先装散热片。CM4的SoC在PCB正面居中位置附带的小散热片用导热硅胶或卡扣固定即可。我一般会额外加一个微型风扇对着整板吹只用散热片的话连续高负载还是会热到降频。装散热片之后再插CM4到插槽上插之前先观察金手指边缘的定位缺口和板载插槽的凸台方向对准后轻轻推到底然后压下两侧的压杆或卡扣。Tinker的时候千万别用蛮力CM4的板对板连接器触点很密歪着硬插很容易把金手指或插槽针脚弄坏。装好之后可以顺手检查每颗CM4是否安装到位看插槽卡扣是否完全固定。接着装M.2 NVMe SSD。打开集群板背面的M.2固定螺丝把SSD斜着插入卡槽压下后用螺丝固定。注意M.2插槽上的固定柱可能有多个孔位对应不同长度的SSD装之前比一下长度别固定错孔位把SSD压弯。4.2 连接电源和上行网口集群板的电源接口通常是5.5mm DC接口部分板子也带USB-C PD接口。用配套的12V电源适配器接上AC端DC端插入板子即可。第一次上电之前强烈建议先用万用表确认DC接口输出电压极性中心正极、外圈负极是常见标准但个别板子可能不同。上行网口也就是Uplink口接到家里的主路由器或交换机上。此时理想情况下四个节点的网卡会各自从路由器的DHCP拿到一个IP地址。但上电前你大概率还没给系统装boot介质所以CM4现在还没有系统自然不会有IP。这个阶段的目的只是确认电源系统正常按一下每节点附近的复位键能看到对应的电源LED亮起。等所有LED正常亮起再把M.2 SSD如果已经装好插好准备进入刷系统环节。如果这个阶段就发现某个节点LED不亮检查CM4是否插到位、散热片有没有顶到插槽以及电源适配器是否给力。4.3 第一次上电观察供电和温度上电后如果装了系统可以登录任意一个节点查看整板供电是否稳定。有几点值得记录用cat /sys/class/thermal/thermal_zone0/temp查看CPU温度刚上电待机应该在40到50摄氏度用vcgencmd measure_volts core查看核心电压是否稳定同时用dmesg | grep -i error看看有没有硬件相关报错。如果整板四个节点同时高负载供电纹波偏大会导致个别节点随机重启。我遇到过一次当时换了个便宜电源适配器标称12V/3A实际四个节点跑编译任务时一个节点反复重启换回12V/5A的电源后问题消失。供电问题非常隐蔽排查时建议直接换一个大功率电源测试别一开始就怀疑系统配置。5. 四节点集群的软件初始化烧录、网络规划、SSH免密与Ansible批量配置5.1 系统镜像选择与烧录方式CM4能跑的系统很多做集群我推荐Raspberry Pi OS Lite 64位、Ubuntu Server for ARM、DietPi这三个。Raspberry Pi OS Lite最省心官方维护好Ubuntu Server对现代容器工具链更友好DietPi自带不少优化脚本适合小内存节点。Lite版CM4如果走TF卡用树莓派官方Imager直接烧录镜像到TF卡非常省事。如果走M.2 NVMe比较复杂因为BootROM默认不会从PCIe NVMe启动需要先把系统写到TF卡启动然后更新bootloader的BOOT_ORDER或者使用rpiboot工具通过USB连接CM4配置启动顺序。说实话每次给M.2写系统都比较折腾我习惯是先在TF卡上烧好系统启动后把系统完整复制到NVMe或者直接用rpi-eeprom-update让bootloader支持NVMe启动。5.2 四节点网络规划别靠路由器DHCP硬分四个节点启动后默认都从路由器DHCP拿IPIP地址的分配顺序取决于谁先启动非常不固定。做集群必须固定IP两种常用方式在路由器后台给四个MAC地址绑定固定IP或者在系统里配置静态IP。个人推荐直接在系统层配静态IP这样换网络环境也不会失效。规划一个简单的内网网段比如管理网络用192.168.10.0/24节点1管理地址192.168.10.11节点2管理地址192.168.10.12节点3管理地址192.168.10.13节点4管理地址192.168.10.14集群上行口网关192.168.10.1配置方式编辑/etc/dhcpcd.conf加入interface eth0 static ip_address192.168.10.11/24 static routers192.168.10.1 static domain_name_servers192.168.10.1改完重启网络或直接重启节点等四个节点都通了再继续。5.3 开通SSH并配置免密登录每一张烧录好的TF卡第一次启动前在boot分区创建空白ssh文件就能开启SSH。首次登录用pi用户默认密码是raspberry但强烈建议登录后马上执行passwd改密码。四个节点一个一个做太累我的做法是先在节点1上生成密钥对ssh-keygen -t ed25519然后把公钥复制到其他节点ssh-copy-id pi192.168.10.12。做完之后本地主机也可以把公钥依次拷贝到四个节点之后管理节点、节点之间互通全部免密。注意ssh-copy-id第一次会提示输入密码后面就全自动了。5.4 用Ansible把四节点配置成统一状态四节点的系统配置如果一个个手动改配置漂移是早晚的事。所以我在四节点基础装完系统后立刻用Ansible做统一初始化包括修改hostname、更新软件源、安装常用工具、关闭闪烁无关的服务等。写一个简单的inventory文件hosts.ini[cluster] node1 ansible_host192.168.10.11 node2 ansible_host192.168.10.12 node3 ansible_host192.168.10.13 node4 ansible_host192.168.10.14 [cluster:vars] ansible_userpi ansible_becomeyes再写个最小化的playbookinit.yml- hosts: cluster tasks: - name: 更新软件源 apt: update_cache: yes - name: 安装常用工具 apt: name: - git - htop - vim - curl - ca-certificates state: present - name: 关闭无用的蓝牙服务可选 systemd: name: bluetooth state: stopped enabled: no执行ansible-playbook -i hosts.ini init.yml四个节点一次性完成初始化整个过程比手动操作省至少半小时。后续要给所有节点装Docker、装K3s的agent也都是Playbook的事。6. 四节点集群能跑什么K3s、Ceph、监控与HomeLab服务的实测6.1 用K3s把四节点变成迷你Kubernetes集群四节点ARM集群最常跑的负载就是Kubernetes。树莓派上直接装传统K8s非常臃肿内存占用大K3s是Rancher推出的轻量版K8s把etcd替换成内嵌的SQLite或嵌入式etcd默认用containerd运行时特别适合树莓派。安装K3s很简单在第一个节点我先定为192.168.10.11curl -sfL https://get.k3s.io | sh -安装完成后在服务端节点查看tokensudo cat /var/lib/rancher/k3s/server/node-token然后在剩下三个节点上执行curl -sfL https://get.k3s.io | K3S_URLhttps://192.168.10.11:6443 K3S_TOKEN你的token sh -大约一分钟后在管理节点执行kubectl get nodes能看到四个节点全部Ready。实测在2GB内存的CM4节点上K3s的kube-system相关Pod占内存约300MB到400MB2GB内存还能剩1GB多给业务容器跑但如果要在同一节点跑Ceph或大型数据库还是会紧张。一个小建议K3s服务端默认的Pod数限制和Service数限制在集群板上可以适当调低/etc/rancher/k3s/config.yaml里加上max-pods: 50避免资源竞赛。6.2 千万别对Ceph抱太大期望除非你只是想学习树莓派集群跑Ceph是很多人的执念我也试过。结论是能跑但性能非常有限。CM4的NVMe是通过PCIe Gen3 x1连接到SoC的单盘持续读写能跑到500MB/s上下看起来还行。但Ceph的副本写入会同时写多个节点多副本叠加后网络变成瓶颈千兆网的限制大约125MB/s所以性能远不如单机磁盘。加上内存只有2GBOSD进程、Mon进程、MGR进程一拥而上很容易OOM。如果只是想学Ceph的部署思路、CRUSH map原理、故障域设计四节点集群完全够用建议每个节点只跑一个OSDpool的size设为2min_size设为1至少不会让所有节点都忙起来。如果对性能有实际要求树莓派集群确实不合适直接用一台二手x86服务器加几块大容量HDD更靠谱。6.3 监控全家桶Prometheus Grafana集群跑起来之后监控是必需品。四节点CM4资源本就紧张监控全家桶也要轻量化。我在管理节点上部署了Prometheus四个节点都装了node_exporter。安装方式很简单下载ARM64版本的二进制包wget https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-arm64.tar.gz tar xvf node_exporter-1.7.0.linux-arm64.tar.gz sudo mv node_exporter-1.7.0.linux-arm64/node_exporter /usr/local/bin/配置systemd服务让node_exporter开机自启然后在Prometheus配置里把四个节点的9100端口作为target加入。Grafana同样装ARM64版开一个Dashboard模板就能看到CPU、内存、磁盘、网络、温度等实时数据。实测Prometheus本机内存占用约200MBGrafana约150MB在2GB节点上属于可接受范围但尽量让Grafana和Prometheus跑在同一个节点最好不要和业务容器抢太多内存。6.4 更接地气的Homelab玩法如果你的K3s还没完全玩转或者根本不需要K8s四个树莓派节点还有一堆更接地气的玩法Pi-hole在其中一个节点部署Pi-hole做全网DNS过滤广告拦截效果立竿见影Nginx反向代理四个节点分别部署Web服务用Nginx做负载均衡或反向代理模拟一个微型网关Uptime Kuma监控家里其他服务NAS、路由器、各类Web应用的在线状态Alert通知到TelegramGitea轻量Git服务代码仓库放在集群里比单一树莓派多一份冗余分布式爬虫Scrapy或Playwright多节点并行抓取四个节点的并发能力比单机强很多7. 实测中的关键排障与避坑记录7.1 供电不足导致节点反复重启我最初用的是某个第三方12V/3A电源适配器待机时一切正常四颗CM4同时跑apt upgrade并且四个编译任务并行时节点一个接一个重启重灾区是离电源接口最远的那个槽位。查了半天确认不是CPU过热、不是SSD故障最终怀疑是供电不足。换成12V/5A的明纬工业电源后问题彻底消失。原因很直观CM4在跑编译任务时瞬时功耗能冲到5W以上四颗加SSD一起瞬态电流可能超过3A而廉价适配器的电压调整率太差带载后电压跌落幅度大。集群板上的DC-DC降压电路虽然有稳压能力但输入电压跌落太多输出自然稳不住。给集群板配电源建议直接选12V/5A及以上、纹波小的品牌电源不要省这几十块钱。如果板子支持也可以考虑PD诱骗头配合大功率PD充电器。判断供电是否正常可以在高负载时用万用表测DC接口电压如果低于11.5V就说明电源太弱。7.2 散热没做好四颗SoC集体降频CM4的SoC和树莓派4B一样超过85摄氏度会触发降频。四颗CM4密集分布在一块板上散热空间有限单纯靠散热片无风扇高负载下SoC温度稳定在85度以上直接降频到900MHz性能打折非常明显。我最终的散热方案是每颗CM4贴一块带小风扇的散热器整板上方再加一个低速大风量风扇让空气从一侧进、另一侧出形成贯穿式风道。改造后高负载时机箱内温度大概45度SoC温度能压在65度左右性能明显稳定。如果你不想上风扇至少要保证机箱通风孔足够大否则长时间跑容器任务等待你的就是频繁降频。7.3 eMMC和NVMe的启动顺序坑Lite版CM4配合NVMe SSD启动时最常踩的坑是BOOT_ORDER默认不包含PCIe。第一次插上带系统的NVMe开机后毫无反应显示器黑屏如果有接HDMI日志也没有。原因在于新版bootloader虽然支持NVMe启动但需要把BOOT_ORDER里加一个2代表PCIe。方法是在一个能启动的Linux环境里运行sudo rpi-eeprom-config --edit把BOOT_ORDER改成类似0xf26这样的值或者使用raspi-config的更新引导器选项然后重启。改完保存后NVMe就能作为启动设备了。不过要注意不同的eMMC版本和bootloader版本默认值不一样还是得看当前配置别盲改。7.4 GPIO排针方向和电平问题前面提过GPIO排针排列不一定和树莓派4B一致这里再补充一个常见坑板子上的GPIO排针可能没有丝印标注引脚序号或者标注得很小。拿到板子先用万用表测排针的5V和3.3V引脚位置确定第1脚方向。如果你外接传感器出现读数全零或者漂移大概率是SDA/SCL接反了或者共地没做好。另外做GPIO实验时建议先用简单的LED点灯验证引脚编号别直接接高价值外设。我习惯用BCM编号写代码比如GPIO17对应排针第11脚标准40Pin定义但在集群板上需要先对照原理图确认这个物理位置是否真的连到了CM4的GPIO17。8. 个人体会和后续扩展方向这套四槽集群板加四颗CM4的组合我跑了快半年最大的感受就是树莓派集群的性能天花板其实不高它最大的价值是给了你一个低成本、高密度、贴近真实服务器拓扑的实验环境。K3s的调度逻辑、Prometheus的采集体系、Ansible的批量管理这些在普通单板机上也能学但只有多节点环境下才能体会到节点故障、网络分区、资源调度这些概念到底是怎么回事。如果后续想继续扩展我会考虑这几个方向加一块USB转串口模块把四节点的serial console接出来方便内核层面调试用Power over EthernetPoEHAT替代DC供电进一步简化布线搭一个基于K3s的GitOps流水线用Flux或Argo CD自动同步Git仓库里的应用配置把其中两个节点迁移到Ubuntu Server测试跨操作系统集群的兼容性最后再分享一个实际运维中的小技巧因为四个节点经常要同时执行同样的命令我在本机配置了~/.ssh/config把node1到node4分别加上Host别名再写了一个简单的cl函数直接cl hostname就能在所有节点上并行执行命令省去了循环SSH的麻烦。具体就是一段不足十行的shell函数配合pssh或者Ansible的ad-hoc命令日常管理和巡检效率提升非常明显。
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表