zoukankan      html  css  js  c++  java
  • 从架构设计理念到集群部署,全面认识KubeEdge

    摘要:本篇文章将从KubeEdge架构设计理念、KubeEdge代码目录概览、KubeEdge集群部署三方面带大家认识KubeEdge。

    KubeEdge即Kube+Edge,顾名思义就是依托K8s的容器编排能力和调度能力,实现云边协同、计算下沉、海量设备的平滑接入。本篇文章将从KubeEdge架构设计理念、KubeEdge代码目录概览、KubeEdge集群部署三方面带大家认识KubeEdge。

    KubeEdge架构设计理念

    1、Kubernetes的架构

    这里是一个经典的K8s架构,K8s相信大家已经了解比较多了,它主要是分为控制面和数据面,而现在K8s的生态已经非常火爆了,关于应用管理和容器管理已经形成了一套标准,这里列举了它的一些优势:

    • 只有API server可以访问etcd
    • 组件通过 API Server 访问集群状态
    • API采用声明式设计
    • API对象彼此互补、可组合
    • 优先使用事件监听而不是轮询

    2、基于Kubernetes构建边缘计算的优势与痛点

    核心优势主要有4方面:

    容器化应用封装现在已经成为应用交付的一个趋势,我可以把我的应用打包到容器里,我只打包一次,可以跑在各种地方,这种如果应用到我们IOT领域,我们传统有很多IOT嵌入式设备,它其实很多硬件和软件强相关的,如果换一个硬件,可能软件就要更改,如果说我这个容器化封装以后,设备可支持容器runtime,我可以将容器跑在任何IOT设备上。

    通用应用抽象定义:K8s的API,包括development、pod现在其实在业内已经形成一套标准,大家都比较了解和认可,其实我们基于这些应用做这个平台,大家也更能容易接受。

    松耦合架构:它的可扩展性比较好,比如我们基于K8s之上可以通过CRD来定义一些API,像我们通过设备管理CRD来定义一些IOT里device的一些API,到时候我们可以直接通过K8s的一些方式来管理这些设备;还有一些可扩展,比如它的CIA可以对接各种runtime,我们有些边缘节点它的资源非常有限,我们就可以对接一些轻量化的runtime。

    其关键痛点有:

    1)资源有限

    网关设备,128MB内存

    K8s集群需要至少1G内存

    2)网络不畅

    边缘位于私有网络,无公网IP

    云边跨越公网,带宽有限,延迟高

    K8s的List-watch需要数据中心网络

    3)边缘如何离线自治

    网络不稳,随时可能离线

    边缘业务离线可工作

    边缘离线可故障恢复

    4)设备接入和管理

    缺少边缘设备抽象

    缺少边缘设备接入协议支持

    3、KubeEdge 架构与核心理念

    我们这个架构主要是分了云、边、端三部分,云上边就是我们的控制面,边就是我们的边缘节点,端就是跑了我们的一些端侧设备,云上左边是一个K8s的master,是没有做过改动的原生的K8s控制面,后边我们加了我们的一个组件叫CloudCore,它云上的组件主要是会拿一些K8s控制面上的东西,通过EdgeController和DeviceController做一些处理,然后通过下边的Cloud Hub,Cloud Hub主要是跟边端通信的,边端有个EdgeHub和Cloud Hub通信,然后把数据拿下来。

    边端是主要做了一个应用管理和设备管理的能力,应用管理左边会有一个Edged,右边有DeviceTwin、EventBus,分别是应用管理和设备管理,左边有个DataStore,就是我们说的本地自治的能力,比如说我们这应用或者设备的元素从云上分发下来,我们是先把它存到一个数据库里,然后再到它的Edged或者设备里边,这样就能保证云边网络断开或者边缘节点重启了以后我应用的Edged它可以从数据库里把应用源数据拿出来,这样就能保证在故障的情况下业务可以正常恢复。

    核心理念:

    1)云边可靠协同

    双向多路复用消息通道,支持边缘节点位于私有网络

    Websocket + 消息封装,大幅减少通信压力,高时延下仍可正常工作

    云边消息校验,网络不稳定时不丢数据

    2)边缘离线自治

    节点元数据持久化,实现节点级离线自治

    节点故障恢复无需List-watch,降低网络压力,快速ready

    3)边缘极致轻量

    重组Kubelet功能模块,极致轻量化(~70mb内存占用)

    支持CRI集成Containerd、CRI-O,优化runtime资源消耗

    4)边缘设备管理

    云端通过Kubernetes API管理边缘Device

    4、KubeEdge 社区生态

    KubeEdge致力于将Kubernetes的能力拓展到边缘

    • 业界首个边缘容器平台项目
    • Apache 2.0协议
    • 2019年3月捐给CNCF基金会
    • 2020年9月晋级为孵化级托管项目
    • K8s IoT Edge WG参考架构
    • 基于Kubernetes构建,100%兼容K8s API
    • 9个特性版本,最新版本为v1.4.0
    • 3100+ Star,810+ Fork,500+贡献者
    • 目前成立Device/IoT与MEC两个SIG
    • 参与社区贡献的企业包括:中国联通,ARM,中国移动,谐云,中国电信,时速云,,浙大SEL实验室,EMQ,InfoBlox,Inovex,Midokura等

    KubeEdge代码目录概览

    ADOPTERS就是我们社区的一些采纳者,比如说你用了KubeEdge,并且想成为参与者,建议者,你可以提一个PR,把你们写到这个ADOPTER里面去,下面的这些就是代码目录,主要就是cloud(云端)、edge(边缘端)、mappers(接入设备的mapper端),还有OWNERS是我们项目的一些matiner,主要负责核代码,比如你对我们社区贡献比较多,我们可以把你加到OWNERS,帮我们核代码和检视代码。

    KubeEdge集群部署

    1、KubeEdge 集群部署工具—— keadm

    这个是借鉴了K8s的Kubeadm,可以一键部署KubeEdge集群,在部署KubeEdge集群时,要先装一个K8s的master,这个master用任何符合K8s的标准都可以,这个 keadm是基于K8s之上部署KubeEdge系统。

    子命令参数:

    init:部署云端组件

    join:部署边缘端组件

    gettoken:从云端获取边缘端启动凭据

    reset:重置KubeEdge集群的云端和边缘端

    2、KubeEdge 部署 —— 云端

    在已经装好的master上装我们的云端,用 init即可:

    重要参数:

    --kube-config:连接K8s Master的凭据

    --advertise-address:签发到边缘证书里的IP地址

    3、KubeEdge 部署 —— 边缘端

    边缘端主要用我们的join命令:

    重要参数:

    --token:边缘端启动时访问云端的凭据

    --cloudcore-ipport:边缘端访问的云端IP地址

    本文分享自华为云社区《KubeEdge架构解读:云原生的边缘计算平台》,原文作者:技术火炬手。

     

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

  • 相关阅读:
    bzoj1415 NOI2005聪聪和可可
    Tyvj1952 Easy
    poj2096 Collecting Bugs
    COGS 1489玩纸牌
    COGS1487 麻球繁衍
    cf 261B.Maxim and Restaurant
    cf 223B.Two Strings
    cf 609E.Minimum spanning tree for each edge
    cf 187B.AlgoRace
    cf 760B.Frodo and pillows
  • 原文地址:https://www.cnblogs.com/huaweiyun/p/14388019.html
Copyright © 2011-2022 走看看