新闻详情

新闻详情

首页 / 资讯中心 / 详情

KubeEdge Edgemark:用 Hollow 边缘节点构建云侧 CloudCore 规模化压测集群

发布时间:2026/9/16 16:25:21来源:尧图网络
KubeEdge Edgemark:用 Hollow 边缘节点构建云侧 CloudCore 规模化压测集群
KubeEdge Edgemark用 Hollow 边缘节点构建云侧 CloudCore 规模化压测集群【免费下载链接】kubeedgeKubernetes Native Edge Computing Framework (project under CNCF)项目地址: https://gitcode.com/GitHub_Trending/ku/kubeedgeKubeEdge 的 Edgemark 是一个受 Kubemark 启发的性能测试工具它通过运行一组空心边缘节点Hollow Edge Node来构造一个规模远超真实部署的模拟 KubeEdge 集群专门用于在规模化场景下暴露 CloudCore 等云侧组件的问题。读完本文你将理解 Edgemark 的双集群架构与Hollow模拟原理掌握从构建镜像、下发 tokensecret 到批量拉起 Hollow 节点并配合 ClusterLoader2 执行压测的完整流程并能对照源码看懂edgemark可执行文件如何以伪造的 CRI 运行时替换真实容器能力。一、Edgemark 是什么Edgemark 的定位在 build/edgemark/README.md 中交代得很明确它是一个性能测试工具设计灵感来自 Kubernetes 官方的 Kubemark允许用户在模拟集群上做实验主要用例是可扩展性scalability测试——模拟集群的规模可以远大于真实集群目标是暴露那些只在大集群上才会出现的 KubeEdge 云侧组件CloudCore问题。换句话说Edgemark 并不模拟边缘设备上的业务负载也不产生任何真实容器。它的价值在于当你怀疑 CloudCore 在成百上千边缘节点规模下会出现性能退化、同步延迟或内存膨胀等问题但手边并没有这么多真实边缘机器时Edgemark 让你用外部集群里的一些轻量 Pod 来顶替海量边缘节点把压力全部导向云侧。二、架构两个集群与空心边缘节点2.1 集群拓扑从 build/edgemark/README.md 的 Architecture 一节和 build/edgemark/edgemark_setup_guide.md 可以归纳出 Edgemark 方案由三类资源构成edgemark cluster被测集群一个真实的 Kubernetes master可以是 StandAlone 或 HA其上部署 KubeEdge 的 CloudCore 组件负责为 Hollow 边缘节点提供接入服务。Kubemark 式的设计里master 组件运行在专用机器上由 kubelet 以 Pod 形式创建和管理kubelet 本身则以 systemd 或 supervisord 服务运行好处是可以把 master 资源与其他负载完全隔离。external cluster外部集群一个真实的 Kubernetes 集群用来承载所有 Hollow Edge Node 的 Pod。这些 Pod 运行在独立的edgemark命名空间中——用真实集群上的 Pod 在被测集群中表现为节点正是 Edgemark 设计的核心。专用节点与负载均衡CloudCore 有多个实例、需要多个专用节点来维持高可靠高可用配置下还必须在 CloudCore 前面挂一个负载均衡器把 Hollow 节点接入请求正确路由到健康的 CloudCore 实例上。且该负载均衡器必须能从 external cluster 中的 Hollow 节点直接路由到达。2.2 HollowEdgeCore假装是 EdgeCoreHollow Edge Node 通过HollowEdgeCore注册到被测集群它假装是一个普通 EdgeCore但不会创建任何真实容器。其核心手法是用 Kubernetes 的 fake CRI 运行时来 mock 掉 runtime manager——除模拟运行时之外其余行为与 edgecore 完全一致。文档中给出的参考路径是k8s.io/kubernetes/pkg/kubelet/cri/remote/fake/fake_runtime.go较旧的导入路径。以当前仓库代码为准这一能力来自k8s.io/cri-client/pkg/fake包实现位于 hollow_edgecore.goGetFakeKubeletDepsedge/cmd/edgemark/hollow_edgecore.go#L163-L205通过fakeremote.GenerateEndpoint()生成一个 UDS endpoint启动fakeremote.NewFakeRemoteRuntime()假运行时再用remote.NewRemoteRuntimeService构建指向该假运行时的 CRI 客户端同时把 kubelet 依赖链上的其他环节一并换成 fakecadvisortest.Fake假 cadvisor、cm.NewStubContainerManager()stub 容器管理器、containertest.FakeOS、mount.FakeMounter、subpath.FakeSubpath、hostutil.NewFakeHostUtil等保留的 volume plugins 为 emptydir、hostpath、secret、downwardapi、configmap、projected、local 这几类见volumePlugins()edge/cmd/edgemark/hollow_edgecore.go#L207-L217。2.3 注入机制edged 模块的两个可替换默认值Hollow 方案之所以成立是因为 KubeEdge 的edged模块预留了两个全局默认函数指针其注释明确写着will only be changed when EdgeMark is enabled仅在启用 EdgeMark 时才会被修改见 edge/pkg/edged/edged.go#L80-L84edged.DefaultKubeletDeps默认指向kubeletserver.UnsecuredDependencies即真实的 kubelet 依赖构造逻辑在 newEdged 中被调用edged.DefaultRunLiteKubelet默认指向kubeletserver.Run在 edged.Start 中被调用。edgemark命令的run函数edge/cmd/edgemark/hollow_edgecore.go#L108-L129做的第一件事就是替换这两个变量GetFakeKubeletDeps接管依赖构造kubeletapp.RunKubelet接管 kubelet 启动流程随后正常注册 beehive 模块edged、edgehub、metamanager初始化元数据库 DAO 并调用core.Run()启动全部模块。从源码结构看这意味着 Hollow 节点保留了真实的edgehub 消息链路建链、收发消息、同步资源与metamanager 元数据管理只有执行容器这一层被掏空——这正是压测 CloudCore 下发/同步通路所需要的最小仿真面。三、运行 Edgemark 的环境要求根据 build/edgemark/README.md 的 Requirements 一节运行 Edgemark 需要一个 Kubernetes 集群称为external cluster用于运行所有 Hollow Edge Node一个 Kubernetes 集群称为edgemark cluster作为 Hollow Edge Node 的 masteredgemark cluster中若干专用节点用于部署 CloudCore以及一个为 Hollow Edge Node 暴露 CloudCore 服务的负载均衡器该 LB 必须能从 Hollow Edge Node 直接路由到达一个可访问的 Docker 仓库其中包含 CloudCore、hollow-edge-node 和 node-problem-detector 的容器镜像。四、搭建步骤实战完整步骤参考 build/edgemark/edgemark_setup_guide.md前置条件是 edgemark master 与 external cluster 均已就绪。4.1 步骤一在 edgemark cluster 部署 CloudCore按官方 CloudCore 高可用部署方式部署 CloudCoreedgemark master 支持 StandAlone 或 HA 两种形态使其能在 edgemark cluster 中为边缘节点提供接入。这一步遵循仓库中 CloudCore 的标准部署流程不再赘述。4.2 步骤二构建 edgemark 镜像如果你要构建/使用自己的 edgemark 镜像cd $GOPATH/src/github.com/kubeedge git clone gitgithub.com:kubeedge/kubeedge.git然后cd $GOPATH/src/github.com/kubeedge/kubeedge make image WHATedgemark构建完成后本地会得到名为kubeedge/edgemark:{tag}的镜像。镜像的构建过程见 build/edgemark/Dockerfile以golang:1.23.12-alpine3.21为构建基础镜像安装build-base、linux-headers、sqlite-dev等依赖后以CGO_ENABLED1静态编译github.com/kubeedge/kubeedge/edge/cmd/edgemark包对应上文分析的 hollow 节点入口最终产物拷入alpine:3.21精简运行时镜像ENTRYPOINT固定为edgemark。4.3 步骤三在 external cluster 创建 Hollow 节点1创建命名空间并复制 tokensecrettokensecret是 CloudCore 在 edgemark master 侧kubeedge命名空间生成、供边缘节点接入 CloudCore 时使用的令牌。先把它导出为文件kubectl get secret -nkubeedge tokensecret -oyaml tokensecret.yaml修改其中的命名空间为目标命名空间{ns}sed -i s|namespace: .*|namespace: {ns}|g tokensecret.yaml在 external cluster 中创建命名空间与 secretkubectl create ns edgemark kubectl create -f tokensecret.yaml2应用模板创建 Hollow 节点使用 build/edgemark/hollow_edge_node_template.yaml 这个 Deployment 模板需先填充其中的占位参数模板参数含义{{numreplicas}}edgemark 集群中 Hollow 节点的数量Deployment 副本数{{server}}暴露给 Hollow 节点加入的服务器地址即 CloudCore 的负载均衡入口{{edgemark_image_registry}}edgemark 镜像仓库地址{{edgemark_image_tag}}edgemark 镜像 tag另外注意external cluster 必须有足够资源运行{{numreplicas}}个 Hollow 节点 Pod。模板的关键内容原文照录kind: Deployment apiVersion: apps/v1 metadata: name: hollow-edge-node spec: replicas: {{numreplicas}} selector: matchLabels: app: hollow-edge-node template: metadata: labels: app: hollow-edge-node spec: containers: - name: hollow-edgecore image: {{edgemark_image_registry}}/edgemark:{{edgemark_image_tag}} command: - edgemark args: - --token$(TOKEN) - --name$(NODE_NAME) - --http-serverhttps://{{server}}:10002 - --websocket-server{{server}}:10000 - --v2 env: - name: NODE_NAME valueFrom: fieldRef: apiVersion: v1 fieldPath: metadata.name - name: TOKEN valueFrom: secretKeyRef: name: tokensecret key: tokendata resources: requests: cpu: 20m memory: 50M securityContext: privileged: true tolerations: - effect: NoExecute key: node.kubernetes.io/unreachable operator: Exists - effect: NoExecute key: node.kubernetes.io/not-ready operator: Exists几个值得注意的细节NODE_NAME通过fieldRef: metadata.name取 Pod 名从而让每个 Hollow 节点在被测集群中拥有唯一的节点名TOKEN从 secrettokensecret的tokendata键注入对应edgemark的--token参数--http-server指向https://{{server}}:10002边缘节点申请证书的 HTTP 服务--websocket-server指向{{server}}:10000消息链路 WebSocket 服务二者均落在 CloudCore 的负载均衡入口上资源请求很小20m CPU / 50M 内存这符合空心节点的定位算力开销几乎可以忽略可以低成本堆出大规模。填充完成后应用kubectl create -f hollow-edge-node_template.yaml等待这些 Hollow 节点 Pod 进入 Running 状态后在 edgemark master 上即可看到这些 Pod 已注册为 edgemark master 的节点。至此edgemark master 与 external cluster 共同组成了 edgemark 集群。4.4 步骤四使用 ClusterLoader2 执行性能测试edgemark 集群搭建完成后即可配合ClusterLoader2Kubernetes 官方的可扩展性与性能测试框架开展压测。运行压测时只需把 provider 配置为kubemark例如./clusterloader --testconfigconfig.yaml --providerkubemark --kubeconfig${HOME}/.kube/config --v2--providerkubemark的语义是测试框架将目标集群中的节点视为 Kubemark 式模拟节点进行调度与压测这与 Edgemark 的 Hollow 节点设计一脉相承。具体测试配置config.yaml的编写遵循 ClusterLoader2 的通用规范可按其官方 Getting started 文档组织用例。五、edgemark 命令行参数解析edgemark是一个基于 cobra 的单命令程序命令名即edgemark不接受位置参数其业务参数定义于 hollow_edgecore.go 的addFlagsedge/cmd/edgemark/hollow_edgecore.go#L131-L138并叠加了 kubelet 的全局 flags如--docker-only与globalflag注册的标准全局参数如-v日志级别参数默认值说明源码注释--token空边缘节点加入集群时使用的令牌决定接入 CloudCore 的凭据--namefake-node该 Hollow 节点的名字最终作为节点注册名--websocket-server空WebSocket 消息服务地址模板中为{{server}}:10000--http-server空边缘节点申请证书所用的 HTTP 服务地址模板中为https://{{server}}:10002--node-labels空附加到节点上的额外标签map 形式这些 flag 会被映射进一份EdgeCoreConfigEdgeCoreConfigedge/cmd/edgemark/hollow_edgecore.go#L140-L161其中针对压测场景做了若干关键覆盖DataBase.DataSource固定为/edgecore.db容器内 SQLite 元数据库路径EdgeHub模块的Token、HTTPServer、WebSocket.Server分别取命令行传入的 token / http-server / websocket-serverEdged.HostnameOverride取--nameNodeLabels取--node-labelskubelet 相关裁剪RegisterNode置为true保证节点注册到被测集群CgroupsPerQOS、EnableControllerAttachDetach置为falseProtectKernelDefaults置为false——从源码结构看这些关闭项都是围绕没有真实容器与内核环境这一前提做的适配。六、小结与适用边界Edgemark 的设计可以概括为三点其一双层集群——external cluster 出算力、edgemark cluster 出被测 master 与 CloudCore其二Hollow 仿真——用 fake CRI 运行时与一系列 fake 依赖掏空容器执行层同时保留 edgehub/metamanager 等真实消息与元数据链路让 CloudCore 感受到真实的大规模边缘接入压力其三标准化压测出口——Hollow 节点注册为普通节点后即可直接套用 ClusterLoader2--providerkubemark的成熟用例。需要明确的适用边界Edgemark 面向的是云侧组件在大规模节点下的可扩展性测试它不验证边缘侧真实业务负载也不替代边缘设备功能测试搭建前需同时具备 external cluster、edgemark cluster含 CloudCore 专用节点与 LB以及包含所需镜像的仓库。相关文档与实现入口可继续深入build/edgemark/README.md、build/edgemark/edgemark_setup_guide.md、build/edgemark/hollow_edge_node_template.yaml、edge/cmd/edgemark/hollow_edgecore.go 与 edge/pkg/edged/edged.go。【免费下载链接】kubeedgeKubernetes Native Edge Computing Framework (project under CNCF)项目地址: https://gitcode.com/GitHub_Trending/ku/kubeedge创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

OpenClaw在CentOS 7上的自动化运维部署指南 2026/9/16 17:04:27

OpenClaw在CentOS 7上的自动化运维部署指南

1. 项目背景与核心价值OpenClaw作为一款开源的自动化运维工具链组件,在Linux服务器管理领域有着独特的应用场景。它主要面向需要批量执行命令、文件分发和任务调度的运维场景,特别适合中小型技术团队在没有成熟运维体系时的过渡方案。我在实际生产环境中…

阅读更多 →
自建月亮慢直播频道:FFmpeg+Nginx实现24小时无人值守直播 2026/9/16 17:04:27

自建月亮慢直播频道:FFmpeg+Nginx实现24小时无人值守直播

凌晨两点十七分,LunaTV的直播间在线人数定格在11人,弹幕里飘过一句“月亮很好看,晚安”。那一刻我盯着监控面板,反而松了一口气——这个频道已经连续稳定播出了71个小时。作为一个没有编导、没有摄影、没有运维的独立创作者&#…

阅读更多 →
Elementor 动态标签实战:为 v4 原子组件(Atomic Widgets)从第三方插件接入动态数据源 2026/9/16 17:04:27

Elementor 动态标签实战:为 v4 原子组件(Atomic Widgets)从第三方插件接入动态数据源

Elementor 动态标签实战:为 v4 原子组件(Atomic Widgets)从第三方插件接入动态数据源 【免费下载链接】elementor The most advanced frontend drag & drop page builder. Create high-end, pixel perfect websites at record speeds. An…

阅读更多 →
Django HTML图像取证系统:DOM哈希与结构化差异比对 2026/9/16 17:04:27

Django HTML图像取证系统:DOM哈希与结构化差异比对

简介:本资源是一套面向本科毕业设计与图像取证初学者的完整Django Web系统实现方案,聚焦数字图像真实性分析与篡改检测技术落地。项目以Python为核心,采用Django构建稳健后端,HTMLCSSJS实现交互式前端界面,MySQL支撑图…

阅读更多 →
不知道要什么风格?Garden Skills 设计方向顾问帮你 3 步锁定设计方向 2026/9/16 17:04:27

不知道要什么风格?Garden Skills 设计方向顾问帮你 3 步锁定设计方向

不知道要什么风格?Garden Skills 设计方向顾问帮你 3 步锁定设计方向 【免费下载链接】garden-skills ConardLis open-source Skills collection, featuring web design, knowledge retrieval, image generation, and more. 项目地址: https://gitcode.com/GitHub…

阅读更多 →
护照NAATI翻译怎么办理?一篇读懂渠道、流程及费用 2026/9/16 17:01:27

护照NAATI翻译怎么办理?一篇读懂渠道、流程及费用

一、护照NAATI翻译怎么办理?可以找线上平台,很省事,比如慧办好翻译小程序,对接大型涉外翻译服务机构,也是我国翻译协会会员单位,所有译员持证上岗,无机翻。标价清晰,无隐形收费&…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞