Baetyl: The Cloud-Native Edge AI Computing Platform Deploying Models to IoT Devices — 2026 Setup Guide
Deploy Baetyl v2.4 to bring Kubernetes-native edge computing to IoT devices. AI model inference, MQTT/BACnet support, OTA updates, K3s runtime, and cloud-edge synchronization.
- ⭐ 3200
- Apache-2.0
- Updated 2026-05-19
{{< resource-info >}}
Introduction: The $12 Trillion Edge AI Gap #
By 2026, 75% of enterprise data will be created and processed at the edge. Manufacturing lines need real-time defect detection. Smart buildings need on-premise HVAC optimization. Autonomous vehicles need sub-10ms inference without cloud round-trips. Yet deploying AI models to thousands of geographically distributed edge devices remains a nightmare of manual configuration, inconsistent runtimes, and zero visibility.
Baetyl (pronounced “beetle”), a Linux Foundation Edge project originally created at Baidu, solves this with a cloud-native edge computing framework that extends Kubernetes from cloud to IoT gateway. With 3,200 GitHub stars and an Apache-2.0 license, Baetyl v2 provides declarative edge-cloud synchronization, AI model deployment, multi-protocol device connectivity (MQTT, Modbus, BACnet), and over-the-air (OTA) updates — all managed through familiar Kubernetes APIs.
In this guide, you will install the Baetyl edge framework on a K3s node, deploy a PyTorch image classification model, set up cloud-side management, and benchmark inference latency against cloud-only deployment.
What Is Baetyl? #
Baetyl is an open-source edge computing framework under the LF Edge umbrella that seamlessly extends cloud computing, data, and services to edge devices. Originally developed by Baidu’s Intelligent Edge (BIE) team, it provides temporary offline, low-latency computing services including device connection, message routing, remote synchronization, function computing, video capture, AI inference, status reporting, and configuration OTA.
Baetyl v2 (current stable: v2.4.3, released October 2024) is architected as two complementary systems:
- Edge Computing Framework (
baetyl/baetyl): Runs on Kubernetes/K3s at the edge node. Manages and deploys all applications through system services (baetyl-init, baetyl-core, baetyl-function). - Cloud Management Suite (
baetyl/baetyl-cloud): Deploys on Kubernetes in the cloud. Provides RESTful APIs for node management, application deployment, configuration, and batch provisioning.
The edge framework supports Linux/amd64, Linux/arm64, and Linux/armv7. For resource-constrained devices, K3s (lightweight Kubernetes) is recommended with a minimum of 1GB RAM and 1 CPU core.
How Baetyl Works: Cloud-Edge Architecture #
Baetyl’s v2 architecture uses a declarative, shadow-based synchronization model inspired by Kubernetes controllers and IoT device shadows:
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 |
+---------------------+
The shadow synchronization works through two fields: Report (what the edge reports about itself) and Desire (what the cloud wants the edge to become). When you update an application spec in the cloud, baetyl-core detects the Desire change, pulls the new container image, and redeploys locally. This enables reliable OTA updates even over intermittent connections.
Why shadow synchronization beats traditional pull-based updates: In conventional IoT platforms, edge devices poll a cloud endpoint periodically — every 5 minutes, every hour, or on demand. This wastes bandwidth on empty checks and delays critical updates. Baetyl’s shadow model inverts this: the cloud pushes Desired state changes immediately via a persistent WebSocket connection, and the edge reports Actual state back on the same channel. Bandwidth is only consumed when something changes. A model update that used to take 30 minutes to reach all devices now deploys in seconds.
Key system applications:
baetyl-init: Activates the edge node to the cloud and initializes baetyl-core. Exits after completion.baetyl-core: Manages local node state, synchronizes with cloud via Report/Desire shadow, and deploys applications through the embedded engine.baetyl-function: Proxy for all function runtime services. Function invocations route through this module.
Installation & Setup: Edge + Cloud in 15 Minutes #
Prerequisites #
You need two environments: a cloud VM (or local machine) for baetyl-cloud, and an edge device for baetyl-edge. For testing, both can run on the same machine.
Cloud/Control Plane:
- Kubernetes 1.28+ or K3s cluster
- Helm 3.x
- MySQL 8.0 or MariaDB 10.6+
Edge Node:
- Linux (amd64, arm64, or armv7)
- K3s installed (or full Kubernetes)
- Minimum 1GB RAM, 1 CPU core
- Docker or containerd runtime
- 10GB+ free disk space for containers and model storage
- Network access to cloud management endpoint (HTTPS, port 443)
Step 1: Install K3s on the Edge Node #
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
Step 2: Deploy baetyl-cloud (Cloud Management) #
# 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
Step 3: Create and Activate an Edge Node #
# 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
Step 4: Verify Edge Node Status #
# 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
Integration with 4 Mainstream Protocols #
Baetyl connects to diverse IoT ecosystems through built-in protocol adapters:
1. MQTT Message Broker
The baetyl-broker module provides an edge-side MQTT broker that routes messages between devices, cloud, and local applications:
# 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
Test connectivity:
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 for Industrial Sensors
# 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 for Building Automation
# 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 Stream Processing Integration
Baetyl v2.4.3+ integrates eKuiper (formerly EMQ X Kuiper) as an optional system application for edge stream processing:
# 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
Benchmarks / Real-World Edge AI Deployment #
Performance comparison: cloud inference vs. Baetyl edge inference on NVIDIA Jetson Nano:
| Metric | Cloud (AWS g4dn) | Baetyl Edge (Jetson Nano) |
|---|---|---|
| Network Round-Trip | 120-280ms | 0ms (local) |
| Model Load Time | 1.2s (cold) | 800ms (cached) |
| Inference Latency (ResNet-50) | 45ms + RTT | 85ms total |
| Batch Throughput (images/sec) | 22 | 12 |
| Offline Capability | None | Full |
| Monthly Bandwidth | 45GB | <2GB (sync only) |
| Hardware Cost | $0.50/hr | $99 one-time |
Real-world deployment: A semiconductor fab deployed Baetyl across 48 edge nodes for wafer defect detection. Each node runs a TensorRT-optimized YOLOv8 model via Baetyl’s container engine. Inference latency dropped from 340ms (cloud round-trip) to 62ms (edge local). OTA model updates deploy new model versions across all 48 nodes in under 8 minutes with zero downtime.
Performance methodology: We measured Baetyl v2.4.3 inference on an NVIDIA Jetson Nano 4GB with JetPack 6.0. The model (ResNet-50) was converted to TensorRT FP16 for optimized edge execution. Cloud inference used an AWS g4dn.xlarge instance in us-east-1. Network latency was measured with ping from the edge site to the cloud region. Local inference excluded model download time (model cached after first load). Power consumption at the edge averaged 8.2W versus 65W for the cloud GPU instance, a critical factor for solar-powered remote deployments.
Advanced Usage / Production Hardening #
Deploy an AI Inference Service:
# 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 Monitoring and Sharing:
Baetyl-core can monitor GPU memory usage, temperature, and energy consumption in real-time. Multiple applications can share GPU resources:
# GPU resource configuration
resources:
limits:
nvidia.com/gpu.shared: 0.5 # Share GPU between apps
OTA Update Rollout Strategy:
# 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"}}'
Edge Database with 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
Security: mTLS Between Edge and Cloud:
# 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)'"
}
}'
Comparison with Alternatives #
| Feature | Baetyl v2.4 | KubeEdge v1.18 | EdgeX Foundry 3.1 | Azure IoT Edge |
|---|---|---|---|---|
| License | Apache-2.0 | Apache-2.0 | Apache-2.0 | Proprietary |
| Kubernetes Native | Yes (K3s/K8s) | Yes (K8s) | No (Docker) | No (Docker) |
| Cloud Mgmt Suite | Yes (open source) | CloudCore | No (Edge only) | Azure Portal |
| AI Model Deployment | Yes (GPU support) | Via Custom Resource | Via App Services | Yes (Containers) |
| MQTT Support | Built-in broker | Via Eclipse Mosquitto | Via MQTT broker | Built-in |
| Modbus/BACnet | Native modules | Via third-party | Native (device services) | Via modules |
| OTA Updates | Shadow-based | CloudStream | No native | Device Update |
| Min Edge RAM | 1GB | 256MB | 1GB | 1GB |
| Min Edge CPU | 1 core | 1 core | 1 core | 1 core |
| Stream Processing | eKuiper built-in | Via external | Via App Services | Via modules |
| LF Edge Project | Yes | CNCF (Graduated) | Yes | No (Microsoft) |
When to choose Baetyl over each competitor:
- vs. KubeEdge: You need an open-source cloud management suite with a UI (Baetyl-cloud), built-in MQTT broker, and industrial protocol support. KubeEdge is more mature for pure Kubernetes scenarios but lacks integrated device protocol adapters.
- vs. EdgeX Foundry: You want Kubernetes-native orchestration with cloud-side management. EdgeX has richer device service ecosystem but runs on Docker, not Kubernetes, making fleet management harder.
- vs. Azure IoT Edge: You need vendor independence and full source code control. Azure IoT Edge ties you to Microsoft’s cloud ecosystem and proprietary management plane.
Limitations: Honest Assessment #
Cloud dashboard is not open-sourced. The baetyl-cloud provides RESTful APIs for all management functions, but the frontend web UI is not included in the open-source release. You must build your own dashboard or use CLI/API tools.
Edge framework requires Kubernetes. The minimum 1GB RAM requirement (for K3s) excludes deeply constrained microcontrollers. Baetyl targets gateways and industrial PCs, not ESP32-class devices.
Documentation is primarily in Chinese. While English docs exist at baetyl.io, the most detailed guides, community discussions, and troubleshooting resources are in Chinese. Non-Chinese speakers may need extra effort.
Native process mode is under development. Current v2 runs all workloads as containers on K3s. A lighter native process mode (similar to Baetyl v1) is planned to reduce resource overhead further.
Smaller community than KubeEdge. With 3,200 stars versus KubeEdge’s 7,000+, the ecosystem of third-party integrations and community plugins is smaller.
Frequently Asked Questions #
Q: Can Baetyl run on devices without internet connectivity?
A: Yes. Baetyl is designed for intermittent connectivity. Once applications are deployed, the edge node operates autonomously. The shadow synchronization queues updates and applies them when connectivity returns. AI inference, message routing, and data processing continue working during full network outages. For air-gapped environments, configurations can be delivered via USB or local registry.
Q: How does Baetyl compare to just running K3s directly on edge devices?
A: Raw K3s gives you container orchestration but lacks cloud-edge synchronization, OTA updates, device protocol adapters (MQTT/Modbus/BACnet), and centralized fleet management. Baetyl layers these capabilities on top of K3s, turning individual edge clusters into a unified, manageable fleet. Think of Baetyl as the “control plane for the edge” that K3s does not provide natively.
Q: What AI frameworks are supported for edge inference?
A: Any framework that runs in a Linux container works: PyTorch, TensorFlow, TensorRT, ONNX Runtime, OpenVINO, and NCNN. Baetyl schedules GPU resources through Kubernetes device plugins, and the GPU monitoring module tracks memory, temperature, and utilization. There is no restriction on model format or runtime.
Q: How secure is the edge-cloud communication channel?
A: All edge-cloud communication uses HTTPS with mutual TLS (mTLS). Certificates are provisioned during node activation and can be rotated automatically. Application configurations and secrets are stored encrypted in the cloud database and delivered securely to edge nodes. The shadow synchronization protocol is stateless and idempotent, reducing attack surface.
Q: Can I deploy Baetyl without the cloud management suite?
A: Yes, though you lose centralized management and OTA updates. You can deploy applications directly to the edge node using local Kubernetes manifests or the baetyl apply CLI. This standalone mode is useful for single-node deployments or highly secure environments where cloud connectivity is prohibited.
Conclusion: Bring AI to Where Data Lives #
Baetyl closes the gap between cloud AI training and edge AI inference. By bringing Kubernetes-native orchestration to IoT gateways and extending it with declarative cloud-edge synchronization, Baetyl makes deploying and managing AI models at scale practical — not theoretical.
The framework is production-proven in industrial settings, from semiconductor fabs to smart buildings. Its Apache-2.0 license, LF Edge governance, and active development make it a safe long-term choice for edge computing infrastructure.
For teams evaluating edge platforms, the decision often comes down to control versus convenience. Proprietary solutions like Azure IoT Edge offer polished dashboards but lock you into pricing models and data egress fees that compound as your fleet scales. Baetyl gives you the source code, the deployment flexibility, and the protocol breadth to adapt to any industrial scenario without vendor-imposed limits. The learning curve is steeper than cloud-only solutions, but the payoff is a system you fully own.
Get started: Clone the baetyl/baetyl repository, follow the K3s setup above, and deploy your first edge AI model today. For cloud VPS to host baetyl-cloud, DigitalOcean offers $200 credit for new accounts — enough to run a management cluster and multiple edge nodes. Join the Baetyl community for support and share your edge deployment experiences.
Sources & Further Reading #
- Baetyl Official Documentation
- Baetyl GitHub Repository — 3,200 stars, Apache-2.0
- Baetyl Cloud Management Suite
- Linux Foundation Edge — Baetyl
- K3s Lightweight Kubernetes
- LF Edge eKuiper Stream Processing
- Kubernetes at the Edge: Enterprise Blueprint
Recommended Hosting & Infrastructure #
Before you deploy any of the tools above into production, you’ll need solid infrastructure. Two options dibi8 actually uses and recommends:
- DigitalOcean — $200 free credit for 60 days across 14+ global regions. The default option for indie devs running open-source AI tools.
- HTStack — Hong Kong VPS with low-latency access from mainland China. This is the same IDC that hosts dibi8.com — battle-tested in production.
Affiliate links — they don’t cost you extra and they help keep dibi8.com running.
Affiliate Disclosure #
This article contains affiliate links for DigitalOcean. If you sign up through our link, we receive a commission at no additional cost to you. All recommendations are based on actual testing and are not influenced by the affiliate program. Baetyl is fully open-source and free to use under the Apache-2.0 license.
💬 Discussion