Apache License 2.0

技术解读

以下内容由 GitRead 中文社区 编辑团队基于项目 README 与官方资料整理, 结合中文开发者的常见使用场景补充技术选型建议。具体以项目官方文档为准。

当设备成为 Kubernetes 一等公民:Shifu 深度拆解

边缘计算发展多年,落地时最难的环节始终没变:云原生技术再成熟,一到设备层就会中断。设备使用串口、Modbus 寄存器、私有 TCP 报文,业务应用使用 Service、CRD、HTTP。两者之间,通常横着一个靠脚本和配置文件堆叠起来的“网关”。

Shifu 选择了更直接的做法:不另写一个网关,而是把设备直接做成 Kubernetes 资源。

项目背景与痛点

传统 IoT 网关的典型形态是“中心化消息枢纽”:设备数据统一进入 MQTT Broker,网关负责协议转换和规则引擎,上层应用订阅主题获取数据。这套模式用于数据采集够用,但一旦涉及“控制”,问题立刻显现。应用想给某台设备下发指令,必须先查主题、拼报文、处理异步回执,设备变成一个只能通过消息间接访问、无法直接调用的黑盒。

痛点可归纳为三条。第一,语义不统一:设备没有稳定的 API 契约,接入逻辑分散在各个网关插件里,换设备就要改应用。第二,运维分离:设备的连接配置、凭据、生命周期管理自成一套,与 K8s 的声明式编排、RBAC、GitOps 不兼容。第三,扩展性受限:所有流量都经过中央网关,网关本身成为单点和性能瓶颈。

Shifu 的切入点是重新对齐这三件事:让每台设备拥有独立、可寻址、遵循统一语义的服务端点,并用 K8s 机制管理。

核心技术揭秘

Shifu 的架构可概括为:控制面用 CRD 声明设备,数据面用 Pod 承载数字孪生。

控制面上,Edgedevice 这类 CRD 描述“设备是什么”——地址、协议、连接参数;DeviceShifu 描述“这台设备对外表现成什么”——指令集、遥测配置、健康检查策略。两者分离后,设备元数据和接入行为可以独立演进。Shifu 的 controller 监听这些对象,为每台设备拉起一个 deviceShifu Pod,并创建对应 Service。

数据面上,deviceShifu Pod 内部是 HTTP Server 和协议驱动。业务应用访问的是 K8s Service;请求进入 Pod 后,HTTP Server 把统一语义的读写指令交给 Driver,Driver 再转换成设备原生协议——Modbus 寄存器读写、OPC UA 节点访问、MQTT 发布订阅、Socket 字节流。这是标准的端口-适配器结构:上层契约稳定,下层协议可插拔;新增协议等于新增 Driver 实现,无需改动上层语义。

graph TD A[业务应用 / 控制面] --> B[Kubernetes Service<br/>虚拟设备入口] B --> C[deviceShifu Pod<br/>HTTP Server] C --> D{"指令类型"} D -->|"读指令"| E[Driver 协议适配层] D -->|"写指令"| E C -->|"周期性遥测"| F[edgehub MQTT Broker] F --> G[云端数据平台] E -->|"HTTP / Socket"| H[物理设备] E -->|"OPC UA / Modbus"| H I[Edgedevice / DeviceShifu CRD] --> C

遥测路径值得单独说明。deviceShifu 按 telemetrySettings 周期性执行采集指令,汇总结果后经 MQTT 上报到边缘 edgehub,再由 edgehub 桥接到云端。控制走同步 HTTP、数据走异步 MQTT,两条链路各司其职,避免用消息通道做实时控制带来的时序问题。

真正的工程难点是应对设备不可靠:超时、重连、脏数据、指令幂等,都要在 deviceShifu 这一层统一处理,否则每接一台设备都要重复劳动。

功能亮点与差异

最大差异是设备即微服务。多数竞品把设备当“数据源”,Shifu 把设备当“有 API 的服务”。这个视角切换带来的好处很直接:Service、Ingress、NetworkPolicy、RBAC、Prometheus、服务网格等 K8s 能力都可复用,多租户隔离用 namespace 就能做,设备访问权限用 Role 就能控。

其次是隔离性。一台设备的驱动崩溃不会影响其他设备,滚动升级、资源限额、健康探针都使用 K8s 原生语义。相比之下,单体网关里一个插件内存泄漏就可能影响整个现场。

第三是声明式生命周期。设备接入从“登录网关点配置”变成提交一份 YAML;配合 GitOps,可实现配置可审计、可回滚、可灰度。这一点在几十上百个站点的规模化运维中价值极高。

应用场景与落地建议

适合场景很明确:现场已有 K3s/K8s 基础,设备协议各异,上层应用希望用统一 API 而不是消息主题操作设备;或需要对不同产线、客户做资源与权限隔离。

不适合场景也需说明:资源极度受限的嵌入式网关(每设备一个 Pod 对内存和镜像拉取不友好)、设备数量上万且不愿承担 K8s 控制面开销的场合、以及只需单向数据采集、不需要控制回路的业务。

落地时有几个风险要提前规避。Pod 数量膨胀:设备多时务必评估 apiserver 压力和节点密度,必要时按协议或产线聚合或限流。探针抖动:健康检查频率不能过激,设备响应慢时容易引发连锁重启。网络边界:用 NetworkPolicy 限制 deviceShifu 的出网范围,避免边缘 Pod 直接访问公网。镜像治理:Driver 镜像尽量精简并预拉取,边缘弱网下镜像拉取失败是最常见的部署故障。遥测采样要与 MQTT 带宽匹配,宁可在边缘降采样,也不要把高频原始数据全量上云。

综合评价

Shifu 思路清晰:没有发明新概念,而是把“设备”放进 Kubernetes 已有的抽象里,用最小的认知成本换取最大的生态复用。这种设计的优点在于,它让设备接入变成“写 YAML”,而不是“写适配代码”。

代价同样清楚。每设备一个 Pod 的模型在密度上有天然上限,协议驱动的成熟度和覆盖广度仍需时间检验,社区体量与工业级网关老牌玩家相比还有差距。更现实的门槛是:它默认用户已使用 K8s;对仍使用传统 SCADA 体系的团队来说,这已不只是网关选型,而是一整套架构迁移工程。

一句话总结:Shifu 不只是给 IoT 加了一个 K8s 外壳,而是把设备当作云原生体系中可治理的一员。方向正确,工程上仍在完善;它适合愿意为长期可维护性付出前期学习成本的团队。

关于

GitHub 原始描述(英文)

Kubernetes-native IoT gateway

描述取自 GitHub 官方 API,保持仓库作者书写的原文。

语言占比

Dockerfile
Go
Makefile
Python
Shell

README

中文 | English | 日本語

PRs Welcome Go Report Card codecov Build Status golangci-lint


Kubernetes native IoT Gateway

Shifu is a Kubernetes native, production-grade, protocol & vendor agnostic IoT gateway.
       

Shifu’s value: Let’s develop APPs, not infra

CNCF Livestream with Live Demo

Cloud Native Live

Features

Kubernetes native — developing your application while managing your devices, spare the need for maintaining an additional O&M infrastructure.

Open Platform — No vendor lock-in. You can easily deploy Shifu on the edge(from RaspberryPi to edge clusters) or on the cloud(public, private and hybrid cloud are all supported).

Protocol agnostic — HTTP, MQTT, RTSP, Siemens S7, TCP socket, OPC UA…The microservice architecture of Shifu enables it to quickly adapt to new protocols.

Terms

shifu - a Kubernetes CRD for integrating IoT devices into the cluster.

DeviceShifu - a Kubernetes pod as well as the atomic unit of Shifu. DeviceShifu mainly contains the driver of the device and represents a device in the cluster. Or you can call it “digital twin” of the device.

How to connect a proprietary-protocol camera with five lines of code

Community

Welcome to the Shifu community to share your thoughts and ideas! Any suggestion will be deeply valued. We couldn’t be more excited to have you.

Join Discord Follow X GitHub Discussions YouTube Subscribers

Get Started

Welcome to check 🗒️Shifu Documentation for detailed information on:

Contributing

Feel free to create an issue or submit a pull request!

We will forever be grateful to all the contributors.

Shifu is officially a CNCF landscape project

Stargazers over time

Stargazers over time

License

This project is distributed under Apache 2.0 License.

评论

暂无评论