云原生边缘计算:KubeEdge

发布于 2020-10-28 · 本文总共 6437 字 · 阅读大约需要 19 分钟

介绍

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重点要解决的问题

云边协同

资源异构

大规模

轻量化

一致的设备管理和接入体验

架构

新架构

kubeedge-architecture

老架构对比

kubeedge-architecture-old

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




本博客所有文章采用的授权方式为 自由转载-非商用-非衍生-保持署名 ,转载请务必注明出处,谢谢。
声明:
本博客欢迎转发,但请保留原作者信息!
博客地址:邱文奇(qiuwenqi)的博客;
内容系本人学习、研究和总结,如有雷同,实属荣幸!
阅读次数:

文章评论

comments powered by Disqus


章节列表