摘要:《KubeEdge单集群突破10万边缘节点 | 技术报告》将会在6月25日即将开展的云原生边缘计算峰会(KubeEdge Summit 2022)中进行应用解析。我们先来一睹为快吧!

近日, 云原生边缘计算KubeEdge社区开展了支持100000边缘节点大规模测试。在边缘计算行业应用的高速发展时期,作为CNCF唯一孵化级的云原生边缘计算项目,KubeEdge在智能交通、智慧城市、智慧园区、智慧能源、智慧工厂、智慧银行、智慧工地、CDN等行业发挥着全面的驱动作用。本次大规模测试,KubeEdge单集群突破10万边缘节点!

《KubeEdge单集群突破10万边缘节点 | 技术报告》也会在6月25日即将开展的云原生边缘计算峰会(KubeEdge Summit 2022)中进行应用解析。我们先来一睹为快吧!

摘要

随着KubeEdge在越来越多的企业以及组织大规模落地,KubeEdge可扩展性和大规模逐步成为社区用户新的关注点。因此,我们开展了KubeEdge的大规模测试工作,现在我们宣布Kubernetes + KubeEdge集群能够稳定支持100,000边缘节点同时在线,并且管理超过1,000,000的pod。在本篇文章中,我们将介绍测试使用的相关指标,如何开展的大规模测试以及我们如何实现大规模边缘节点接入。

背景介绍

随着5G网络、工业互联网、AI等领域的高速发展,边缘计算成为引领数字化发展的潮流。智慧城市、智慧交通、智慧医疗、智能制造等未来场景更多被人熟知,边缘计算也受到了空前的关注。Gartner里面明确提出,到2023年,网络边缘的智能设备数量可能是传统IT的20倍以上。到2028年,传感器、存储、计算和高级人工智能功能在边缘设备中的嵌入将稳步增长。由于物联网设备本身存在类型繁杂和数量众多的特点,物联网设备接入的数量级增加的同时,给我们的统一管理和运维带来了巨大的挑战。

与此同时,KubeEdge社区的用户也提出了大规模边缘节点和应用管理的诉求。基于KubeEdge的高速取消省界项目中,在全国的省界收费站拥有将近10万边缘节点,超过50万边缘应用接入,并且随着项目的演进,边缘节点和应用规模将进一步扩大。使用KubeEdge打造的车云协同管理平台,是汽车行业的首款“云、边、端”一体化架构,助力软件定义汽车实现软件快速升级迭代。在此平台中,每一辆汽车,均作为一个边缘节点接入,边缘节点的规模将达到数百万级别。

KubeEdge简介

KubeEdge是面向边缘计算场景、专为边云协同设计的业界首个云原生边缘计算框架,在 Kubernetes 原生的容器编排调度能力之上实现了边云之间的应用协同、资源协同、数据协同和设备协同等能力,完整打通了边缘计算中云、边、设备协同的场景。

KubeEdge架构主要包含云边端三部分,云上是统一的控制面,包含原生的Kubernetes管理组件,以及KubeEdge自研的CloudCore组件,负责监听云端资源的变化,提供可靠和高效的云边消息同步。边侧主要是EdgeCore组件,包含Edged、MetaManager、EdgeHub等模块,通过接收云端的消息,负责容器的生命周期管理。端侧主要是device mapper和eventBus,负责端侧设备的接入。

KubeEdge以Kubernetes管控面作为底座,通过将节点拉远的方式,扩展了边云之间的应用协同、资源协同、数据协同和设备协同等能力。 目前,Kubernetes社区官方支持的规模是5,000 个节点和150,000 个Pod,在边缘计算的场景,随着万物互联时代的到来,这种规模是远远不够的。大规模边缘设备的接入,对边缘计算平台的可扩展性和集中管理的需求将会增加,如何使用尽可能少的云端资源和集群,管理尽可能多的边缘设备,简化基础设施的管理和运维。KubeEdge在全面兼容Kubernetes原生能力的基础上,对云边消息通道和传输机制进行了优化,突破了原生Kubernetes的管理规模,支撑更大规模的边缘节点接入和管理。

SLIs/SLOs

可扩展性和性能是Kubernetes集群的重要特性,作为K8s集群的用户,期望在以上两方面有服务质量的保证。在进行Kubernetes + KubeEdge大规模性能测试前,我们需要定义如何衡量集群大规模场景下服务指标。Kubernetes社区定义了以下几种SLIs(Service Level Indicator)/SLOs(service-level objective)指标项,我们将使用这些指标来衡量集群服务质量。

1.API Call Latency

2.Pod Startup Latency

社区还定义了In-Cluster Network Programming Latency(Service更新或者其Ready Pod变化最终反映到Iptables/IPVS规则的时延),In-cluster network latency,DNS Programming Latency( Service更新或者其Ready Pod 反映到dns server的时延), DNS Latency等指标,这些指标当前还尚未量化。满足所有SLO 为大规模集群测试的目标,因此本报告主要针对Official状态SLIs/SLOs进行测试。

Kubernetes 可伸缩性维度和阈值

Kubernetes的可伸缩特性不单指节点规模,即Scalability != #nodes,实际上Kubernetes可伸缩性包含很多维度的测量标准,包含namespaces的数量,Pod的数量,service的数量,secrets/configmap的数量等。下图是Kubernetes社区定义的描述集群可扩展性的重要维度(尚在持续更新中):

Kubernetes集群无限制扩展资源对象而且又满足SLIs/SLOs各项指标显然是不可能实现的,为此业界定义了Kubernetes多个维度资源上限。

    1. Pods/node 30
    2. Backends <= 50k & Services <= 10k & Backends/service <= 250
    3. Pod churn 20/s
    4. Secret & configmap/node 30
    5. Namespaces <= 10k & Pods <= 150k & Pods/namespace <= 3k
    6. …..

各个维度不是完全独立的,某个维度被拉伸相应的其他维度就要被压缩,可以根据使用场景进行调整。例如5k node 拉伸到10k node 其他维度的规格势必会受到影响。如果各种场景都进行测试分析工作量是非常巨大的,在本次测试中,我们会重点选取典型场景配置进行测试分析。在满足SLIs/SLOs的基础上,实现单集群支持100k边缘节点,1000k pod规模管理。

测试工具

ClusterLoader2

ClusterLoader2是一款开源Kubernetes集群负载测试工具,该工具能够针对Kubernetes 定义的SLIs/SLOs 指标进行测试,检验集群是否符合各项服务质量标准。此外Clusterloader2为集群问题定位和集群性能优化提供可视化数据。ClusterLoader2 最终会输出一份Kubernetes集群性能报告,展示一系列性能指标测试结果。

Clusterloader2性能指标:

  • APIResponsivenessPrometheusSimple
  • APIResponsivenessPrometheus
  • CPUProfile
  • EtcdMetrics
  • MemoryProfile
  • MetricsForE2E
  • PodStartupLatency
  • ResourceUsageSummary
  • SchedulingMetrics
  • SchedulingThroughput
  • WaitForControlledPodsRunning
  • WaitForRunningPods

Edgemark

Edgemark是类似于Kubemark的性能测试工具, 主要用于KubeEdge集群可扩展性测试中,用来模拟KubeEdge边缘节点,在有限资源的情况下构建超大规模Kubernetes+KubeEdge集群,目标是暴露只有在大规模集群情况下才会出现的集群管理面问题。Edgemark部署方式如下图:

  • k8s master --- Kubernetes物理集群主节点
  • edgemark master --- Kubernetes模拟集群主节点
  • CloudCore --- KubeEdge云端管理组件,负责边缘节点的接入
  • hollow pod --- 在物理集群上启动的pod,通过在pod内启动edgemark向edgemark master注册成为一台虚拟边缘节点,edgemark master可以向该虚拟边缘节点上调度pod
  • hollow edgeNode --- 模拟集群中可见的节点,为虚拟节点,由hollow pod注册获得

测试集群部署方案

Kubernetes底座管理面采用单master进行部署,ETCD、Kube-apiserver、Kube-Scheduler、Kube-Controller均为单实例部署,KubeEdge管理面CloudCore采用5实例部署,通过master节点IP连接Kube-apiserver,南向通过Load Balancer对外暴漏服务,边缘节点通过Load Balancer轮询策略随机连接到某一个CloudCore实例。

测试环境信息

1、管理面OS版本

CentOS 7.9 64bit 3.10.0-1160.15.2.el7.x86_64

2、Kubernetes 版本

Major:"1", Minor:"23", GitVersion:"v1.23.4", GitCommit:"e6c093d87ea4cbb530a7b2ae91e54c0842d8308a", GitTreeState:"clean", BuildDate:"2022-02-16T12:38:05Z", GoVersion:"go1.17.7", Compiler:"gc", Platform:"linux/amd64"

3、KubeEdge版本

KubeEdge v1.11.0-alpha.0

4、Master节点配置

  • CPU
Architecture:          x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 128
On-line CPU(s) list: 0-127
Thread(s) per core: 2
Core(s) per socket: 32
Socket(s): 2
NUMA node(s): 2
Vendor ID: GenuineIntel
CPU family: 6
Model: 106
Model name: Intel(R) Xeon(R) Platinum 8378A CPU @ 3.00GHz
Stepping: 6
CPU MHz: 2999.998
  • MEMORY

Total online memory: 256G

  • ETCD DISK

Type: SAS_SSD

Size: 300GB

5、CloudCore节点配置

  • CPU
Architecture:          x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 12
On-line CPU(s) list: 0-11
Thread(s) per core: 2
Core(s) per socket: 6
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 106
Model name: Intel(R) Xeon(R) Platinum 8378A CPU @ 3.00GHz
Stepping: 6
CPU MHz: 2999.998
  • MEMORY

Total online memory: 48G

组件参数配置

1、kube-apiserver 参数

--max-requests-inflight=2000
--max-mutating-requests-inflight=1000

2、kube-controller-manager 参数

--kube-api-qps=100
--kube-api-burst=100

3、kube-scheduler 参数

--kube-api-qps=200
--kube-api-burst=400

4、CloudCore参数配置

apiVersion: cloudcore.config.kubeedge.io/v1alpha1
kind: CloudCore
kubeAPIConfig:
kubeConfig: ""
master: ""
qps: 60000
burst: 80000
modules:
cloudHub:
advertiseAddress:
- xx.xx.xx.xx
nodeLimit: 30000
tlsCAFile: /etc/kubeedge/ca/rootCA.crt
tlsCertFile: /etc/kubeedge/certs/server.crt
tlsPrivateKeyFile: /etc/kubeedge/certs/server.key
unixsocket:
address: unix:///var/lib/kubeedge/kubeedge.sock
enable: false
websocket:
address: 0.0.0.0
enable: true
port: 10000
cloudStream:
enable: false
deviceController:
enable: false
dynamicController:
enable: false
edgeController:
buffer:
configMapEvent: 102400
deletePod: 10240
endpointsEvent: 1
podEvent: 102400
queryConfigMap: 10240
queryEndpoints: 1
queryNode: 10240
queryPersistentVolume: 1
queryPersistentVolumeClaim: 1
querySecret: 10240
queryService: 1
queryVolumeAttachment: 1
ruleEndpointsEvent: 1
rulesEvent: 1
secretEvent: 1
serviceEvent: 10240
updateNode: 15240
updateNodeStatus: 30000
updatePodStatus: 102400
enable: true
load:
deletePodWorkers: 5000
queryConfigMapWorkers: 1000
queryEndpointsWorkers: 1
queryNodeWorkers: 5000
queryPersistentVolumeClaimWorkers: 1
queryPersistentVolumeWorkers: 1
querySecretWorkers: 1000
queryServiceWorkers: 1
queryVolumeAttachmentWorkers: 1
updateNodeStatusWorkers: 10000
updateNodeWorkers: 5000
updatePodStatusWorkers: 20000
ServiceAccountTokenWorkers: 10000
nodeUpdateFrequency: 60
router:
enable: false
syncController:
enable: true

Density测试

测试执行

在使用ClusterLoader2进行性能测试之前,我们需要自己通过配置文件定义性能测试策略, 本次测试我们使用官方的 Kubernetes density 测试用例,使用的配置文件如下链接所示:

https://github.com/kubernetes/perf-tests/blob/master/clusterloader2/testing/density/config.yaml

Kubernetes资源详细的配置如下表所示:

详细的测试方法和过程,可以参考

https://github.com/kubeedge/kubeedge/tree/master/build/edgemark

https://github.com/kubernetes/perf-tests/blob/master/clusterloader2/docs/GETTING_STARTED.md

测试结果

APIResponsivenessPrometheusSimple:

1、mutating API latency(threshold=1s):

2、Read-only API call latency(scope=resource, threshold=1s)

3、Read-only API call latency(scope=namespace, threshold=5s)

4、Read-only API call latency(scope=cluster, threshold=30s)

PodStartupLatency:

注:延迟时间理论上应该总是大于零的,因为kube-apiserver不支持RFC339NANO,导致时间戳精度只能达到秒级,故在延迟比较小的情况下,由于精度损失,ClusterLoader2统计到的某些数值为0。

结论及分析

在以上的测试结果中,API Call Latency和Pod Startup Latency均符合Kubernetes社区定义的SLIs/SLOs指标。因此,Kubernetes + KubeEdge集群能够稳定支持100,000边缘节点同时在线,并且管理超过1,000,000的pod。在实际的生产环境中,因为网络安全、分区管理等相关问题,边缘节点和云端的网络并不会一直保持联通,会根据运维等需要按需连通网络,因此根据实际的边缘节点的在离线比例,单集群可以管理边缘节点的规模可以同比例的放大。此外,在Kubernetes控制面叠加使用数据分片技术,将不同的资源存储到相应的etcd存储,可以很容易突破更大的规模。

KubeEdge如何实现大规模边缘节点接入

1)高效的云边消息通道

List-watch是Kubernetes组件内部统一的异步消息处理机制,list-watch由list和watch两部分组成。list通过调用资源的list API获取资源,可以获取资源的全量数据,基于HTTP短链接实现;watch通过调用资源的watch API监测资源变更事件,持续获取资源的增量变化数据,基于HTTP长链接和分块传输编码实现。在原生的Kubernetes中,每个node节点除了list-watch node本身、分配到本节点的pod以及全量的service元数据外,Kubelet 还必须watch(默认)运行的Pod使用数据卷挂载的 Secret 和 ConfigMap,在大规模的集群中,随着节点和pod规模的增加,list-watch的数量是非常大的,极大的增加了Kube-apiserver的负担。

KubeEdge采用双向多路复用的边云消息通道,支持websocket(默认)和quic协议,边缘侧EdgeCore主动发起和云端CloudCore连接,CloudCore list-watch Kubernetes资源的变化,并通过云边双向通道主动将元数据下发至边缘测。上行元数据,如边缘侧节点状态和应用状态,EdgeCore通过云边通道上传至CloudCore,CloudCore将接收到的元数据上报到kube-apiserver。

CloudCore统一负责上行和下行数据的汇聚处理,Kube-apiserver只有来自CloudCore的数个 list-watch请求,极大的降低了Kube-apiserver的负担,集群的性能得到了提高。

在同等节点和pod规模下,原生Kubernetes kube-apiserver的memory使用

Kubernetes + KubeEdge场景下,kube-apiserver的memory使用

2)可靠和增量的云边数据传输

在边缘网络拓扑复杂、网络通信质量低的场景下,云边通信面临着网络时延高、闪断闪连、频繁断连等问题。当云边网络恢复,边缘节点重新连接到云端时,边缘到云端会产生大量的全量List请求,从而对Kube-apiserver造成比较大的压力。在大规模场景下,将会给系统稳定性带来不小的挑战。KubeEdge采用基于增量数据的云边推送模式,云端会记录成功发送到边缘侧的元数据版本号,当云边网络中断重新连接时,云端会从记录的元数据版本号开始增量发送,可以解决边缘重连或者watch失败时的重新全量list引发的kube-apiserver压力问题,相比原生Kubernetes架构可以提升系统稳定性,保障在高时延、低质量网络环境下正常工作。

3)边缘极致轻量+云边消息优化

KubeEdge边缘侧EdgeCore对原生的kubelet进行了裁剪,去除了in-tree volume、cloud-provider等边缘场景下用不到的特性,压缩节点上报的状态信息,以及通过优化边缘代理软件资源占用,EdgeCore最低开销只需70MB内存,最小可支持百兆边缘设备。同时,通过WebSocket通道统一管理所有的云边连接,以及对云边的消息合并,数据压缩等,大幅减少云边的通信压力,减轻了对管理面的访问压力,保障在高时延高抖动下仍可正常工作。

100,000边缘节点接入下,云端ELB连接数为100,000。

100,000边缘节点以及超过1,000,000 pod场景下,云端ELB网络流入速率约为3MB/s, 平均到每个边缘节点上行带宽约为0.25Kbps。

下一步计划

目前我们只是测试了大规模场景下节点和pod的场景,下一步我们将对边缘设备device、边云消息、边缘服务网格进行针对性测试。此外,针对边缘的一些特殊场景,如大规模节点网络中断重连、边缘网络高时延、闪断闪连等,我们需要引入新的 SLIs/SLOs来衡量集群的服务质量,并进行进一步的大规模测试。

2022年6月25日,CNCF KubeEdge社区首届云原生边缘计算峰会(KubEdge Summit 2022)将在北京/线上同步进行。本次峰会,是面向开发者的一场技术盛会,聚合行业伙伴、开发者、业界大咖、技术专家,聚焦边缘计算最为关切的话题,激发一体化的边端云协同解决效能,让边缘计算的应用实践触手可及。KubeEdge社区诚邀全球开发者、企业共话行业新机遇!

华为伙伴暨开发者大会2022火热来袭,重磅内容不容错过!

【精彩活动】

勇往直前·做全能开发者→12场技术直播前瞻,8大技术宝典高能输出,还有代码密室、知识竞赛等多轮神秘任务等你来挑战。即刻闯关,开启终极大奖!点击踏上全能开发者晋级之路吧!

【技术专题】

未来已来,2022技术探秘→华为各领域的前沿技术、重磅开源项目、创新的应用实践,站在智能世界的入口,探索未来如何照进现实,干货满满点击了解

点击关注,第一时间了解华为云新鲜技术~

重磅!KubeEdge单集群突破10万边缘节点|云原生边缘计算峰会前瞻的更多相关文章

  1. KubeEdge:下一代云原生边缘设备管理标准DMI的设计与实现

    摘要:KubeEdge设备管理架构的设计实现,有效帮助用户处理设备数字孪生进程中遇到的场景. 本文分享自华为云社区<KubeEdge:下一代云原生边缘设备管理标准DMI的设计与实现>. 随 ...

  2. Synology群晖100TB万兆文件云服务器NAS存储池类别 RAID 6 (有数据保护)2021年7月29日 - Copy

    Synology群晖100TB万兆文件云服务器NAS存储池类别 RAID 6 (有数据保护)2021年7月29日 - Copy https://www.autoahk.com/archives/367 ...

  3. 重磅!业界首个云原生批量计算项目Volcano正式晋级为CNCF孵化项目

    摘要:4月7日,云原生计算基金会(CNCF)宣布,由华为云捐献的业界首个云原生批量计算项目Volcano正式晋级为CNCF孵化项目. 4月7日,云原生计算基金会(CNCF)宣布,由华为云捐献的业界首个 ...

  4. ​第3届云原生技术实践峰会(CNBPS 2020)重磅开启,“原”力蓄势待发!

    CNBPS 2020将在11月19-21日全新启动!作为国内最有影响力的云原生盛会之一,云原生技术实践峰会(CNBPS)至今已举办三届. 在2019年的CNBPS上,灵雀云CTO陈恺喊出"云 ...

  5. linux下突破10万高并发的nginx性能优化经验

    一.这里的优化主要是指对nginx的配置优化,一般来说nginx配置文件中对优化比较有作用的主要有以下几项:1)nginx进程数,建议按照cpu数目来指定,一般跟cpu核数相同或为它的倍数.worke ...

  6. 突破10万高并发的nginx性能优化经验(含内核参数优化)

    写的很好,推荐阅读. 转载:http://www.cnblogs.com/kevingrace/p/6094007.html 在日常的运维工作中,经常会用到nginx服务,也时常会碰到nginx因高并 ...

  7. 阿里云如何基于标准 K8s 打造边缘计算云原生基础设施

    作者 | 黄玉奇(徙远)  阿里巴巴高级技术专家 关注"阿里巴巴云原生"公众号,回复关键词 1219 即可下载本文 PPT 及实操演示视频. 导读:伴随 5G.IoT 的发展,边缘 ...

  8. 云原生时代, Kubernetes 多集群架构初探

    为什么我们需要多集群? 近年来,多集群架构已经成为“老生常谈”.我们喜欢高可用,喜欢异地多可用区,而多集群架构天生就具备了这样的能力.另一方面我们也希望通过多集群混合云来降低成本,利用到不同集群各自的 ...

  9. 从 lite-apiserver 看 SuperEdge 边缘节点自治

    引言 在 SuperEdge 0.2.0版本中,lite-apiserver 进行了重大的架构升级和功能增强.本文将从 lite-apiserver 实现及其与其它 SuperEdge 组件协同的角度 ...

  10. SuperEdge 云边隧道新特性:从云端SSH运维边缘节点

    背景 在边缘集群的场景下边缘节点分布在不同的区域,且边缘节点和云端之间是单向网络,边缘节点可以访问云端节点,云端节点无法直接访问边缘节点,给边缘节点的运维带来很大不便,如果可以从云端SSH登录到边缘节 ...

随机推荐

  1. python加解密小工具

    1.地址 https://github.com/Doneone/RSA_GUI 2.用法 python3 rsa_gui.py 创建密钥对 3.思考 为什么要写rsa小工具呐,因为单纯想实现一个简单的 ...

  2. zabbix 监控 IPMI

    1.IPMI的相关介绍: 智能平台管理接口(Intelligent Platform Management Interface)原本是一种Intel架构的企业系统的周边设备所采用的一种工业标准.IPM ...

  3. 堆优化模拟退火(List-Based Simulated Annealing|List-Based SA|LBSA|模拟退火) 算法

    图炸了的话请多刷新几次(upd:8.9) 堆优化模拟退火(List-Based Simulated Annealing) 算法 引入 堆优化模拟退火(List-Based Simulated Anne ...

  4. DS必背合集

    Data Structure必背合集 一.链表.栈和队列 1.简述说明数据的存储结构: 答: (1)顺序存储:逻辑上相邻的两个元素的物理位置也相邻. 优点:能够随机存取. 缺点:插入删除需要移动大量的 ...

  5. AcWing 190. 字串变换

    原题连接:AcWing 190. 字串变换 题意: 已知有两个字串 \(A, B\) 及一组字串变换的规则(至多 \(6\) 个规则): \(A_1→B_1\) \(A_2→B_2\) \(-\) 规 ...

  6. Educational Codeforces Round 103 (Rated for Div. 2) A~D题解

    写在前边 链接:Educational Codeforces Round 103 (Rated for Div. 2) A. K-divisible Sum 链接:A题链接 题目大意: 要求构造一个\ ...

  7. 等保测评之主机测评——Centos7

    目录 基础信息收集 (一)身份鉴别 (二)访问控制 (三)安全审计 (四)入侵防范 (五)恶意代码防范 (六)可信验证 (七)数据完整性 (八)数据保密性 (九)数据备份恢复 (十)剩余信息保护 命令 ...

  8. cyclone3内部资源

    CycloneIII内部资源概述 目录 CycloneIII内部资源概述 Logic Elements and Logic Array Blocks(逻辑元件和逻辑阵列块) LE LAB LAB In ...

  9. MySQL-mysqldump 报错:[ERROR] unknown variable 'local_infile=1'.

    版权声明:原创作品,谢绝转载!否则将追究法律责任. ----- 作者:kirin mysqldump: [ERROR] unknown variable 'local_infile=1'. 解决方法: ...

  10. AntDesignBlazor示例——新建项目

    本示例是AntDesign Blazor的入门示例,在学习的同时分享出来,以供新手参考. 1. 开发环境 VS2022 17.8.2 .NET8 AntDesign 0.16.2 2. 学习目标 创建 ...