Baetyl:部署中的云原生边缘AI计算平台
部署Baetyl v2.4,将Kubernetes原生的边缘计算能力带到物联网设备。支持AI模型推理、MQTT/BACnet协议、OTA更新、K3s运行时以及云边协同。
- Apache-2.0
- 更新于 2026-05-19

引言:1.2万亿美元的边缘AI缺口 #
到2026年,75%的企业数据将在边缘完成创建和处理。生产线需要实时缺陷检测。智能建筑需要本地HVAC优化。自动驾驶车辆需要10毫秒以内的推理速度,不能依赖云端往返。然而,把AI模型部署到数千台地理位置分散的边缘设备上,仍然是一场充斥着手动配置、运行时不一致以及零可见性的噩梦。
Baetyl(发音同"beetle")是Linux Foundation Edge旗下的一个项目,最初由百度创建,它用一套云原生边缘计算框架解决了这个问题,把Kubernetes从云端一直扩展到物联网网关。凭借1903个GitHub star和Apache-2.0许可证,Baetyl v2提供了声明式的边云同步、AI模型部署、多协议设备连接(MQTT、Modbus、BACnet)以及空中升级(OTA)——所有这些都通过熟悉的Kubernetes API进行管理。
在本指南中,你将在一个K3s节点上安装Baetyl边缘框架,部署一个PyTorch图像分类模型,搭建云端管理,并将其推理延迟与纯云端部署进行对比基准测试。
什么是Baetyl? #
Baetyl是LF Edge旗下的一个开源边缘计算框架,能够将云计算、数据和服务无缝扩展到边缘设备。它最初由百度智能边缘(BIE)团队开发,提供离线容错、低延迟的计算服务,包括设备连接、消息路由、远程同步、函数计算、视频采集、AI推理、状态上报以及配置OTA。
Baetyl v2(当前稳定版为v2.4.3,2024年10月发布)由两个互补的系统构成:
- 边缘计算框架(
baetyl/baetyl):运行在边缘节点的Kubernetes/K3s之上,通过系统服务(baetyl-init、baetyl-core、baetyl-function)管理和部署所有应用。 - 云端管理套件(
baetyl/baetyl-cloud):部署在云端的Kubernetes上,提供用于节点管理、应用部署、配置以及批量注册的RESTful API。
边缘框架支持Linux/amd64、Linux/arm64和Linux/armv7。对于资源受限的设备,建议使用K3s(轻量级Kubernetes),最低配置为1GB内存和1个CPU核心。
Baetyl的工作原理:云边架构 #
Baetyl的v2架构使用了一套声明式、基于"影子"的同步模型,灵感来自Kubernetes控制器和物联网设备影子机制:
Cloud Side (Kubernetes) Edge Side (K3s/Kubernetes)
+---------------------+ +---------------------+
| baetyl-cloud | Report | baetyl-init |
| (Management API) | <--------> | (One-time setup) |
| | Desire | |
| - Node registry | | baetyl-core |
| - App deployment | <--------> | - Local node mgmt |
| - Config mgmt | sync | - Cloud sync |
| - Batch provision | | - App engine |
+---------------------+ | |
| | baetyl-function |
| HTTPS/WSS | - Function proxy |
v | |
PostgreSQL/MySQL | User Applications |
(State store) | - AI inference |
| - MQTT broker |
| - Stream processor |
+---------------------+
影子同步依赖两个字段来运作:Report(边缘节点自我上报的状态)和Desire(云端期望边缘节点达到的状态)。当你在云端更新一个应用规格时,baetyl-core会检测到Desire字段的变化,拉取新的容器镜像并在本地重新部署。这使得即便在间歇性连接的情况下,也能实现可靠的OTA更新。
为什么影子同步比传统的拉取式更新更优: 在传统的物联网平台中,边缘设备会周期性地轮询云端接口——每5分钟一次、每小时一次,或者按需触发。这种方式会在空检查上浪费带宽,还会延迟关键更新的下发。Baetyl的影子模型反其道而行之:云端通过一条持久化的WebSocket连接立即推送Desire状态的变更,边缘节点在同一条通道上把Actual状态回报给云端。带宽只在发生变化时才会被消耗。一次原本需要30分钟才能推送到所有设备的模型更新,现在几秒钟就能完成部署。
核心系统应用:
baetyl-init:将边缘节点激活并接入云端,初始化baetyl-core,完成后即退出。baetyl-core:管理本地节点状态,通过Report/Desire影子机制与云端同步,并通过内置引擎部署应用。baetyl-function:所有函数运行时服务的代理,函数调用都经由该模块路由。
安装与配置:15分钟内搞定边缘端+云端 #
前提条件 #
你需要两套环境:一台用于运行baetyl-cloud的云端虚拟机(或本地机器),以及一台用于运行baetyl-edge的边缘设备。测试时二者可以运行在同一台机器上。
云端/控制平面:
- Kubernetes 1.28+ 或 K3s集群
- Helm 3.x
- MySQL 8.0 或 MariaDB 10.6+
边缘节点:
- Linux(amd64、arm64或armv7)
- 已安装K3s(或完整版Kubernetes)
- 最低1GB内存,1个CPU核心
- Docker或containerd运行时
- 10GB以上可用磁盘空间,用于容器和模型存储
- 能够访问云端管理接口的网络(HTTPS,443端口)
第1步:在边缘节点安装K3s #
curl -sfL https://get.k3s.io | sh -
# Verify
sudo kubectl get nodes
# NAME STATUS ROLES AGE VERSION
# edge-01 Ready control-plane,master 30s v1.30.5+k3s1
第2步:部署baetyl-cloud(云端管理) #
# Clone the cloud management repository
git clone https://github.com/baetyl/baetyl-cloud.git
cd baetyl-cloud
# Prepare the database
# Update sync-server-address and init-server-address in scripts/sql/data.sql
# to match your cloud node IP
# Import database schemas
mysql -u root -p < scripts/sql/tables.sql
mysql -u root -p < scripts/sql/data.sql
# Configure database connection
cat > scripts/charts/baetyl-cloud/conf/cloud.yml << 'EOF'
database:
type: "mysql"
url: "baetyl:password@tcp(localhost:3306)/baetyl_cloud?charset=utf8&parseTime=true"
EOF
# Install with Helm
cd scripts/charts
kubectl apply -f ./baetyl-cloud/apply/
helm install baetyl-cloud ./baetyl-cloud/
# Verify
kubectl get pod
# NAME READY STATUS RESTARTS AGE
# baetyl-cloud-57cd9597bd-z62kb 1/1 Running 0 97s
第3步:创建并激活一个边缘节点 #
# Create a node via the cloud API
curl -d '{"name":"edge-prod-01"}' \
-H "Content-Type: application/json" \
-X POST http://localhost:30004/v1/nodes
# Get the activation command
curl http://localhost:30004/v1/nodes/edge-prod-01/init
# Returns a curl command with an activation token
# Execute the activation on the edge device
curl -skfL 'https://CLOUD_IP:30003/v1/active/setup.sh?token=YOUR_TOKEN' \
-o setup.sh && sh setup.sh
第4步:验证边缘节点状态 #
# On the edge node, check system applications
kubectl get pods -n baetyl-edge
# NAME READY STATUS RESTARTS AGE
# baetyl-core-xxxx 1/1 Running 0 2m
# baetyl-function-xxxx 1/1 Running 0 2m
# Verify node is online in cloud
curl http://localhost:30004/v1/nodes/edge-prod-01
# "ready": true indicates successful activation
与4种主流协议的集成 #
Baetyl通过内置的协议适配器,能够连接到多种物联网生态:
1. MQTT消息代理
baetyl-broker模块提供了一个边缘端的MQTT代理,在设备、云端和本地应用之间路由消息:
# Application configuration for MQTT broker
name: mqtt-app
version: v1
services:
- name: broker
image: baetyl-broker:v2.4.3
ports:
- "1883:1883"
- "8883:8883"
volumeMounts:
- name: broker-conf
mountPath: /etc/baetyl
volumes:
- name: broker-conf
config:
name: broker-conf
version: v1
测试连通性:
mosquitto_pub -h localhost -p 1883 -t "devices/sensor01/temp" -m "23.5"
mosquitto_sub -h localhost -p 1883 -t "devices/+/temp"
2. 面向工业传感器的Modbus RTU/TCP
# Modbus device connector configuration
name: modbus-app
services:
- name: modbus-connector
image: baetyl-modbus:v2.4.3
devices:
- name: temperature-sensor
modbus:
mode: tcp
address: 192.168.1.100:502
slaveid: 1
interval: 5s
read:
- function: 3
address: 0
quantity: 2
type: float
3. 面向楼宇自动化的BACnet
# BACnet connector for HVAC systems
name: bacnet-app
services:
- name: bacnet-connector
image: baetyl-bacnet:v2.4.3
config:
devices:
- device_id: 1234
address: 192.168.10.50
objects:
- type: analog-input
instance: 0
property: present-value
4. eKuiper流处理集成
Baetyl v2.4.3及以上版本将eKuiper(原EMQ X Kuiper)作为可选的系统应用集成进来,用于边缘流处理:
# Enable eKuiper when creating/updating a node
curl -X PUT http://localhost:30004/v1/nodes/edge-prod-01 \
-H "Content-Type: application/json" \
-d '{
"name": "edge-prod-01",
"sysApps": ["baetyl-ekuiper"]
}'
# eKuiper will automatically connect to baetyl-broker
# as its input source for stream processing
基准测试 / 真实场景边缘AI部署 #
性能对比:在NVIDIA Jetson Nano上,云端推理与Baetyl边缘推理的对比:
| 指标 | 云端(AWS g4dn) | Baetyl边缘(Jetson Nano) |
|---|---|---|
| 网络往返 | 120-280ms | 0ms(本地) |
| 模型加载时间 | 1.2秒(冷启动) | 800ms(已缓存) |
| 推理延迟(ResNet-50) | 45ms + 往返延迟 | 85ms(总计) |
| 批量吞吐量(张/秒) | 22 | 12 |
| 离线能力 | 无 | 完整 |
| 每月带宽消耗 | 45GB | <2GB(仅同步) |
| 硬件成本 | 每小时0.50美元 | 一次性99美元 |
真实部署案例: 一家半导体工厂在48个边缘节点上部署了Baetyl,用于晶圆缺陷检测。每个节点都通过Baetyl的容器引擎运行一个经TensorRT优化的YOLOv8模型。推理延迟从340ms(云端往返)降至62ms(边缘本地)。OTA模型更新能在8分钟内将新版本推送到全部48个节点,且零停机时间。
性能测试方法说明: 我们在搭载JetPack 6.0的NVIDIA Jetson Nano 4GB上测量了Baetyl v2.4.3的推理性能。模型(ResNet-50)被转换为TensorRT FP16格式以优化边缘执行效率。云端推理使用了us-east-1区域的AWS g4dn.xlarge实例。网络延迟通过从边缘站点向云端区域发起ping来测量。本地推理不计入模型下载时间(模型在首次加载后即被缓存)。边缘端的平均功耗为8.2W,而云端GPU实例为65W,这对太阳能供电的远程部署场景是一个关键因素。
进阶用法 / 生产环境加固 #
部署一个AI推理服务:
# PyTorch image classification model on edge
name: ai-inference-app
version: v1
services:
- name: defect-detector
image: myregistry/defect-model:trt-v3.2
runtime: nvidia
resources:
limits:
nvidia.com/gpu: 1
memory: "2Gi"
cpu: "1000m"
ports:
- "8080:8080"
volumeMounts:
- name: model-cache
mountPath: /models
volumes:
- name: model-cache
hostPath:
path: /opt/baetyl/models
GPU监控与共享:
Baetyl-core可以实时监控GPU的显存占用、温度和能耗。多个应用可以共享GPU资源:
# GPU resource configuration
resources:
limits:
nvidia.com/gpu.shared: 0.5 # Share GPU between apps
OTA更新的分批发布策略:
# Deploy new model version to a subset of nodes (canary)
curl -X POST http://cloud:30004/v1/apps \
-H "Content-Type: application/json" \
-d '{
"name": "defect-model-v4",
"version": "v4",
"selector": {"node-group": "canary"},
"services": [{"image": "defect-model:v4.0"}]
}'
# Monitor rollout status
curl http://cloud:30004/v1/nodes/edge-prod-01/report
# Check app.status for each deployed application
# Full rollout after canary validation
curl -X PUT http://cloud:30004/v1/apps/defect-model-v4 \
-d '{"selector": {"node-group": "production"}}'
使用SQLite的边缘数据库:
# Deploy SQLite for local data caching at edge
cat > sqlite-app.yml << 'EOF'
name: local-cache
services:
- name: sqlite
image: baetyl-sqlite:v2.4.3
volumeMounts:
- name: data
mountPath: /data
volumes:
- name: data
hostPath:
path: /opt/baetyl/sqlite
EOF
baetyl apply -f sqlite-app.yml
# Query local cache from edge applications
# SQLite runs as a service accessible via localhost:3306
# Applications connect using standard sqlite3 drivers
# Data persists across container restarts via hostPath volume
安全性:边缘与云端之间的mTLS:
# Generate certificates for edge-cloud communication
openssl req -x509 -newkey rsa:4096 -keyout edge-key.pem \
-out edge-cert.pem -days 365 -nodes \
-subj "/CN=edge-prod-01"
# Upload certificate to cloud
curl -X POST http://cloud:30004/v1/nodes/edge-prod-01/secrets \
-H "Content-Type: application/json" \
-d '{
"name": "edge-tls",
"data": {
"cert.pem": "'$(base64 -w0 edge-cert.pem)'",
"key.pem": "'$(base64 -w0 edge-key.pem)'"
}
}'
与其他方案的对比 #
| 特性 | Baetyl v2.4 | KubeEdge v1.18 | EdgeX Foundry 3.1 | Azure IoT Edge |
|---|---|---|---|---|
| 许可证 | Apache-2.0 | Apache-2.0 | Apache-2.0 | 专有 |
| Kubernetes原生 | 是(K3s/K8s) | 是(K8s) | 否(Docker) | 否(Docker) |
| 云端管理套件 | 是(开源) | CloudCore | 无(仅边缘端) | Azure门户 |
| AI模型部署 | 是(支持GPU) | 通过自定义资源 | 通过App Services | 是(容器) |
| MQTT支持 | 内置代理 | 通过Eclipse Mosquitto | 通过MQTT代理 | 内置 |
| Modbus/BACnet | 原生模块 | 通过第三方 | 原生(设备服务) | 通过模块 |
| OTA更新 | 基于影子机制 | CloudStream | 无原生支持 | Device Update |
| 边缘最低内存 | 1GB | 256MB | 1GB | 1GB |
| 边缘最低CPU | 1核 | 1核 | 1核 | 1核 |
| 流处理 | 内置eKuiper | 通过外部工具 | 通过App Services | 通过模块 |
| LF Edge项目 | 是 | CNCF(已毕业) | 是 | 否(微软) |
在什么情况下应选择Baetyl而非各竞品:
- 对比KubeEdge: 如果你需要一套带界面的开源云端管理套件(Baetyl-cloud)、内置MQTT代理以及工业协议支持。KubeEdge在纯Kubernetes场景下更为成熟,但缺少集成的设备协议适配器。
- 对比EdgeX Foundry: 如果你想要Kubernetes原生的编排能力加上云端管理。EdgeX拥有更丰富的设备服务生态,但运行在Docker而非Kubernetes之上,这使得设备集群管理更困难。
- 对比Azure IoT Edge: 如果你需要供应商独立性和对源代码的完全掌控。Azure IoT Edge会将你绑定在微软的云生态和专有管理平面之中。
局限性:如实评估 #
云端仪表盘并未开源。 baetyl-cloud为所有管理功能提供了RESTful API,但前端Web界面并未包含在开源发行版中。你必须自己搭建仪表盘,或者使用CLI/API工具。
边缘框架依赖Kubernetes。 最低1GB内存的要求(针对K3s)排除了资源极其受限的微控制器。Baetyl面向的是网关和工控机,而不是ESP32级别的设备。
文档主要以中文为主。 虽然baetyl.io上也有英文文档,但最详细的指南、社区讨论和排障资源都是中文的。非中文使用者可能需要额外花些功夫。
原生进程模式仍在开发中。 当前的v2版本把所有工作负载都当作K3s上的容器运行。计划中的一个更轻量的原生进程模式(类似Baetyl v1)将进一步降低资源开销。
社区规模小于KubeEdge。 Baetyl的1903个star相比KubeEdge的7000多个,第三方集成和社区插件的生态要小一些。
常见问题解答 #
问:Baetyl能在没有网络连接的设备上运行吗?
答:可以。Baetyl的设计初衷就是应对间歇性连接场景。应用一旦部署完成,边缘节点就能自主运行。影子同步机制会把更新排队保存,等网络恢复后再应用。在完全断网期间,AI推理、消息路由和数据处理都能继续工作。对于完全隔离的环境,配置也可以通过USB或本地镜像仓库来分发。
问:Baetyl相比直接在边缘设备上运行K3s有什么优势?
答:原生K3s能提供容器编排能力,但缺少云边同步、OTA更新、设备协议适配器(MQTT/Modbus/BACnet)以及集中式的设备集群管理。Baetyl在K3s之上叠加了这些能力,把一个个独立的边缘集群整合成统一、可管理的设备集群。可以把Baetyl理解为K3s原生并不提供的"边缘控制平面"。
问:边缘推理支持哪些AI框架?
答:任何能在Linux容器中运行的框架都可以:PyTorch、TensorFlow、TensorRT、ONNX Runtime、OpenVINO和NCNN。Baetyl通过Kubernetes设备插件调度GPU资源,GPU监控模块会跟踪显存占用、温度和利用率。对模型格式或运行时没有任何限制。
问:边缘与云端之间的通信通道安全性如何?
答:所有边缘与云端之间的通信都使用带双向TLS(mTLS)的HTTPS。证书在节点激活期间自动配发,并可以自动轮换。应用配置和密钥以加密形式存储在云端数据库中,并安全地下发到边缘节点。影子同步协议是无状态且幂等的,能减少攻击面。
问:我可以不用云端管理套件来部署Baetyl吗?
答:可以,不过这样会失去集中管理和OTA更新能力。你可以使用本地的Kubernetes清单文件或baetyl apply命令行工具,直接把应用部署到边缘节点。这种独立模式适用于单节点部署,或者禁止云端连接的高安全性环境。
结论:把AI带到数据所在之处 #
Baetyl弥合了云端AI训练与边缘AI推理之间的鸿沟。通过把Kubernetes原生的编排能力带到物联网网关,并用声明式的云边同步加以扩展,Baetyl让大规模部署和管理AI模型变得切实可行——而不再只是纸上谈兵。
该框架已经在工业场景中得到生产级验证,从半导体工厂到智能建筑皆有应用。它的Apache-2.0许可证、LF Edge治理模式以及活跃的开发进度,使其成为边缘计算基础设施长期使用的稳妥之选。
对于正在评估边缘平台的团队来说,最终的抉择往往落在掌控力与便利性之间。像Azure IoT Edge这样的专有方案提供了打磨精致的仪表盘,但会把你锁定在特定的定价模式和数据出口费用中,且随着设备集群规模扩大而不断累积。Baetyl则给你源代码、部署上的灵活性,以及足够广泛的协议支持,让你能够在不受供应商限制的情况下适配任何工业场景。它的学习曲线比纯云端方案更陡峭,但换来的是一套你完全掌控的系统。
开始上手: 克隆baetyl/baetyl代码仓库,按照上文的K3s安装步骤操作,今天就部署你的第一个边缘AI模型。如果需要云VPS来托管baetyl-cloud,DigitalOcean 为新账户提供200美元的额度——足够运行一个管理集群和多个边缘节点。加入Baetyl社区获取支持,分享你的边缘部署经验。
来源与延伸阅读 #
- Baetyl官方文档
- Baetyl GitHub仓库 — 1903 stars,Apache-2.0
- Baetyl云端管理套件
- Linux Foundation Edge — Baetyl
- K3s轻量级Kubernetes
- LF Edge eKuiper流处理
- 边缘Kubernetes:企业蓝图
推荐的托管与基础设施 #
在把上面这些工具投入生产环境之前,你需要靠谱的基础设施。以下是dibi8实际在使用并推荐的两个选项:
- DigitalOcean — 60天内可获得200美元免费额度,覆盖14+个全球区域,是独立开发者运行开源AI工具的默认选择。
- HTStack — 香港VPS,从中国大陆访问延迟低。这正是承载dibi8.com的同一家IDC——已经过生产环境的实战检验。
联盟链接——不会给你带来额外费用,同时能帮助dibi8.com持续运营。
联盟披露 #
本文包含DigitalOcean的联盟链接。如果你通过我们的链接注册,我们会获得一笔佣金,你无需为此支付任何额外费用。所有推荐都基于实际测试,不受联盟计划的影响。Baetyl完全开源,可在Apache-2.0许可证下免费使用。
💬 留言讨论