在KubeEdge上部署Shifu
如今十分流行的开源项目 KubeEdge
给开发者提供了一个基于 Kubernetes
的云边协同方案。它成功地将 Kubernetes
的集群编排能力融合到了物联网的边缘场景之中,使得对边缘算力的调度和管理更加轻量、也更加高效。
Shifu 作为同样基于 Kubernetes
的开源物联网开发框架,它对于多种设备的兼容和虚拟化将为 KubeEdge
在边缘端的应用提供助力。事实上,二者在能力上拥有非常好的互补性,在多设备兼容的同时,运行在 KubeEdge
上的 Shifu
可以轻松管理边缘端运行的轻量 Pod
。
有了 KubeEdge
+ Shifu 的强强联手,我们就可以把IoT设备抽象成 API
,把原本复杂的传统物联网开发模式转化为简单的Web开发模式!
下面就让我们来看一下如何让 Shifu 运行在 KubeEdge
上,并且给开发者们提供价值吧!
简介
本文将简单介绍在 KubeEdge
上部署 Shifu 的步骤,并接入一个海康威视的摄像头(使用 RTSP
进行视频流传输)的实例,为 KubeEdge
的架构加入海康威视摄像头支持。
本文使用的架构如下:

准备
本文使用了如下服务和工具:
Kubernetes
: 1.21.5kubectl
kubeadm
kubelet
Golang
: 1.16.10Docker
: 19.03.9KubeEdge
: 1.7.2
同时,KubeEdge
的 Cloud端
和 Edge端
分别运行在不同的 Linux
实例上,环境均为 Ubuntu Server 20.04
。
上述服务和工具中,Cloud端
需要安装全部上述服务和工具,而 Edge端
只需要安装 Docker
和 KubeEdge
。
第一步 在Cloud端部署Kubernetes
本步可以参考Kubernetes的官方教程进行部署。
在部署完成后我们应当看到终端打印出如下信息:

第二步 在Cloud端部署Shifu
将 Shifu 的 Github
仓库克隆到本地:
git clone https://github.com/Edgenesis/shifu.git
然后可以通过下列命令部署 Shifu:
kubectl apply -f shifu/pkg/k8s/crd/install/shifu_install.yml
部署完成后我们应当看到 Shifu 的 CRD controller
已经完成部署:

第三步 在Cloud端部署KubeEdge
本步可以参考 KubeEdge
的官方教程,使用 keadm
进行部署。
在部署完成后我们应当看到终端打印出如下信息:

第四步 在Cloud端获取token
运行如下命令:
keadm gettoken
请保存获得的token
以便Edge端使用。
现在Cloud端的配置告一段落,我们现在切换到Edge端的机器,让它加入集群。
第五步 在Edge端加入集群
在Edge端运行如下命令:
keadm join --cloudcore-ipport="<Cloud端advertise-address>:10000" --token=<第四步获得的token>
在部署完成后我们应当看到终端打印出如下信息:

此时切换回到Cloud端,查看nodes:

我们可以看到Cloud端和Edge端都已经部署完毕了。
现在我们可以开始部署设备了。
通过 KubeEdge
,我们可以做到只在Cloud端进行 Kubernetes
操作并且部署到Edge端,同时保持Edge端无需安装 Kubernetes
组件,保证轻量化。
第六步 在Cloud端修改海康威视摄像头的配置文件
Shifu 需要简单的配置文件来实现数字孪生的生成。在 Shifu 中,数字孪生被称为 deviceShifu,以 Pod
的形式运行在集群里。
Shifu 提供了接入海康威视摄像头的配置文件,其路径为 https://github.com/Edgenesis/shifu/tree/main/examples/rtspDeviceShifu/
。
Shifu 默认将 deviceShifu 部署在拥有完整 Kubernetes
实例的机器上。在 KubeEdge
的环境下,边缘端无需运行完整的 Kubernetes
,因此 Shifu 也准备了针对云边协同环境的轻量的 deviceShifu 供使用。我们可以更改 deviceshifu-camera-deployment.yaml
,让它使用边缘侧的 deviceShifu,并添加 nodeName
将其部署在 edge node
:

第七步 部署海康威视摄像头Pod
在Cloud端,运行下列命令:
kubectl apply -f shifu/examples/rtspDeviceShifu/camera-deployment
此时,我们可以查看camera相关的 Pod
:

最后一步 在Edge端进行确认
在Edge端,我们可以看到camera相关的Docker容器已经在运行了:

我们可以非常简单地调用 deviceShifu 提供的 capture
/stream
/info
/move
等一系列 HTTP API
,对摄像头进行操作,比如下面的动图:
相关命令:
curl edgedevice-camera/move

至此,我们就完成了在 KubeEdge
上运行 Shifu 的全部步骤。