云原生边缘计算:KubeEdge
介绍
KubeEdge是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机;
基于kubernetes构建,并为网络应用程序提供基础架构支持;
云和边缘之间的部署和元数据同步;
KubeEdge使用Apache 2.0许可,并且绝对可以免费用于个人或商业用途;
KubeEdge的目标是创建一个开放平台,使能边缘计算,将容器化应用编排功能扩展到边缘的节点和设备,后者基于kubernetes构建,并为云和边缘之间的网络,应用部署和元数据同步提供基础架构支持;
Kubernetes的边缘改造
存在的问题
ARM的低功耗和多核的特点使得其在IoT/Edge领域的应用非常广泛,然而大部分的Kubernetes发行版并不支持ARM架构;
很多设备边缘的资源规格有限,特别是CPU处理能力较弱,因此无法部署完整的Kubernetes;
Kubernetes非常依赖list/watch机制,不支持离线运行,而边缘节点的离线又是常态,例如:设备休眠重启;
特殊的网络协议和拓扑要求。设备接入协议往往非TCP/IP协议,例如,工业物联网的Modbus和OPC UA,消费物联网的Bluetooth和ZigBee等;
设备多租;
KubeEdge重点要解决的问题
云边协同
资源异构
大规模
轻量化
一致的设备管理和接入体验
架构
新架构
老架构对比
Cloud
KubeEdge的云端进程包含2个组件:
cloudhub:接收edgehub同步到云端的信息;
edgecontroller:控制Kubernetes API Server与边缘的节点、应用和配置的状态同步;实现Pod,Volume,Node等Kubernetes资源对象的生命周期管理;
Edge
KubeEdge的边缘侧包含5个组件:
edged:轻量化Kubelet,配合云端实现Pod,Volume,Node等Kubernetes资源对象的生命周期管理;
edgehub:通信接口模块;多路复用的消息通道,提供可靠和高效的云边信息同步;
metamanager:管理边缘节点的元数据;负责本地元数据的持久化,是边缘节点自治能力的关键;
devicetwin:用于抽象物理设备并在云端生成一个设备状态的映射;处理设备状态并将其同步到云;
eventbus:使用MQTT处理内部边缘通信;订阅来自于MQTT Broker的设备数据;
流程
节点管理
设备/应用管理
云边协同
边缘自治
设备管理
EdgeMesh
项目地址
https://github.com/kubeedge/kubeedge
RoadMap
2018年12月:v0.1
基本的边缘功能,可以管理边缘应用程序以及节点、pod、配置等的Kubernetes API
A lightweight application engine running on edge node for managing user’s application and monitoring node health.
Supports Kubernetes API primitives, e.g. Node, Pod, Configmap, Secrets etc.
Device twin and MQTT protocol for IoT devices talking to Edge node
Local self-government via HTTP restful interfaces.
Integrated with Huawei Cloud IEF service for node, device and application status updates.
Edge node autonomy when its getting offline and recover post reconnection to Cloud.
2019年3月5日:v0.2
提供了云核心模块,并支持端到端的开源边缘计算解决方案。云核心模块可以署到从任何云供应商或本地部的任何计算节点
Edge-controller which connects to Kubernetes api-server and sync node/pod status between edge and kubernetes api-server.
Cloudhub which is a websocket server in cloud part of kubeedge.
Internal MQTT mode in which MQTT broker is started with edge_core and removes dependency on external MQTT broker.
Integration test framework for edge. Improved edge_core unit-test coverage.
2019年3月29日:v0.3
Device Management using CRD’s
Bluetooth Mapper
Performance Test Framework
KubeEdge Installer
2019年7月25日:v1.0.0
Edge Mesh
CRI support
Quic protocol support
Modbus Mapper
Edge Site
2019年9月18日:v1.1.0
Container Storage Interface (CSI) support
Dynamic Admission Control Webhook
Kubernetes Upgrade
KubeEdge local setup scripts
https://github.com/kubeedge/kubeedge/blob/master/CHANGELOG/CHANGELOG-1.1.md
2020年2月10日:v1.2.0
Reliable message delivery from cloud to edge
KubeEdge Component Config
Kubernetes dependencies Upgrade
Auto registration of edge node
https://github.com/kubeedge/kubeedge/blob/master/CHANGELOG/CHANGELOG-1.2.md
2020年5月15日:v1.3.0
CloudCore HA
EdgeNode auto TLS Bootstrapping
Edge Pod Logs
Metrics at Edge
Lightweight Runtime Support
https://github.com/kubeedge/kubeedge/blob/master/CHANGELOG/CHANGELOG-1.3.md
2020年8月14日:v1.4.0
Enhance Devices Management
Metrics-Server Support for metrics collection across cloud and edge
EdgeNode Certificate Rotation
Kubernetes Dependencies Upgrade
https://github.com/kubeedge/kubeedge/blob/master/CHANGELOG/CHANGELOG-1.4.md
实践
部署
单机版kubeedge部署
1.安装kind
export GOPROXY=https://goproxy.io
GO111MODULE="on" go get sigs.k8s.io/kind@v0.9.0
2.hack/local-up-kubeedge.sh
[root@qwq-test01 kubeedge]# hack/local-up-kubeedge.sh
Cleaning up...
iptables: No chain/target/match by that name.
Running kind: [kind delete cluster --name test]
Deleting cluster "test" ...
checking kubectl
found kubectl, Client Version: v1.14.2
checking kind
found kind, version: kind v0.9.0 go1.13 linux/arm64
building the cloudcore...
make: Entering directory `/home/qiuwenqi/GO/src/kubeedge'
bash hack/verify-golang.sh
go detail version: go version go1.13 linux/arm64
go version: 1.13
hack/make-rules/build.sh cloudcore
building github.com/kubeedge/kubeedge/cloud/cmd/cloudcore
+ go build -o /home/qiuwenqi/GO/src/kubeedge/_output/local/bin/cloudcore -gcflags= -ldflags '-s -w -buildid= -X github.com/kubeedge/kubeedge/pkg/version.buildDate=2020-11-23T08:31:55Z -X github.com/kubeedge/kubeedge/pkg/version.gitCommit=0a33abc0fdd485a00e48efcb5513792705361c75 -X github.com/kubeedge/kubeedge/pkg/version.gitTreeState=clean -X github.com/kubeedge/kubeedge/pkg/version.gitVersion=v1.4.0-beta.0.277+0a33abc0fdd485 -X github.com/kubeedge/kubeedge/pkg/version.gitMajor=1 -X github.com/kubeedge/kubeedge/pkg/version.gitMinor=4+' github.com/kubeedge/kubeedge/cloud/cmd/cloudcore
+ set +x
make: Leaving directory `/home/qiuwenqi/GO/src/kubeedge'
building the edgecore...
make: Entering directory `/home/qiuwenqi/GO/src/kubeedge'
bash hack/verify-golang.sh
go detail version: go version go1.13 linux/arm64
go version: 1.13
hack/make-rules/build.sh edgecore
building github.com/kubeedge/kubeedge/edge/cmd/edgecore
+ go build -o /home/qiuwenqi/GO/src/kubeedge/_output/local/bin/edgecore -gcflags= -ldflags '-s -w -buildid= -X github.com/kubeedge/kubeedge/pkg/version.buildDate=2020-11-23T08:32:12Z -X github.com/kubeedge/kubeedge/pkg/version.gitCommit=0a33abc0fdd485a00e48efcb5513792705361c75 -X github.com/kubeedge/kubeedge/pkg/version.gitTreeState=clean -X github.com/kubeedge/kubeedge/pkg/version.gitVersion=v1.4.0-beta.0.277+0a33abc0fdd485 -X github.com/kubeedge/kubeedge/pkg/version.gitMajor=1 -X github.com/kubeedge/kubeedge/pkg/version.gitMinor=4+' github.com/kubeedge/kubeedge/edge/cmd/edgecore
+ set +x
make: Leaving directory `/home/qiuwenqi/GO/src/kubeedge'
Running kind: [kind create cluster --name test]
Creating cluster "test" ...
✓ Ensuring node image (kindest/node:v1.19.1) 🖼
✓ Preparing nodes 📦
✗ Writing configuration 📜
ERROR: failed to create cluster: failed to generate kubeadm config content: failed to get kubernetes version from node: failed to get file: command "docker exec --privileged test-control-plane cat /kind/version" failed with error: exit status 1
Command Output: Error response from daemon: Container 5972acf24daad11557da51be4bc52b7e18e07e61c948f663faa559ae45dfb118 is not running
Cleaning up...
iptables: No chain/target/match by that name.
编译安装kubeedge
https://github.com/kubeedge/kubeedge/blob/master/docs/setup/setup.md
Keadm部署
社区开发
• Member:
– 2个reviewer同意,个人主页显示KubeEdge徽章(5+个Pull request即可申请)
– 申请指南:https://github.com/kubeedge/community - membership
• Reviewer:
– 2个Approver同意,负责review一块代码
• Approver:
– 2个Maintainer同意,负责维护相应模块的代码,拥有merge代码权限
• Maintainer:
– 2个Owner同意,负责整个KubeEdge的特性、版本管理
• Owner:
– 3个Owner同意,负责整个项目的技术演进与发展方向
代码贡献
提交流程:
• Fork KubeEdge项目
• 新建个人开发分支
• 编写开发的Commit
• 提交一个Pull Request到KubeEdge项目
合入流程:
• Member、Reviewer、Approver检视代码
– 修改意见 – 添加“lgtm”标签
• Approver合入代码
– 添加“approve”标签
refs
https://github.com/kubeedge/kubeedge
https://kubeedge.io/
https://kind.sigs.k8s.io/docs/user/quick-start/
https://docs.google.com/document/d/1Sr5QS_Z04uPfRbA7PrXr3aPwCRpx7EtsyHq7mp6CnHs/
https://docs.google.com/spreadsheets/d/17cCqHE06Z2AG7AA_3UkQMOoLjK8v9vBUgaLsJoK7nu0/
https://www.bilibili.com/video/BV1LJ411D7t1?from=search&seid=4385287056262502314