加入收藏 | 设为首页 | 会员中心 | 我要投稿 站长网 (https://www.023zz.com.cn/)- 高性能计算、物联设备、数据可视化、操作系统、基础存储!
当前位置: 首页 > 服务器 > 系统 > 正文

嵌入式容器化:资源受限设备轻量级K8s实践

发布时间:2026-10-15 14:14:53 所属栏目:系统 来源:DaWei
导读:  凌晨三点二十,机房空调嗡嗡声突然变了调,像被掐住脖子的蜂鸣器——我抄起扳手冲进去时,发现不是制冷剂漏了,是K3s节点的systemd-journald日志把eMMC卡写爆了,只剩12KB可用空间。那个节点上跑着温控服务、Modbus网关,还

  凌晨三点二十,机房空调嗡嗡声突然变了调,像被掐住脖子的蜂鸣器——我抄起扳手冲进去时,发现不是制冷剂漏了,是K3s节点的systemd-journald日志把eMMC卡写爆了,只剩12KB可用空间。那个节点上跑着温控服务、Modbus网关,还有老板硬塞进去的OTA更新代理。我蹲在机柜底下用dd清空/var/log/journal/的瞬间,听见值班室泡面桶里汤还在晃。


  半年前我们开启动会,投影仪蓝光扫过白板:“轻量级K8s落地边缘设备”,老板手机支架歪在桌角,微信弹出新消息:“@我 优先保证证书自动续期”,我回了个“收到”,顺手把kubectl apply -f cert-manager.yaml的命令复制进记事本——结果那天根本没跑通。Ingress Controller压根没拉起,TLS Secret一直pending。客服在线支持说:“建议升级到v1.12.3以上”。我翻Git历史发现,他们去年十月就删掉了对ARMv7的静态编译支持。我原以为改个ARCH=arm就行了,结果交叉编译出来的二进制连init进程都fork失败。


  监控屏右下角贴着三块灰胶布,盖着去年某次UPS跳闸后闪瞎眼的告警灯。其中一块边角卷起来了,露出底下“NodeNotReady”的红色字体。昨天下午五点十七,运维群炸锅:四个工业网关全失联。我ssh进去一看,kubectl get nodes返回Connection refused。不是API Server挂了——是containerd.sock被systemd临时删了,因为磁盘空间阈值设的是90%,而eMMC卡的实际剩余空间是89.7%,差那0.3%触发了自动垃圾回收。它把所有socket文件和runtime状态全清了,但没重建。重启containerd?不,它死活不认自己的cgroup路径。我试了三遍:先停service,再rm -rf /run/containerd,最后systemctl start,可第三次执行完,journalctl -u containerd只刷出一行:“failed to load config: open /etc/containerd/config.toml: no such file”。谁删的?我不知道。这个我到现在也没想明白。


  李工在隔壁工位啃冷包子,他负责PLC桥接容器,上周刚把modbus-tcp-proxy换成alpine基础镜像,省了14MB——然后他镜像里写的ENTRYPOINT是/usr/local/bin/proxy,可实际路径是/usr/bin/proxy。跑了三天才发现log里全是exec format error。张工孩子昨晚打来电话问爸爸啥时候回家,我听着她喊“你说话好慢啊”,才发现自己正对着Wi-Fi热点拨号,信号格只有两格,DNS超时八百毫秒。窗外下雨,雨点砸在机房二楼钢化玻璃上,嗒、嗒、嗒,跟心跳节奏完全错拍。


文章配图,仅供参考

  最离谱的是那个备份。我们写了crontab每小时tar打包etcd快照,存到NFS;脚本开头写着set -e,可某次NFS挂载失败,mkdir /mnt/backup失败,后续的tar命令居然没退出——它默默往根目录下了个叫backup的空文件夹,还chmod了755。整整四天,备份全落在/backup,不是/mnt/backup。监控脚本检查的是df -h | grep nfs,所以一直报“healthy”。王姐昨早查日志发现etcd数据比现场温度曲线少两天,我翻完全部bash_history才发现,那行cd /mnt/backup && tar ...其实永远没执行。而我们还在群里互相@:“兄弟确认下备份是不是同步了?”“已同步。”“收到。”


  优胜劣汰这词儿没错,可淘汰的不该是人的睡眠和设备的寿命。K3s说它内存占用小于512MB,可加了fluent-bit+node-exporter+prometheus-node-exporter+自研日志转发器之后,在i.MX6ULL上RSS飙到793MB——还没算kswapd0吃掉的那128MB。厂商文档里那张内存热力图,用的是裸容器,没有挂/dev/mtdblock、没有配seccomp、更没跑真实Modbus流量。我上周拆开一台停产的RK3328盒子,主板上焊着一颗标称4GB的EMMC,实际检测是3.63GB可用;但内核mtd驱动初始化时,按物理页擦除块对齐向上取整,分配了4GB虚拟地址空间——结果OOM killer第一刀砍向的就是kubelet。这事儿没法复现,我重装系统三次,两次活,一次死,最后一次死得毫无征兆,就是突然没心跳,连panic日志都没留下来。


  上个月搬家,纸箱堆在走廊口,物业说要查消防通道,我扛着一箱SSD硬盘下楼办出门证,电梯超载报警响了六声,第十一声的时候我看见保安掏出手机拍我。他肯定不知道我箱子里有三块坏了的国产eMMC——都是跑了一年半突然read-only的。我把它扔进小区废品站绿色铁皮桶,桶口锈迹斑斑,里面半桶雨水,倒映着天上灰云。那一刻我想,容器化在嵌入式上真不是技术问题,是信不信得过的问题。信不信它的operator能在断电前flush完wal,信不信它的pause镜像真不带curl,信不信它的证书轮换不依赖ntpdate——而这三件事,我们仨人,半年,踩实了两件半。


  今天先把告警阈值从90%调成82%。不是保守,是eMMC卡的真实磨损导致的坏块率增长曲线,根本没画进任何SLO文档里。明天找老刘借示波器,测测那台RK3399的SPI NAND电压纹波;顺便问他借瓶冰啤酒,就放机柜顶上降温用。他昨天说“别放,上次融化的水顺着线槽流进了IO模块”,但我看他工位抽屉里还压着半罐没开封的青岛。算了,先调阈值。

(编辑:站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!