摘要:K8s正在向边缘计算渗透,它为边缘侧的应用部署提供了便利性,在一定程度上转变了边缘应用与硬件之间的关系,将两者的耦合度降低。

本文分享自华为云社区《云原生在物联网中的应用【拜托了,物联网!】》,作者: kaliarch。

前言

物联网已经产生了数量惊人的数据,随着5G网络的部署,这些数据将呈指数级增长。管理和使用这些数据是一个挑战。

无论是从交通摄像头、气象传感器、电表等会产生信息,这些信息与智能城市环境中,其他摄像头和传感器的数据相结合,在一个中心位置处理起来可能会太多,尤其是当你在预期设备会对事件做出反应时。

超大规模云计算环境中已被普遍使用的Kubernetes(简称K8s),带入到物联网边缘计算场景中。新成立的Kubernetes物联网边缘工作组将采用运行容器的理念并扩展到边缘,促进K8s在边缘环境中的适用。

  • 支持将工业物联网IoT的连接设备数量扩展到百万量级,既可支持IP设备以直连方式接入K8s云平台,又可支持非IP设备通过物联网网关接入。
  • 利用边缘节点,让计算更贴近设备侧,以便减少延迟、降低带宽需求和提高可靠性,满足用户实时、智能、数据聚合和安全需求:
    • 将流数据应用部署到边缘节点,降低设备和云平台之间通信的带宽需求。
    • 部署无服务器应用框架,使得边缘侧无需与云端通讯,便可对某些紧急情况做出快速响应。
  • 在混合云和边缘环境中提供通用控制平台,以简化管理和操作。

一 背景

1.1 KubeEdge简介

KubeEdge 是一个开源的系统,可将本机容器化应用编排和管理扩展到边缘端设备。 它基于Kubernetes构建,为网络和应用程序提供核心基础架构支持,并在云端和边缘端部署应用,同步元数据。KubeEdge 还支持 MQTT 协议,允许开发人员编写客户逻辑,并在边缘端启用设备通信的资源约束。KubeEdge 包含云端和边缘端两部分。

1.2 KubeEdge特点

边缘计算

通过在边缘端运行业务逻辑,可以在本地保护和处理大量数据。KubeEdge 减少了边和云之间的带宽请求,加快响应速度,并保护客户数据隐私。

简化开发

开发人员可以编写常规的基于 http 或 mqtt 的应用程序,容器化并在边缘或云端任何地方运行。

Kubernetes 原生支持

使用 KubeEdge 用户可以在边缘节点上编排应用、管理设备并监控应用程序/设备状态,就如同在云端操作 Kubernetes 集群一样。

丰富的应用程序

用户可以轻松地将复杂的机器学习、图像识别、事件处理等高层应用程序部署到边缘端。

二 KubeEdge简介

2.1 KubeEdge架构

2.2 架构详解

2.2.1 云上部分

  • CloudHub: CloudHub 是一个 Web Socket 服务端,负责监听云端的变化, 缓存并发送消息到 EdgeHub。
  • EdgeController: EdgeController 是一个扩展的 Kubernetes 控制器,管理边缘节点和 Pods 的元数据确保数据能够传递到指定的边缘节点。
  • DeviceController: DeviceController 是一个扩展的 Kubernetes 控制器,管理边缘设备,确保设备信息、设备状态的云边同步。

2.2.2 边缘部分

  • EdgeHub: EdgeHub 是一个 Web Socket 客户端,负责与边缘计算的云服务(例如 KubeEdge 架构图中的 Edge Controller)交互,包括同步云端资源更新、报告边缘主机和设备状态变化到云端等功能。
  • Edged: Edged 是运行在边缘节点的代理,用于管理容器化的应用程序。
  • EventBus: EventBus 是一个与 MQTT 服务器(mosquitto)交互的 MQTT 客户端,为其他组件提供订阅和发布功能。
  • ServiceBus: ServiceBus是一个运行在边缘的HTTP客户端,接受来自云上服务的请求,与运行在边缘端的HTTP服务器交互,提供了云上服务通过HTTP协议访问边缘端HTTP服务器的能力。
  • DeviceTwin: DeviceTwin 负责存储设备状态并将设备状态同步到云,它还为应用程序提供查询接口。
  • MetaManager: MetaManager 是消息处理器,位于 Edged 和 Edgehub 之间,它负责向轻量级数据库(SQLite)存储/检索元数据。

三 实战部署

3.1 keadm部署

注意事项:

  • 目前支持keadmUbuntu 和 CentOS 操作系统。RaspberryPi 支持正在进行中。
  • 需要超级用户权限(或 root 权限)才能运行。

3.1.1 设置云端(KubeEdge 主节点)

默认情况下10000,10002边缘节点需要可以访问 Cloudcore 中的端口和端口。

keadm init将安装 cloudcore,生成证书并安装 CRD。它还提供了一个可以设置特定版本的标志。

重要说明: 1. kubeconfig 或 master 中至少一个必须正确配置,以便用于验证 k8s 集群的版本和其他信息。1.请确保边缘节点可以使用云节点的本地IP连接云节点,或者您需要使用--advertise-address标志指定云节点的公共IP 。1. --advertise-address(1.3版本后才有效)是云端暴露的地址(会加入到CloudCore证书的SAN中),默认值为本地IP。

例子:

# keadm init --advertise-address="THE-EXPOSED-IP"(only work since 1.3 release)

输出:

Kubernetes version verification passed, KubeEdge installation will start...
...
KubeEdge cloudcore is running, For logs visit: /var/log/kubeedge/cloudcore.log

3.1.2 设置边缘端(KubeEdge 工作节点)

  • 从云端获取令牌

keadm gettoken在云端运行将返回令牌,该令牌将在加入边缘节点时使用。

# keadm gettoken
27a37ef16159f7d3be8fae95d588b79b3adaaf92727b72659eb89758c66ffda2.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1OTAyMTYwNzd9.JBj8LLYWXwbbvHKffJBpPd5CyxqapRQYDIXtFZErgYE
  • 加入边缘节点

keadm join将安装 edgecore 和 mqtt。它还提供了一个可以设置特定版本的标志。

例子:

# keadm join --cloudcore-ipport=192.168.20.50:10000 --token=27a37ef16159f7d3be8fae95d588b79b3adaaf92727b72659eb89758c66ffda2.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1OTAyMTYwNzd9.JBj8LLYWXwbbvHKffJBpPd5CyxqapRQYDIXtFZErgYE
  • 重要说明: 1. --cloudcore-ipportflag 是强制性标志。1. 如果要自动为边缘节点申请证书,--token则需要。1.云端和边缘端使用的kubeEdge版本要一致。

输出:

Host has mosquit+ already installed and running. Hence skipping the installation steps !!!
...
KubeEdge edgecore is running, For logs visit: /var/log/kubeedge/edgecore.log

3.2 二进制部署

注意事项:

  • 需要超级用户权限(或 root 权限)才能运行。

3.2.1 设置云端(KubeEdge 主节点)

  • 创建 CRD
kubectl apply -f https://raw.githubusercontent.com/kubeedge/kubeedge/master/build/crds/devices/devices_v1alpha2_device.yaml
kubectl apply -f https://raw.githubusercontent.com/kubeedge/kubeedge/master/build/crds/devices/devices_v1alpha2_devicemodel.yaml
kubectl apply -f https://raw.githubusercontent.com/kubeedge/kubeedge/master/build/crds/reliablesyncs/cluster_objectsync_v1alpha1.yaml
kubectl apply -f https://raw.githubusercontent.com/kubeedge/kubeedge/master/build/crds/reliablesyncs/objectsync_v1alpha1.yaml
  • 准备配置文件
# cloudcore --minconfig > cloudcore.yaml

详情请参考云配置。

  • 运行
# cloudcore --config cloudcore.yaml

3.2.2 设置边缘端(KubeEdge 工作节点)

3.2.2.1 准备配置文件

  • 生成配置文件
# edgecore --minconfig > edgecore.yaml
  • 在云端获取代币值:
# kubectl get secret -nkubeedge tokensecret -o=jsonpath='{.data.tokendata}' | base64 -d
  • 更新 edgecore 配置文件中的令牌值:
# sed -i -e "s|token: .*|token: ${token}|g" edgecore.yaml

这token就是上面步骤得到的。

详情请参考edge的配置。

3.2.2.2 运行

如果要在同一台主机上运行 cloudcore 和 edgecore,请先运行以下命令:

# export CHECK_EDGECORE_ENVIRONMENT="false"

启动边缘核:

# edgecore --config edgecore.yaml

运行edgecore -h以获取帮助信息并根据需要添加选项。

四 反思

K8s正在向边缘计算渗透,它为边缘侧的应用部署提供了便利性,在一定程度上转变了边缘应用与硬件之间的关系,将两者的耦合度降低。通过KubeEdge,拓展“边缘场景”,可帮助用户加速实现云边协同,在海量边、端设备上完成大规模应用的统一交付、运维与管控。

据Gartner估计,到2025年,超过75%的企业生成数据可以在传统数据中心和云之外创建和处理,像Kubernetes这样的编排系统前景光明,它已经被证明是完成这一任务的最佳工具。

参考资料

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

当物联网遇上云原生:K8s向边缘计算渗透中的更多相关文章

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

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

  2. 阿里云杨敬宇:边缘计算行业通识与阿里云ENS的技术演进之路

    近日,阿里云杨敬宇在CSDN阿里云核心技术竞争力在线峰会上进行了<5G基础设施-阿里云边缘计算的技术演进之路>主题演讲,针对5G时代下,行业和技术的趋势.边缘计算产业通识以及阿里云边缘计算 ...

  3. 云原生K8S精选的分布式可靠的键值存储etcd原理和实践

    @ 目录 概述 定义 应用场景 特性 为何使用etcd 术语 架构 原理 读操作 写操作 日志复制 部署 单示例快速部署 多实例集群部署 静态 etcd 动态发现 常见命令 概述 定义 etcd 官网 ...

  4. 充满含金量的一场云原生Meetup,入场券免费发送中……

    在武汉,你离这场云原生盛会,只有一步之遥 华为云.百度.斗鱼.海云基因,五位重量级专家 K8s调度.深度学习平台.斗鱼实战.基因大数据-五个干货议题 日,与您相约Cloud Native Days C ...

  5. KubeEdge v0.2发布,全球首个K8S原生的边缘计算平台开放云端代码

    KubeEdge开源背景 KubeEdge在18年11月24日的上海KubeCon上宣布开源,技术圈曾掀起一阵讨论边缘计算的风潮,从此翻开了边缘计算和云计算联动的新篇章. KubeEdge即Kube+ ...

  6. 【2019云栖大会】这一场,我们好好聊聊5G和边缘计算

    一年一度的科技盛会杭州云栖大会Apsara Conference就要来了9月25-27日数万名开发者将齐聚杭州云栖小镇共同探索人类科技演进的脉搏聚焦面向未来的创新.热点技术话题 5G和边缘计算是201 ...

  7. 【云享专刊】开源遇上华为云,OCP架构变身“云原生框架”

    摘要:华为云DTSE团队出品云原生改造指南,助力轻松实践OCP上云. 本文分享自华为云社区<[云享专刊]开源遇上华为云,OCP架构变身"云原生框架">,作者:华为云社区 ...

  8. 【视频】k8s套娃开发调试dapr应用 - 在6月11日【开源云原生开发者日】上的演示

    这篇博客是在2022年6月11日的[开源云原生]大会上的演讲中的演示部分.k8s集群套娃(嵌套)是指在一个k8s的pod中运行另外一个k8s集群,这想法看上去很疯狂,实际上非常实用. k8s集群套娃( ...

  9. 云原生项目实践DevOps(GitOps)+K8S+BPF+SRE,从0到1使用Golang开发生产级麻将游戏服务器—第1篇

    项目初探 项目地址: 原项目:https://github.com/lonng/nanoserver 调过的:https://github.com/Kirk-Wang/nanoserver 这将是一个 ...

  10. TKE 注册节点,IDC 轻量云原生上云的最佳路径

    林顺利,腾讯云原生产品经理,负责分布式云产品迭代和注册节点客户扩展,专注于云原生混合云新形态的推广实践. 背景 企业在持续业务运维过程中,感受到腾讯云 TKE 带来的便捷性和极致的使用体验,将新业务的 ...

随机推荐

  1. mysql练习案例(实操)

    最近想要在回去复习mysql语句,就在网上找了一些案例练习,起初找得都是零零散散的,后面参考这篇博客做出了一个实操案例.Eric_Squirrel:mysql学生表经典案例50题. 首先是建表,我用的 ...

  2. 单个Nginx发布多个react静态页面

    在有些网络环境中,端口是一种比较稀缺的资源,而我们又恰好有多个前端项目需要发布,我们可以采取将多个项目映射到同一个端口上面的方案加以解决. 本教程前端项目主要以react为主,部署在linux服务器上 ...

  3. 【misc】ctfshow-stega10 --套娃

    附件下载下来是一张图片 各种隐写工具一把梭,无果,分析其二进制数据,把图片拖进hxd,发现一段疑似base64的东西 base64解密试试 解密出来是一个网址,打开下载第二个附件:flag.zip,打 ...

  4. L2-028 秀恩爱分得快

    90行,调了俩小时,大约有以下坑点. 1.每个数字都可能正负出现,比如-0 0,-1 1,一开始以为一个数的正负只会出现一个. 2.当俩人都不出现在照片中,那么输出俩人就行 3.当其中一个人不在照片里 ...

  5. Django笔记四十一之Django中使用es

    本文首发于公众号:Hunter后端 原文链接:Django笔记四十一之Django中使用es 前面在 Python 连接 es 的操作中,有过介绍如何使用 Python 代码连接 es 以及对 es ...

  6. GPTs大受欢迎但问题多,企服软件厂商的AI Agent更被B端客户器重

    GPTs大受欢迎但问题多,企服软件厂商的AI Agent更被B端客户器重 比尔盖茨预言智能体是下个平台,超自动化平台的AI Agent更靠谱? 以GPTs为代表的AI Agent只是玩具?揭秘真实可用 ...

  7. SpringBoot整合数据可视化大屏使用

    整合数据可视化大屏是现代化应用程序中的一个重要组成部分,它可以帮助我们更直观地展示和理解大量的数据. 在Spring Boot框架中,我们可以使用一些优秀的前端数据可视化库来实现数据可视化大屏,例如E ...

  8. 前端学习-html-1

    html常用标签 h1-h6:标题 p:段落 strong/em: 对文本进行设置    strong--加粗,强调作用  比如:商品价格    em--斜体,对文本内容修饰成斜体 hr/br: hr ...

  9. three.js 汽车行驶效果

    实现原理是使用TWEEN.Tween实现动画效果 实现 汽车模型加载 使用Promise编写模型的异步加载方法 Car.prototype.loadCar = function (position, ...

  10. [NOI online22提高A] 丹钓战

    题目描述 有 \(n\) 个二元组 \((a_i, b_i)\),编号为 1 到 n. 有一个初始为空的栈 SS,向其中加入元素 \((a_i, b_i)\) 时,先不断弹出栈顶元素直至栈空或栈顶元素 ...