文章目录
KubeEdge介绍
KubeEdge概述
KubeEdge 是一个开源系统,将原生的容器化的业务流程和设备管理功能扩展到边缘节点。KubeEdge 是基于 Kubernetes 构建的,并为云,边缘之间的网络通信,应用程序部署以及元数据同步提供核心基础架构支持。同时 KubeEdge 还支持 MQTT,并允许开发人员编写自定义逻辑并在 Edge 上启用一定资源的设备进行通信。
KubeEdge 由云端和边缘端组成。
KubeEdge优势
KubeEdge 的优势主要包括:
- 边缘计算
借助在 Edge 上运行业务应用,可以在产生数据的边端存储和处理大量数据。这样可以减少边缘和云之间的网络带宽需求和消耗,提高响应速度,降低成本并保护客户的数据隐私。
- 简化开发
开发人员可以编写基于 HTTP 或 MQTT 的常规应用程序,对其进行容器化,然后在 Edge 或 Cloud 中的任何一个更合适的位置运行应用程序。
- Kubernetes 原生支持
借助 KubeEdge,用户可以像在传统的 Kubernetes 集群一样,在 Edge 节点上编排应用程序,管理设备并监视应用程序和设备状态。
- 丰富的应用
可以轻松地将现有的复杂机器学习,图像识别,事件处理等其他高级应用程序部署到 Edge。
-
云边可靠协作
在不稳定的云边网络上,可以保证消息传递的可靠性,不会丢失。 -
边缘自治
当云边之间的网络不稳定或者边缘端离线或重启时,确保边缘节点可以自主运行,同时确保边缘端的应用正常运行。 -
边缘设备管理
通过 Kubernetes 的原生API,并由CRD来管理边缘设备。 -
极致轻量的边缘代理
在资源有限的边缘端上运行的非常轻量级的边缘代理(EdgeCore)。
KubeEdge架构
KubeEdge 由以下组件组成:
云上(CloudCore)部分:
CloudHub: Web 套接字服务器,负责在云端缓存信息、监视变更,并向 EdgeHub 端发送消息。
EdgeController: kubernetes 的扩展控制器,用于管理边缘节点和 pod 的元数据,以便可以将数据定位到对应的边缘节点。
DeviceController: 一个扩展的 kubernetes 控制器,用于管理边缘 IoT 设备,以便设备元数据/状态数据可以在 edge 和 cloud 之间同步。
边缘(EdgeCore)部分:
EdgeHub: Web 套接字客户端,负责与 Cloud Service 进行交互以进行边缘计算(例如 KubeEdge 体系结构中的 Edge Controller)。这包括将云侧资源更新同步到边缘,并将边缘侧主机和设备状态变更报告给云。
Edged: 在边缘节点上运行并管理容器化应用程序的代理。
EventBus: 一个与 MQTT 服务器(mosquitto)进行交互的 MQTT 客户端,为其他组件提供发布和订阅功能。
ServiceBus: 用于与 HTTP 服务器 (REST) 交互的 HTTP 客户端,为云组件提供 HTTP 客户端功能,以访问在边缘运行的 HTTP 服务器。
DeviceTwin: 负责存储设备状态并将设备状态同步到云端。它还为应用程序提供查询接口。
MetaManager: Edged 端和 Edgehub 端之间的消息处理器。它还负责将元数据存储到轻量级数据库(SQLite)或从轻量级数据库(SQLite)检索元数据。
KubeEdge架构图如下:
提示:更多介绍参考官方文档:为什么选择KubeEdge
KubeEdge部署
部署依赖
KubeEdge基于原生Kubernetes基础上构建,将Kubernetes能力从云端延伸到边缘,并使其适配边缘计算的要求,比如网络不稳定性以及资源受限场景等,因此在部署KubeEdge前,请先准备好一个Kubernetes集群。有关 Kubernetes 的部署可参考: 附042.Kubernetes_v1.32.3生成环境高可用部署
提示:Kubernetes 和 KubeEdge 版本匹配和兼容可查看: Kubernetes compatibility 。
对于容器运行时,可支持如下:
- docker
- containerd
- cri-o
- virtlet
部署规划
本方案基于 Keadm 部署工具实现完整生产环境可用的 KubeEdge 边缘云部署。
其主要信息如下:
- 版本:KubeEdge v1.20.0 版本;
- Keadm:采用 Keadm 部署 KubeEdge ;
- OS:Ubuntu Server 24.04 LTS;
- containerd:容器运行时。
节点主机名 | IP | 类型 | 备注 |
---|---|---|---|
master01 | 172.24.8.181 | Kubernetes master节点 | KubeEdge Cloud节点 |
master02 | 172.24.8.182 | Kubernetes master节点 | KubeEdge Cloud节点 |
master03 | 172.24.8.183 | Kubernetes master节点 | KubeEdge Cloud节点 |
worker01 | 172.24.8.184 | Kubernetes worker节点 | |
worker02 | 172.24.8.185 | Kubernetes worker节点 | |
worker03 | 172.24.8.186 | Kubernetes worker节点 | |
worker03 | 172.24.8.186 | Kubernetes worker节点 | |
edgenode01 | 172.24.8.187 | KubeEdge worker节点 | |
edgenode02 | 172.24.8.188 | KubeEdge worker节点 |
提示:Kubernetes 集群部署不在本方案讨论内,但本方案基于快速部署目的,会使用 Kubernetes 的 master01 充当部署节点,从而快速批量完成对edgenode节点的相关部署。
主机名配置
需要对所有节点主机名进行相应配置。
root@localhost:~# hostnamectl set-hostname edgenode01 #其他节点依次修改
提示:如上需要在所有节点修改对应的主机名。
生产环境通常建议在内网部署dns服务器,使用dns服务器进行解析,本指南采用本地hosts文件名进行解析。
如下hosts文件修改仅需在master01执行,后续使用批量分发至其他所有节点。
root@master01:~# cat >> /etc/hosts << EOF
172.24.8.187 edgenode01
172.24.8.188 edgenode02
EOF
root@master01:~# cat /etc/hosts
#……
172.24.8.181 master01
172.24.8.182 master02
172.24.8.183 master03
172.24.8.184 worker01
172.24.8.185 worker02
172.24.8.186 worker03
172.24.8.187 edgenode01
172.24.8.188 edgenode02
提示:如上仅需在master01节点上操作。
变量准备
为实现自动化部署,自动化分发相关文件,提前定义相关主机名、IP组、变量等。
root@master01:~# wget http://down.linuxsb.com/mydeploy/kubeedge/v1.20.0/kubeedgenodeenv.sh
root@master01:~# vi kubeedgenodeenv.sh #确认相关主机名和IP
#!/bin/bash
#***************************************************************#
# ScriptName: kubeedgenodeenv.sh
# Author: xhy
# Create Date: 2025-04-01 16:12
# Modify Author: xhy
# Modify Date: 2025-04-01 16:15
# Version: v1
#***************************************************************#
# Kubernetes 集群 MASTER 机器 IP 数组
export K8S_MASTER_IPS=(172.24.8.181 172.24.8.182 172.24.8.183)
# Kubernetes 集群 MASTER IP 对应的主机名数组
export K8S_MASTER_NAMES=(master01 master02 master03)
# Kubernetes 集群 NODE 机器 IP 数组
export K8S_NODE_IPS=(172.24.8.184 172.24.8.185 172.24.8.186)
# Kubernetes 集群 NODE IP 对应的主机名数组
export K8S_NODE_NAMES=(worker01 worker02 worker03)
# Kubernetes 集群 所有机器 IP 数组
export K8S_ALL_IPS=(172.24.8.181 172.24.8.182