
KubeEdge
https://release-1-19.docs.kubeedge.io
云上组件(Cloud Core):
CloudHub
EdgeController
DeviceController
边缘组件(Edge Core):
Edged
EventBus
EdgeHub
DeviceTwin
MetaManager
ServiceBus
1、Cloud Core
1.1、CloudHub
CloudHub 是 cloudcore 的一个模块,是 Controller 和 Edge 端之间的中介。它同时支持基于 web-socket 的连接以及 QUIC 协议访问。 edgehub 可以选择其中一种协议来访问 cloudhub。CloudHub 的功能是启用 Edge 和 Controller 之间的通信。
1.2、EdgeController
Edge Controller 是Kubernetes Api-Server和 EdgeCore 之间的桥梁。
Edge Controller执行以下功能:
下行控制器(Downstream Controller):从K8s Api-server同步添加/更新/删除事件到EdgeCore
上行控制器(Upstream Controller):同步监视并更新资源和事件的状态(节点、Pod 和 ConfigMap)到 K8s Api-server,并且订阅来自 EdgeCore 的消息
Device Manager:创建管理接口,实现管理ConfigmapManager,LocationCache 和 PodManager 的事件
(1)Downstream controller
同步添加/更新/删除事件到边缘
Downstream Controller:监视K8S Api-server并通过cloudHub发送更新到EdgeCore
通过cloudHub同步Pod, ConfigMap, Secret 的添加/更新/删除事件到边缘
通过调用Upstream Controller管理接口创建相应的管理器(Pod,ConfigMap,Secret)来处理事件
定位ConfigMap和Secret应发送到哪个节点
(2)Upstream controller
同步监视并更新资源和事件的状态
Upstream Controller接收来自EdgeCore的消息,并将更新同步到K8S Api-server
创建停止通道以分发和停止处理Pod,ConfigMap节点和Secret事件
创建消息通道以更新NodeStatus,PodStatus,Secret和ConfigMap相关事件
获取Pod状态信息,如Ready,Initialized,PodScheduled和Unschedulable详细信息
以下是 PodCondition 的信息
- Ready:PodReady表示Pod能够提供服务请求,并应添加到所有匹配服务的负载均衡池中
- PodScheduled:它表示此Pod的调度过程状态
- Unschedulable:表示调度器当前无法调度此Pod,可能是由于集群中的资源不足
- Initialized:表示Pod中的所有初始化容器均已成功启动
- ContainersReady:表示Pod中的所有容器是否都已准备好以下是 PodStatus 的信息
- PodPhase:Pod的当前状态
- Conditions:指示Pod处于此状态的详细信息
- HostIP:分配给Pod的主机的IP地址
- PodIp:分配给Pod的IP地址
- QosClass:根据资源需求分配给Pod的QoS类别
1.3、DeviceController
Device Controller是KubeEdge的云端组件,负责设备管理。在KubeEdge中,设备管理是通过使用CRD机制来描述设备的元数据和状态,并通过Device Controller在Edge node和Cloud之间同步这些设备更新来实现的。
DeviceController启动了两个独立的协程,分别成为上行控制器和下行控制器。他们并不是单独的控制器,只是为了便于理解而命名。
Device Controller利用设备模型(Device Model)和设备实例(Device Instance)来实现设备管理:
Device Model:Device Model描述了设备公开的设备属性以及访问这些属性的属性访问者。Device Model类似于可重复使用的模板,用于创建和管理不同类型的设备。Device Model定义的详细信息可以在这里找到。
Device Instance:Device Instance代表一个实际的设备对象。它类似于Device Model的实例化,并引用模型中定义的属性。Device Instance中device.spec是静态的,而device.status包含动态变化的内容,如设备属性的期望状态和设备报告的实际状态。设备实例定义的详细信息可以在这里找到。
Device Controller执行以下功能:
Downstream Controller:通过监视 K8S API Server,将设备更新从云端同步到边缘节点。
Upstream Controller:使用Device Twin组件,将设备更新从Edge node同步到云端。
设备模型(Device Model)描述了一类设备公开的设备属性。设备模型是一种“物理模型”,它约束物理设备的属性和参数。
apiVersion: devices.kubeedge.io/v1beta1
kind: DeviceModel
metadata:
name: beta1-model
spec:
properties:
- name: temp
description: beta1-model
type: INT
accessMode: ReadWrite
maximum: "100"
minimum: "1"
unit: "Celsius"
protocol: modbus
在上面的例子中,定义了一个名为 beta1-model 的设备模型,该模型使用 modbus 协议,定义了一个名为temp的设备属性,其数据类型为int。 此外,还定义了设备属性的访问方式、取值范围和单位。
设备实例(Device Instance)代表一个实际的设备对象。
设备实例的spec字段是静态的,包括设备属性列表,它描述了每个属性的详细信息,包括其名称、类型、访问方法。
apiVersion: devices.kubeedge.io/v1beta1
kind: Device
metadata:
name: beta1-device
spec:
deviceModelRef:
name: beta1-model
nodeName: worker-node1
properties:
- name: temp
collectCycle: 10000000000 # The frequency of reporting data to the cloud, once every 10 seconds
reportCycle: 10000000000 # The frequency of data push to user applications or databases, once every 10 seconds
reportToCloud: true
desired:
value: "30"
pushMethod:
mqtt:
address: tcp://127.0.0.1:1883
topic: temp
qos: 0
retained: false
dbMethod:
influxdb2:
influxdb2ClientConfig:
url: http://127.0.0.1:8086
org: test-org
bucket: test-bucket
influxdb2DataConfig:
measurement: stat
tag:
unit: temperature
fieldKey: beta1test
visitors:
protocolName: modbus
configData:
register: "HoldingRegister"
offset: 2
limit: 1
scale: 1
isSwap: true
isRegisterSwap: true
protocol:
protocolName: modbus
configData:
ip: 172.17.0.3
port: 1502
上面的例子中,定义了一个名为 beta1-device 的设备,与之关联的设备模型为beta1-model,设备运行的节点为worker-node1。
示例文件在spec.properties字段中定义设备属性,包括消息上报频率、消息推送方式(spec.properties.pushMethod)、以及访问设备所需的参数(spec.properties.visitors)。此外,设备使用的协议在spec.protocol字段中定义。
2、Edge Core
2.1、Edged
EdgeD 是一个管理 Pod 生命周期的边缘节点模块。它可以帮助用户在边缘节点部署容器化工作负载或应用程序。使用云端的 kubectl 命令行界面,用户可以发出命令来启动工作负载。通过容器运行时接口 (CRI) 支持多个符合 OCI 标准的运行时。
2.2、EventBus
Eventbus 充当在 mqtt 主题上发送/接收消息的接口。
2.3、EdgeHub
Edge Hub 负责与云中存在的 CloudHub 组件进行交互。它可以使用 Web 套接字连接或使用 QUIC 协议连接到 CloudHub。支持同步云端资源更新、边侧主机上报、设备状态变化等功能。
它充当边缘和云之间的通信链路。它将从云端接收到的消息转发到边缘的相应模块,反之亦然。
EdgeHub 执行的主要功能是:
Keep Alive
Publish Client Info
Route to Cloud
Route to Edge
2.4、DeviceTwin
DeviceTwin 模块负责存储设备状态,处理设备属性和设备孪生操作,在边缘设备与边缘节点之间创建关联,将设备状态同步到云端,并在边缘和云端之间同步设备孪生信息。它还为应用程序提供查询接口。DeviceTwin 由四个子模块(即 Membership 模块、Communication 模块、Device 模块和 Twin 模块)组成,以履行 DeviceTwin 模块的职责。
以下是 DeviceTwin Controller 的功能:
将元数据同步到数据库/从数据库同步元数据 ( Sqlite )
注册和启动子模块
将消息分发到子模块
健康检查
2.5、MetaManager
MetaManager 是 edged 和 edgehub 之间的消息处理器。它还负责在轻量级数据库(SQLite)中存储/检索元数据。
Metamanager 有下列操作:
插入
更新
删除
查询
响应
节点连接
元数据同步
创建新对象时,将通过云接收 插入
操作消息。例如,通过云创建/部署的新用户应用程序 Pod。
edgehub 通过云接收 插入
操作请求。它将请求分派给 MetaManager,其将此消息保存在本地数据库中。然后,MetaManager 向 edged 发送异步消息。edged 处理插入请求,例如通过启动 pod 并在消息中填充响应。MetaManager 检查消息,提取响应并将其发送回 Edged,Edge 将其发送回云端。
更新
操作可以发生在云/边缘的对象上。
更新消息流类似于插入操作。此外,metamanager 会检查正在更新的资源是否已在本地更改。只有存在差异的时候,更新的数据才会被存储到本地,并且更新消息被传递给 edged ,响应被返回给云端。
当云端有对象(例如 Pod)被删除
时,删除操作会被触发
查询操作
使您可以在边缘本地查询元数据,也可以从云中查询一些远程资源(如 maps/secrets)。Edged 从 metamanager 查询此元数据,metamanager 进一步处理本地/远程查询处理,并将响应返回给 edged。Message 资源可以根据分隔符 '/' 分为 3 个部分 (resKey、resType、resId)。
2.6、ServiceBus
ServiceBus 是一个 HTTP 客户端,用于与 HTTP 服务器 (REST) 交互,为云组件提供 HTTP 客户端功能,以访问在边缘运行的 HTTP 服务器。
该设计与 EventBus 的设计相似。
EventBus 用于通过 MQTT 与在边缘上运行的应用程序进行通信。同样,ServiceBus 用于通过 HTTP 与在边缘上运行的应用程序进行通信。
Cloud 通过 CloudHub 向 Edge 发送 beehive 消息。
EdgeHub 接收消息并将其发送到 ServiceBus。
ServiceBus 仅进行 HTTP 调用,并通过 EdgeHub 将响应发送到云。
3、Mapper
Mapper是KubeEdge和设备之间的管理器。它可以设置/获取设备数据,获取并报告设备状态。KubeEdge使用Device Controller、Device Twin和Mapper来控制设备。Device Controller位于云端,它使用CRD来定义和控制设备。 Device Twin位于边缘侧,它能够存储来自Mapper的值/状态并在Mapper与Device Controller之间传递消息。同时,Device Twin中的DMI用于向云端注册Mapper并把Device Model与Device Instance传递给Mapper。