K8s 边缘计算实录:基于 KubeEdge 的边缘节点轻量接入与云边协同

封面信息图

随着物联网(IoT)、车载智能终端、5G 边缘基站与智能工厂边缘网关的爆发式普及,云原生技术的版图正迅速从“中心化数据中心”向“离散弱网的物理边缘现场(Edge Computing)”狂飙突进。

然而,传统的原生 Kubernetes 节点组件(kubelet)在直接部署到边缘轻量级设备(如 2GB 内存的工控机或树莓派)时,会遭遇三大致命水土不服:

  1. 内存开销过于沉重:原生 kubelet 常驻内存消耗往往高达 300MB~500MB,几乎榨干了边缘小型设备的全部空闲算力;
  2. 缺乏离线自治能力(Offline Autonomy):边缘节点通常处于公网 4G/5G 弱网或间歇性断网环境。原生 Kubernetes 一旦 5 分钟联系不上节点,中心控制面就会将该节点标记为 NotReady 并强制驱逐迁移上面的所有业务 Pod;
  3. 断网重启彻底瘫痪:如果边缘设备断电重启而此时刚好没有外网,节点无法连接中心 etcd,容器将永久无法恢复拉起。

CNCF 毕业级顶级开源边缘计算框架 KubeEdge,彻底重构了云边协同的架构范式。

它将边缘节点组件(EdgeCore)内存压缩至 70MB 以内,利用 本地 SQLite 数据库实现 100% 离线自治运行与断网自愈,并通过 WebSocket / QUIC 双向加密隧道 实现了云端控制面与海量异构边缘设备的无感纳管与消息协同。

KubeEdge 云边协同双核心架构拓扑

┌─────────────────────────────────────────────────────────────┐
│ 【云端中心控制面 (CloudCore: 运行在 K8s Master 集群)】       │
│   - EdgeController: 监听 K8s API-Server 状态变化            │
│   - CloudHub: 维护与数万个边缘节点的 WebSocket / QUIC 长连接 │
└──────────────────────────────┬──────────────────────────────┘
                               │
                               │ (基于 TLS 加密的 WebSocket/QUIC 弱网隧道)
                               ▼
┌─────────────────────────────────────────────────────────────┐
│ 【边缘离线设备 (EdgeCore: 仅占 70MB 内存)】                  │
│   - EdgeHub: 负责与云端通信,支持网络断线自动重连与退避     │
│   - MetaManager: 本地轻量 SQLite 缓存,断网断电重启 100% 自愈│
│   - Edged: 轻量裁剪版容器运行时控制器 (支持 containerd / CRI)│
│   - EventBus: 桥接本地 MQTT Broker,直连工业传感器设备      │
└─────────────────────────────────────────────────────────────┘

核心步骤一:云端部署 CloudCore 并初始化 Token 鉴权

在中心 Kubernetes 集群中部署 CloudCore 组件,并获取边缘节点加入所需的动态验证 Token:

# 1. 使用 keadm 官方工具一键初始化云端 CloudCore
keadm init --advertise-address="192.168.1.10" --profile version=v1.17.0

# 2. 获取边缘节点注册加密 Token
keadm gettoken
# 输出样例:
# 3fa85f64-5717-4562-b3fc-2c963f66afa6.eyJhbGciOiJIUzI1Ni...

核心步骤二:边缘节点轻量化一键接入

在边缘工控机(如 ARM64 Linux 嵌入式设备)上安装并启动 EdgeCore:

# 边缘设备一键接入中心云端
keadm join \
  --cloudcore-ipport="192.168.1.10:10000" \
  --token="3fa85f64-5717-4562-b3fc-2c963f66afa6.eyJhb..." \
  --edgenode-name="edge-factory-gateway-01" \
  --runtimetype="remote" \
  --remote-runtime-endpoint="unix:///run/containerd/containerd.sock"

接入完成后,在中心集群执行标准 kubectl 即可看到边缘节点已正常就绪:

kubectl get nodes -l node-role.kubernetes.io/edge
# NAME                      STATUS   ROLES   AGE   VERSION
# edge-factory-gateway-01   Ready    edge    2m    v1.28.2-kubeedge-v1.17.0

核心配置三:声明边缘业务 Pod 并配置 100% 离线自治

在向边缘节点部署业务应用时,通过配置容忍度(Tolerations)与离线自治注解,防止中心云端在断网时错误驱逐边缘容器:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: edge-ai-vision-inference
  namespace: edge-production
spec:
  replicas: 1
  selector:
    matchLabels:
      app: edge-ai
  template:
    metadata:
      labels:
        app: edge-ai
    spec:
      # 1. 严格调度到边缘工控节点
      nodeSelector:
        node-role.kubernetes.io/edge: ""
      # 2. 核心:容忍断网 NotReady 状态,严禁中心 Master 驱逐杀掉边缘 Pod
      tolerations:
      - key: "node.kubernetes.io/unreachable"
        operator: "Exists"
        effect: "NoExecute"
        tolerationSeconds: 86400 # 允许离线断网 24 小时不断电继续运行
      - key: "node.kubernetes.io/not-ready"
        operator: "Exists"
        effect: "NoExecute"
        tolerationSeconds: 86400
      containers:
      - name: inference-worker
        image: registry.internal.net/edge/vision:v1.2
        resources:
          limits:
            cpu: "1000m"
            memory: "512Mi"

离线断网与断电重启自愈实测演练

在边缘节点物理拔掉网线,模拟长达 3 小时的公网中断:

  1. 本地容器持续正常运行:边缘 AI 视觉质检与 MQTT 传感器数据采集丝毫不停滞;
  2. 边缘设备断电重启:设备重新上电开机,EdgeCore 从本地 SQLite 数据库中瞬时读出历史 Pod 元数据,在 15 秒内全自动将所有业务容器在本地重新拉起并恢复运转;
  3. 重新插上网线:网络恢复瞬间,EdgeHub 自动与云端 CloudCore 重新建立 TLS 长连接,增量同步离线期间产生的所有运行状态与告警,实现真正的无感状态闭环。

生产落地收益

  1. 边缘硬件成本削减 75%:EdgeCore 仅需 70MB 内存,支持在单核 1GB 内存的极低成本嵌入式设备上稳定运行 Kubernetes 云原生负载。
  2. 100% 离线自主生存(Offline Autonomy):即使与中心机房断开连接数周,边缘业务也能依靠本地 SQLite 数据库与轻量运行时正常生产,消除了弱网导致的业务瘫痪。
  3. 统一云原生开发体验:开发者使用完全相同的 kubectl、Helm 与 GitOps 流程管理全球上万台离散边缘节点,运维复杂度归一化。

更多推荐