智能边缘BIE

    如何正确地引入存储卷

    如我们的快速入门所述,在 BAETYL 具体部署和使用过程中,存储卷是一个频繁出现的词汇,尤其对于 BIE 云端 console 而言,存储卷是一个 必不可少、必须掌握(融会贯通) 的概念。

    存储卷:是指被 服务 使用的目录,可以是只读的目录,比如放置配置、证书、脚本等资源的目录,也可以是可写的目录,比如日志、数据等持久化目录。 存储卷挂载:服务是在容器内运行的,此时存在两种需求,一种是服务配置文件的获取,一种是服务数据持久化。我们是通过存储卷的挂载实现的,通过宿主机目录和容器内目录的映射,来实现配置读取和数据持久化。

    下文将从存储卷设计理念、模板介绍、创建、模板应用及存储卷应用等几个方面进行阐述。

    设计理念

    存储卷是对所有资源的抽象,用于管理配置、证书、AI 模型等资源。存储卷可实现资源的隔离和共享。服务只有绑定了存储卷才能使用存储卷里的资源;多个服务可以绑定同一个存储卷从而实现共享。

    注: 服务是指一组接受 BAETYL 控制的运行程序集合,用于提供某些具体的功能,比如消息路由服务、函数计算服务、微服务等。

    官方模板

    目前,官方提供 BAETYL 模块配置、计算配置、证书配置、自定义及空目录 5 类模板,各类模板释义及包含内容如下:

    • BAETYL 模块配置存储卷模板:为 BAETYL 各服务模块配置文件提供模板,如 hub、function-manager、function-python27、function-python36、function-node85、remote-mqtt、timer 等。
    • 计算配置存储卷模板:为 function-manager 服务具体计算服务提供配置模板,包含 CFC 函数模板和 BOS 文件模板两种。

      • CFC 函数模板:为 Python27、Python36、Nodejs85 等函数计算应用脚本提供从百度智能云 CFC 直接引入接口。需要注意的是,应用该模板时需要相关函数脚本已事先在百度智能云 CFC 创建好,且处于同一区域(北京或广州,不同区域间不能相互引用)。
      • BOS 文件模板:为 AI 模型使用提供从百度云 BOS 引入接口。需要注意的是,应用该模板时要求引入的模型文件已提前上传至百度智能云 BOS 存储,且处于同一区域(北京(BOS 含保定)或广州(BOS 含苏州),不同区域间不能相互引用),且目前仅支持通过 ZIP 压缩包方式引入。
    • 证书配置存储卷模板:主要用于提供与 Baetyl-hub 服务建立连接,或通过 Baetyl-remote-mqtt 模块与百度云 IoTHub 平台建立连接时所需要的 SSL/TLS 安全认证证书。

      • BIE 签发客户端证书模板:用于签发端设备或 MQTT Client 连接 Baetyl-hub 服务时采用 SSL/TLS 连接时所需要的客户端证书及 CA。
      • BIE 签发服务端证书模板:用于签发端设备或 MQTT Client 与 Baetyl-hub 服务建立 SSL/TLS 双向 安全连接所需要的服务端证书及 CA。需要注意的是,应用该存储卷时,其在 Baetyl-hub 模块的配置文件中存在的引用路径须与其挂载边缘核心时在 Docker 容器中的映射路径保持一致。
      • 百度智能云物接入客户端证书模板:主要用于签发边缘核心 Remote 模块与百度云 IoTHub 平台建立 SSL/TLS 安全连接时需要提供的客户端证书文件。需要注意的是,应用此存储卷要求在百度云 IoTHub 平台建立 endpoint 下的用户时应选择 "证书" 方式认证,且需要将从 IoTHub 平台获取的 cert-and-keys.txt 文件上传,通过该存储卷模板进行自动拆分(客户端证书及 CA)。
    • 自定义存储卷模板:可用于创建各种其他格式的文件,如 xmltomltxt 等。
    • 空目录存储卷模板:仅相当于目录,不能存入文件,主要用于挂载模块日志、模块数据持久化存储应用。

    模板应用及存储卷创建

    存储卷创建主要是创建 BAETYL 各模块服务部署所需要的存储卷。依据不同的需求场景,需要应用不同类别的存储卷模板创建不同类别的存储卷,并将之挂载到相关边缘核心,最终下发至本地边缘设备运行。如针对 Baetyl-hub 模块,通常应创建 3 个存储卷,即配置文件存储卷,数据持久化存储卷和日志存储卷;针对 Baetyl-function-manager 模块(Remote 模块同理),通常应创建 2 个存储卷,即配置文件存储卷和日志存储卷;针对 Baetyl-function-python27(function-python36,function-node85 同理)模块,通常应创建 2 个存储卷,即配置文件存储卷和 CFC 函数存储卷。若需要采用 SSL/TLS 安全证书连接,则对于 Baetyl-hub 模块、Baetyl-function-manager 模块、Baetyl-timer 模块和 Baetyl-remote-mqtt 模块来说,还需要额外挂载证书存储卷。

    存储卷创建的完整流程(空目录存储卷不需要 "发布新版本")如下:

    volume-create-flow.png

    下文将分别针对上文提到的各类存储卷分别举例介绍其创建过程。

    BAETYL 配置文件存储卷创建

    这里,我们以创建 Baetyl-hub 模块的配置文件存储卷为例进行介绍。

    首先,点击 "创建存储卷" 按钮开始创建存储卷,具体如下图示。

    image.png

    然后,我们选择存储卷模版 baetyl 模块配置,起名为 bie-demo-hub-conf 并点击 "确定"。

    image.png

    我们发现存储卷中已经默认生成了 service.yml 文件,这是 BAETYL 各服务模块默认的配置文件名。

    image.png

    接着,我们输入 Baetyl-hub 模块的配置信息:

    listen:
      - tcp://0.0.0.0:1883
    principals:
      - username: test
        password: hahaha
        permissions:
          - action: 'pub'
            permit: ['#']
          - action: 'sub'
            permit: ['#']
    subscriptions:
      - source:
          topic: 't'
        target:
          topic: 't/topic'
    logger:
      path: var/log/baetyl/service.log
      level: "debug"

    配置的定义为,我们有一个用户名为 test,密码为 hahaha 的接入身份,拥有所有 pub、sub 权限,并且 hub 会将主题 t 转发给主题 t/topic。更多配置解析请参考 配置文件说明

    image.png

    保存并发布新版本即可。

    image.png

    计算配置存储卷创建

    这里,我们分别以从 CFC 函数模板和 BOS 文件模板为例进行介绍。

    CFC 函数模板应用

    对于应用 CFC 函数模板创建代码存储卷,我们这里以从 CFC 引入 Python27 脚本为例进行说明。

    首先点击 "创建存储卷",选择模版 CFC函数模版,起名为 bie-demo-compute-code 并点击 "确定"。

    image.png

    选择引入 CFC 函数,选择我们事先从百度云 CFC 创建好的函数,目前能够支持 Python27、Python36 及 Nodejs85 脚本引入。

    image.png

    我们在 CFC 创建了一段简单代码,目前能够支持 Python27、Python36 及 Nodejs85 函数的导入

    def handler(event, context): 
        event["result"] = event["x"] + event["y"] + event["z"]
        return event

    然后发布新版即可。

    注: 应用 CFC 函数存储卷模板需要事先在 CFC 创建好函数脚本,且位于同一区域(北京或广州)。

    BOS 文件模板应用

    与引入 CFC 函数一样,应用 BOS 文件存储卷模板则是从百度云对象存储服务(BOS,Baidu Object Storage)引入相关内容文件,通常为大容量文件。

    点击 "创建存储卷",命名为 bos-volume,选择 "BOS 文件模板",点击 "确定"。

    image.png

    然后继续点击 "引入 BOS Zip 包",选择相应的 Bos Bucket 和 Bos Key(存储在 BOS 的文件名),并点击 "确定"。

    image.png

    若上述操作顺利,则可以成功将 Zip 包 demo_meter_V4.zip 引入,在正确引入后,云端平台会自动解压缩引入的 Zip 包,并将解压缩后的结果展示出来,具体如下图所示。

    image.png

    可以发现,我们已经成功从 BOS 引入 var 目录,后面直接发布新版本即可。需要说明的是,与 CFC 函数模板一样,从 BOS 引入同样需要事先将需要引入的 Zip 包 上传至 BOS,且需要位于同一个区域(广州(BOS 含苏州)或北京(BOS 含保定))。

    证书配置存储卷创建

    证书配置存储卷模板主要包含 BIE 签发客户端证书、BIE 签发服务的证书及百度云物接入客户端证书 3 种,下面将分别一一举例说明。

    BIE 签发客户端证书

    通过 BIE 签发客户端证书主要是端设备或连接 Baetyl-hub 服务的 MQTT Client 选择采用 SSL/TLS 连接时应用,应用此模板可以通过 BIE 直接为用户提供官方签发的安全证书。其涉及的相关步骤如下:

    点击 "创建存储卷" 按钮,输入名称为 baetyl-hub-client-cert,点击 "确定"。

    image.png

    然后继续点击 "生成证书" 按钮,输入域名(可以为空,或连接 Baetyl-hub 模块的服务名称,或是自定义 Hub 模块所在机器的域名),并点击 "确定"。

    image.png

    若上述操作无误,则可以看到生成的 ca.pem,client.pem 及 client.key 三本证书。

    image.png

    如上图所示,在创建完成后,点击 "下载存储卷 ZIP 包",将生成的证书下载并解压缩,用于建立 TLS/SSL 连接。

    BIE 签发服务端证书

    同上面 BIE 签发客户端证书步骤完全一致,只是这里在创建存储卷时候选择 "BIE 签发服务端证书" 模板即可,创建过程如下图所示。

    image.png

    image.png

    image.png

    与 BIE 签发客户端证书还略有不同的是,在创建完成后,不用 "下载存储卷 ZIP 包",而是选择发布新版本,并将之挂载到 Baetyl-hub 服务模块,供连接 Baetyl-hub 服务的客户端认证使用。

    百度云物接入客户端证书

    与上面通过 BIE 签发客户端、服务端证书不同的是,这里主要是生成百度云物接入客户端证书,用于通过 Remote 模块向百度云物接入同步数据采用 SSL/TLS 连接认证使用。

    特别需要指出的是,在应用此存储卷模板进行存储卷创建时,需要事先在百度云物接入平台创建相关 endpoint,并在创建用户时,给用户连接认证选择证书认证方式,且需要将百度云物接入提供的认证证书一体文件(cert-and-keys.txt)下载下来,相关内容可参考 百度智能云物接入官方文档

    然后,切换智能边缘存储卷创建页面并点击 "创建存储卷" 按钮,输入名称 remote-iothub-cert,点击 "确定"。

    image.png

    继续点击 "上传证书文件" 按钮,阅读《隐私政策》和《百度智能云用户服务协议》,若无疑义,点击 "确认上传" 按钮,从本地选择需要上传的 "cert-and-keys.txt"(从百度智能云物接入平台下载),然后点击 "确定"。

    image.png

    若上述操作正常,则可以看到已被拆解的 ca.pemclient.pemclient.key 三本证书文件(主要用于 Remote 模块连接百度云物接入采用 SSL/TLS 认证),然后发布新版本即可。

    image.png

    自定义存储卷创建

    顾名思义,自定义存储卷为让用户更方便地使用存储卷而提供,它的格式、内容不受 BAETYL 框架的约束(如各模块的配置文件都是 yaml 文件格式)、限制,允许用户放置任意格式的文件,存储任意内容。

    这里,我们以用户需要加载一个自定义的模块为例进行说明。假若用户想要基于 BAETYL 框架引入一个自定义模块,但模块的配置文件是 toml 格式,那么在创建该自定义模块配置文件存储卷时,即可选择采用自定义存储卷进行创建、挂载。

    与上文创建其他存储卷一样,点击 "创建存储卷" 按钮,输入创建存储卷的名称为 cutomize-module-conf,然后选择 "自定义存储卷模板",点击 "确定"。

    image.png

    然后点击 "创建可编辑文件",给新文件命名为 service.toml,然后在可编辑框输入相关配置信息,点击 "保存",然后发布新版本即可。

    image.png

    至此,一个自定义模块的配置文件存储卷就创建好了。

    image.png

    此外,如上图所示,不难发现,在选择自定义存储卷模板后,不仅可以创建可编辑文件(在线编辑),还可以直接上传 ZIP 包,给用户自定义模块的顺利引入提供了便利。

    空目录存储卷创建

    上文提到,在用于记录模块日志、进行数据持久化时,我们需要应用空目录存储卷模板。这里,我们以建立 Baetyl-hub 模块日志存储卷为例进行介绍。

    首先,点击 "创建存储卷",然后我们选择存储卷模版 空目录存储卷,起名为 bie-demo-hub-log 并点击 "确定"。

    image.png

    空目录存储卷创建即会发布一个新版本(V1),它不可以新增修改文件,只是起到 "文件夹/目录" 作用。

    存储卷应用

    上文提到,存储卷创建好主要用于挂载在边缘核心服务,供各模块服务使用存储卷的资源,且多个服务可以共享同一个存储卷。

    一般来说,可以先完成存储卷的创建(推荐),然后再创建边缘核心,为边缘核心添加各模块服务,并为每个服务挂载相应的存储卷,接着为边缘核心生成新的配置并下发。

    相关的流程如下图所示:

    volume-application-flow.png

    此外,对于已经处于应用中的核心,如果想要更新某个服务的存储卷配置,则相应的存储卷版本更新流程如下。

    volume-update.png

    相关页面操作示意图如下所示。

    image.png

    image.png

    至此,关于存储卷应用的内容就介绍完了。

    一篇
    核心管理
    一篇
    存储卷类型