嵌入式容器化:资源受限设备轻松运行K8s
|
跟老板拍桌子那天,空调坏了三台,我衬衫后颈全湿透,他坐那儿转椅子,转得我太阳穴一跳一跳。我说K8s跑在ARM64的树莓派4B上,内存占用压到三百七十二 KB——他点头说“挺好”,转头问PM:下季度边缘侧的CI/CD要不要切GitLab Runner?
文章配图,仅供参考 我原以为是资源调度问题,结果调试三天发现是containerd的cgroup v1挂载路径硬编码在initrd里,而我们用的Buildroot没启cgroup v2。改完之后倒水的是前端小张,他顺手把我桌上那杯喝剩半截的冰美式端走了,杯子底下垫了张便签,写“倒掉别放太久”。我没看日期,但肯定不是下午三点,因为三点整运维老李进来问:“你们昨天merge的那个k3s-init patch,为什么没进changelog?”——我点开Git记录,光标悬停在那个合并请求上,勾选、输入签名、再点一次确认,鼠标划了三遍才点准。删掉重来,又划两遍。 优胜劣汰是真的。不是说“能跑就是赢”,是跑不下去的设备直接黑屏重启,连OOM killer都懒得报错——它连/proc/sys/vm/oom_kill_allocating_task这个节点都没挂上。我敢打包票:去年7月份,我们在三台带eMMC的工控板上试过,两台撑过七十二小时,第三台在第十九小时十七分突然把整个overlayfs mount表清空,只剩根目录下三个空文件夹。这事儿没人复现出来,也不打算复现,因为第四台板子焊好了,烧录镜像的时候,对面后端换了一根Type-C充电线——银灰色那根,线皮有细微刮痕,和上回不一样。 Lighthouse跑分截图我发到“嵌入式-容器”群里了,发完就去楼下买了包烟。回来发现没人回,连个“已阅”都没有。倒是群里闪出一条新消息:CDN账单超了,缓存命中率跌到六成八,有人在猜是不是上周加的那条/edge/config/v1路由规则把所有GET都打到源站去了。这事跟我无关,但我盯着看了四分钟,因为那条规则的正则表达式里有个\\w+后面多打了个?,我没敢说——说了就得解释为什么没在PR里拦住,而我PR review记录里只写了“check init script order”。 K8s不是跑起来了就万事大吉。etcd集群在四节点里总有一个节点的心跳超时阈值卡在二百二十毫秒,永远差十八毫秒;不是网络抖动,是那个节点CPU freq scaling默认策略锁死了,必须进/sys/devices/system/cpu/cpu/cpufreq/scaling_governor里手动echo performance。这事我试过三次:第一次是root用户echo,第二次加了sudo,第三次发现得先echo userspace才能切performance——这个我敢打包票,但至于为什么userspace要前置,我说不准,文档里没写,也没人问。 桌面那个没关的录屏还在跑,窗口缩在右下角,进度条走到了01:23:59,但画面定格在我打开journalctl -u k3s那一刻。我点了暂停,没关。PM刚微信问“k3s的service account token轮转策略定了没”,我没回,因为他前天问过同样的问题,当时我说“token自刷新机制已经disable,靠cert-manager renew”。他回了个“OK”,后面跟个笑哭表情。我现在点开Terminal,想把那个录屏关掉,手指悬在键盘上停了十一秒——算了,让它录着吧,反正磁盘还剩十四G。 最讽刺的是什么?我们最后上线用的不是k3s,是microk8s的精简版fork,删掉了全部kubectl插件、metrics-server、甚至apiserver的Swagger UI,只留了core/v1、apps/v1、rbac.authorization.k8s.io/v1三个API组。删完之后启动时间从九秒压到二点三秒。但客户验收的时候,产品指着控制台里那个灰掉的“Metrics”标签页问:“这里怎么没数据?”——我答不上来,只记得当时空调外机在楼顶嗡嗡响,像一台没调好相位的伺服电机。 下周我要拆掉一台已上线的现场设备,带回公司做热拔插压力测试。带个便携硬盘,录全程。不传云盘,也不发群,自己存着。要是真跑出什么奇怪日志,我可能拿去喂本地Qwen,看它能不能猜出cgroup.memory.stat里那个anon_pgfault字段突增到底是因为swapcache泄漏,还是因为某个golang runtime的GC mark phase里偷偷开了一个协程去读/dev/random。这事我不敢保证结果,但可以保证:下次再被叫去拍桌子之前,先把那根银灰色充电线借来拍一遍。 (编辑:站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


嵌入式开发:逻辑清晰代码省70%调试时间
5G模组低功耗:嵌入式运维的新标尺