14

边缘计算,如何啃下集群管理这块硬骨头?

 3 years ago
source link: http://dockone.io/article/10725
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

导读

边缘计算平台,旨在将边缘端靠近数据源的计算单元纳入到中心云,实现集中管理,将云服务部署其上,及时响应终端请求。

然而,成千上万的边缘节点散布于各地,例如银行网点、车载节点等,节点数量甚至可能是几万到十几万,这就会对节点的承载能力造成巨大冲击。Kubernetes 官方数据是可以支持纳管 5000 节点,如果想要纳管更多的边缘节点,该如何设计边缘计算平台架构呢?

本文针对以上问题,提供一些博云的解决思路。

多集群管理

多集群可以有效地扩展纳管节点的规模,而对 kubernetes 多集群的管理,各厂商的实现方式各有不同,不同的 API,不同的特性,因此市场上很难形成标准的解决方案。

现有的官方 kubernetes 多集群管理解决方案是 kubefed(Federation V2),即 kubernetes 联邦。Federation V1早在 kubernetes 1.6 版本就开始提供服务,但由于V1架构的限制,无法灵活支持更新的 k8s API 接口,加上其他很多问题影响集群管理的效率,因此 Federation V1 在 kubernetes 1.11 版本正式被弃用,现在提供服务的是 Federation V2。

7nEzaiF.jpg!mobile

由架构图实现可以看出,Federation V2 在 k8s 之上定义了一些资源,用 cluster configuration 记录集群的 endpoint,secret 等认证信息,type configuration 来定义需要用 Federation 托管的资源类型,提供了调度器来平衡各个集群的负载,以及多集群的 DNS 功能。

这种 controller 级别的集群管理,提供了丰富的集群间交互功能,更适用于异地多中心的集群灾备等场景。在边缘场景,一个边缘端可能就是一个小集群(存在多个计算单元可以组成集群),这样会使得集群数量不断增多,进而对 Federation 的执行效率、API 的响应时间都会有较为明显的影响。那么,该如何削弱集群数量的不确定性所带来的影响呢?

下面为大家展示,我们在 KubeEdge 架构下如何解决多节点的问题。

Cloudcore 横向扩展

KubeEdge 架构下的云边协同通信采用 websocket 方式,quic 作为备选。其中 websocket 性能最好,quic 在弱网络(频繁断开)情况下优势较大,通信的服务端都是由 cloudcore 来实现。

这里我们引入一个逻辑集群的概念,即每个 cloudcore 可以看做是一个集群,横向扩展多个 cloudcore 对接下层数量较大的边缘节点,向上只依托在一个 kubernetes 集群即可,架构如下所示:

reemI33.jpg!mobile

这样设计有如下几点优势:

解决单个 cloudcore 消息转发/接收等处理的性能瓶颈;

应用/设备的发布请求在 api-server 会被 cloudcore 监听捕获到,转而由对应的 cloudcore 来处理请求到边端,这样缓解了 k8s 集群的压力;

中心云只需要一套 k8s 集群,调用链简单清晰,易于管理。

测试实现

环境信息:

zA3YvmM.jpg!mobile

测试集群单 master 节点,管理一个 node1 工作节点,cloudcore 运行在 maser 节点上,并已接入 edge1 边缘节点。

现在测试 node1 上创建 cloudcore 服务,将新的边缘节点 edge2 接入,节点组图如下:

eqQnmqN.jpg!mobile

集群下已有 cloudcore 和 edgecore,node1 是 k8s 的 x86 普通节点,现在该节点上运行 cloudcore 提供服务。

  • 拷贝 cloudcore 二进制文件
  • 重新生成证书
  • 生成 cloudcore.yaml 配置文件
  • 拷贝 k8s 集群的 kubeconfig 并将路径配置到 cloudcore.yaml
  • 启动 cloudcore

edge2 是作为待接入集群的边缘节点,在该节点上运行 edgecore, server 指向 node1,启动服务。

rIzMvau.jpg!mobile

可以看到 edge2 已经注册到 node1 上的 cloudcore 并同步节点信息到 k8s,测试发布服务到 edge1 上:

JZ7ZZrr.jpg!mobile

总结

本文通过讨论多集群的方式来扩展纳管边缘节点的规模,分析了以 kubefed 联邦进行多集群管理机制,对比不同场景下的特点,介绍了 KubeEdge 中利用横向扩展 cloudcore 的解决方案,并在测试环境部署实践。

在实际生产环境中,博云 BeyondEdge 边缘计算平台依托于博云 BeyondContainer 容器云平台,提供云上服务的编排、治理、DevOps 等云原生能力,利用 KubeEdge 将这些能力延伸到边缘节点,并将边缘设备抽象到云端 BeyondContainer容器云中,作为孪生设备资源,统一访问入口。

并且,运行在云端的边缘平台组件 cloudcore 作为应用服务部署在BeyondContainer容器云中,充分利用容器云的产品能力,将 cloudcore 以高可用方式部署在 kubernetes 中心云,通过 ingress 暴露服务接口提供给边缘节点的组件 edgecore 访问,可以根据边缘节点实际接入量动态扩展 cloudcore,作为逻辑上的集群扩展以提高中心云对边缘节点的承载能力。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK