KubeEdge: Kubernetes at the IoT Edge
CloudCore and EdgeCore, edge autonomy through local metadata, a ~70 MB footprint, and device twins — how KubeEdge extends the Kubernetes API to constrained devices.
Published on • November 14, 2026
AI Assistant

Vanilla Kubernetes assumes the node can always reach the API server. KubeEdge — a CNCF graduated project, Apache 2.0 — is built for the opposite condition: nodes behind NAT in private subnets, links that drop, and hardware with tens of megabytes of headroom.
What KubeEdge actually is
KubeEdge’s own definition: “an open source system for extending native containerized application orchestration capabilities to hosts at Edge,” built on Kubernetes and providing infrastructure support for network, application deployment, and metadata synchronization between cloud and edge.
Two properties separate it from “Kubernetes with a small node agent”:
- Kubernetes-native API at edge — an autonomic kube-API endpoint runs locally on the edge node, so third-party plugins and applications that depend on Kubernetes APIs keep working even when the cloud is unreachable.
- Seamless cloud-edge coordination — bidirectional communication that works with edge nodes in private subnets, carrying both metadata and data. The edge does not need an inbound route to the cloud.
What installs where
KubeEdge splits into two daemons. This is the whole mental model:
| Side | Component | Role |
|---|---|---|
| Cloud | CloudCore | Talks to the Kubernetes API server, persists edge metadata, pushes desired state to edges |
| Edge | EdgeCore | Runs on each edge host; talks only to CloudCore, executes the kubelet-equivalent duties |
Inside EdgeCore sit the well-known modules — Edged (the kubelet-lite runtime manager), MetaManager (metadata persistence and the local API), DeviceTwin (device state), and EventBus (MQTT messaging). You do not configure them individually at first, but knowing they exist explains the behavior below.
A rough install shape
The exact manifests live in the KubeEdge docs, but the flow is two halves:
# 1. Cloud side — inside your existing Kubernetes cluster
keadm install cloud --kubeconfig ~/.kube/config
# 2. Edge side — on the constrained device, joining the same cluster
keadm join <cloud-ip>:10004 \
--token=$TOKEN \
--kubeedge-version=v1.23.0
keadm is KubeEdge’s kubeadm analog: it generates the token on the cloud side and wires the edge daemon up to CloudCore. No SSH into the edge is required after the initial join, and the connection is outbound-only from the edge — which is what makes private-subnet sites work.
The autonomy story
This is the feature people adopt KubeEdge for. Three mechanisms combine:
- Metadata persisted per node. Workload metadata is stored locally on the edge, so during recovery no list-watch against the cloud API server is needed. The node comes back ready from local state instead of re-reconciling hundreds of objects over a link that just failed.
- Autonomous operation while disconnected. Pods keep running; the local kube-API endpoint keeps serving in-cluster consumers.
- Bidirectional sync on reconnect. When the link returns, state converges both ways — desired state flows down, reported status flows up.
The practical result is measured in recovery time: a datacenter node reboot waits on etcd, DNS, and a full resync. A KubeEdge node restarts its workloads from local metadata in seconds, with no dependency on the cloud being up.
Worth stating plainly: autonomy is per node, not per cluster. Each edge host persists its own metadata and serves its own local API endpoint, so a site with five gateways degrades one gateway at a time. That granularity is why KubeEdge fits fleets of small, independent devices better than a single large edge box that becomes its own bottleneck.
Resource footprint and architectures
KubeEdge quotes a memory footprint down to ~70 MB for the edge side. That number is the difference between “runs on a gateway with 256 MB RAM” and “requires a small PC.” Combined with native support for x86, ARMv7, and ARMv8, it covers the heterogeneous hardware that IoT fleets actually contain — armv7 gateways from 2019, arm64 boards, and x86 industrial PCs side by side.
Recent activity reinforces the breadth: KubeEdge v1.23 shipped in March 2026, and there is a working RISC-V deployment on the VisionFive2 board, which matters for embedded teams betting on that architecture.
Device communication: twins and mappers
Kubernetes natively knows pods, not PLCs and sensors. KubeEdge adds a device twin model:
- A Device CRD declares the device and its desired properties in the Kubernetes API.
- DeviceTwin maintains both desired and reported state per device.
- A mapper — a small adapter process — bridges to the actual protocol (Modbus, OPC-UA, MQTT, BLE) on the hardware.
The application side stays boring, which is the point: a normal HTTP or MQTT container reads device state from the local API or the device twin, and the same containerized workload runs in the cloud for testing. Control flows back down through the twin when the mapper reports the change landed.
The cost is honest: every protocol you support needs a mapper, and a buggy mapper desynchronizes desired from reported state in ways that look like application bugs. Teams should budget integration time per protocol, not per cluster.
Big deployments are not theoretical — China Mobile, China Unicom, China Telecom, Huawei, Inspur, and Orange are among the listed users, which is a reasonable signal that the project has been through production-scale edge fleets.
When KubeEdge is the right call
✅ Good fits:
- IoT/industrial fleets where devices are first-class resources, not just pods.
- Sites in private subnets with outbound-only connectivity.
- Sites with unreliable links where eviction on heartbeat loss would be unacceptable.
- Constrained or heterogeneous hardware (armv7 gateways, x86 IPCs).
❌ Look elsewhere when:
- You only need to run ordinary pods at edge sites — K3s alone is lighter to operate.
- Your team will not maintain mappers; device integration is real per-protocol work.
- You need a fleet-management story across hundreds of clusters — that is a separate layer (see Fleet/GitOps tooling) on top.