
# 新增自定义应用以及版本
这里添加您的自定义边缘应用。
前提说明：
1. 需要实现了一个集成了边缘模块SDK的自定义应用。sdk集成方法见[插件侧开发](https://support.huaweicloud.com/devg-iotedge/iotedge_devg_0007.html)。
2. 驱动应用已经上传至镜像仓或者上传至OBS。
#### 操作步骤
1. 访问[IoT边缘](https://www.huaweicloud.com/product/iotedge.html)，单击"管理控制台"进入IoT边缘控制台。
2. 选择左侧导航栏"边缘节点 \> 应用管理"进入页面，选择业务应用，单击"添加应用"。 
   应用名称：自定义边缘应用的名称。
   功能用途：您可以根据实际情况选择。
   数据处理：提供设备数据处理能力。
   协议解析：提供设备接入能力。
   本地子系统集成：提供IT子系统集成能力。
   业务应用均支持进行配置模板的关联。
   ![](https://support.huaweicloud.com/bestpractice-iotedge/figure/zh-cn_image_0000001520018278.png "点击放大")
   
   
3. 添加完成后，单击"前往：应用版本配置""。 
   ![](https://support.huaweicloud.com/bestpractice-iotedge/figure/zh-cn_image_0000001520178238.png "点击放大")
   
   
4. 第一步"软件部署配置"。 
   1. 选择部署方式，参考[表1]填写基本信息。
      图1软件部署配置
      ![](https://support.huaweicloud.com/bestpractice-iotedge/figure/zh-cn_image_0000001570898493.png "点击放大")
      ![](https://support.huaweicloud.com/bestpractice-iotedge/figure/zh-cn_image_0000001519699106.png "点击放大")
       表1部署配置 
      | 参数名称  | 说明                                                                                                                                                                                                                                                                                                                                                                                   |
      |:---|:---|
      | 部署方式  | 容器化部署：在边缘节点上应用通过Docker容器运行；添加容器化部署的应用需先确保容器镜像已上传到[容器镜像服务(SWR)](https://console.huaweicloud.com/swr/#/app/warehouse/list)，且设置其类型为"公开"，例如[图2]所示。 安装包部署：在边缘节点是以进程形式运行；添加安装包部署的应用需先确保安装包已按照打包规范进行压缩打包，并上传到[对象存储服务(OBS)](https://console.huaweicloud.com/console/#/obs/manager/buckets)。 |
      | 容器镜像  | 部署方式为容器化部署时，参考[表2]填写。                                                                                                                                                                                                                                                                                                            |
      | 安装包部署 | 部署方式为安装包部署时，填写您此前上传到对象存储服务OBS中的安装包地址。                                                                                                                                                                                                                                                                                                                                                |
         
       表2选择镜像输入方式 
      | 参数名称 | 说明                                                                                                                                                                                                                                                                                                                                  |
      |:---|:---|
      | 手动输入 | 输入镜像地址：统一在[容器镜像服务(SWR)](https://console.huaweicloud.com/swr/#/app/warehouse/list)中管理。                                                                                                                                                                                                                                               |
      | 单击选择 | 选择镜像：选择需要部署的镜像，单击"确认"。 - 我的镜像：展示了您在容器镜像服务中创建的所有镜像。  - 他人共享：展示了其他用户共享的镜像。   版本：选择需要部署的镜像版本。 |
         
      
   
   2. 选择容器规格，根据您的需要选择。
      图2容器规格配置
      ![](https://support.huaweicloud.com/bestpractice-iotedge/figure/zh-cn_image_0000001570778237.png "点击放大")
      
   
   3. 高级配置，按照如下步骤进行配置。
      图3高级配置   
      ![](https://support.huaweicloud.com/bestpractice-iotedge/figure/zh-cn_image_0000001571098125.png "点击放大")
      1. **运行命令** （只有容器化部署的方式可以配置）
         图4运行命令   
         ![](https://support.huaweicloud.com/bestpractice-iotedge/figure/zh-cn_image_0000001519858694.png "点击放大")
         - 运行命令：输入可执行的命令，例如"/run/start"。
           - 若可执行命令有多个，多个命令之间用换行进行分隔，且末尾不能有空行。
            
         
         - 命令参数：输入控制容器运行命令参数，例如-port=8080。
           - 若参数有多个，多个参数以换行分隔，且末尾不能有空行。
            
         
         
         ![](https://support.huaweicloud.com/bestpractice-iotedge/public_sys-resources/note_3.0-zh-cn.png)
         启动命令和参数复杂时，建议编写启动脚本，打包到镜像中，如start.sh，启动命令设置为 ./start.sh。
         若启动命令已经定义在dockerfile中，则该项可以不进行配置。
         若应用部署实例异常，可参考[配置指导](https://support.huaweicloud.com/iotedge_faq/iotedge_04_0029.html)。
         
      
      2. **选项配置**
         打开勾选项![](https://support.huaweicloud.com/bestpractice-iotedge/figure/zh-cn_image_0000001570978405.png)，容器开启特权模块，将拥有访问主机设备的权限，可以访问主机上的设备（如GPU、FPGA），容器在特性模式下运行会存在一些安全风险，默认关闭该选项。
         
      
      3. **环境变量**
         图5环境变量   
         ![](https://support.huaweicloud.com/bestpractice-iotedge/figure/zh-cn_image_0000001520018282.png "点击放大")
         容器运行环境中设定的一个变量。可以在部署应用时修改。
         单击![](https://support.huaweicloud.com/bestpractice-iotedge/figure/zh-cn_image_0000001520178242.png)添加环境变量，输入变量名称和变量值，添加环境变量。
         ![](https://support.huaweicloud.com/bestpractice-iotedge/public_sys-resources/note_3.0-zh-cn.png)
         **IoTEdge**平台不会对用户输入的环境变量进行加密。
         如果用户配置的环境变量涉及敏感信息，用户需要自行加密后再填入，并在应用中自己完成解密过程。
         **IoTEdge**平台服务不提供任何加解密工具，如果您需要设置加密密文，可以使用其他平台的加解密工具。
         
      
      4. **数据存储**
         卷是指容器运行过程中使用的存储卷。
         将主机某个目录挂载到容器中。主机目录是一种持久化存储，应用删除后hostPath里面的内容依然存在于边缘节点本地硬盘目录中，如果后续重新创建应用，挂载后依然可以读取到之前写入的内容。
         图6数据存储   
         ![](https://support.huaweicloud.com/bestpractice-iotedge/figure/zh-cn_image_0000001570898497.png "点击放大")
         ![](https://support.huaweicloud.com/bestpractice-iotedge/public_sys-resources/note_3.0-zh-cn.png)
         - 请不要挂载在系统目录下，如"/"、"/var/run"等，会导致容器异常。建议挂载在空目录下，若目录不为空，请确保目录下无影响容器启动的文件，否则文件会被替换，导致容器启动异常，应用创建失败。
           
         
         - 挂载高危目录的情况下 ，建议使用低权限账号启动，否则可能会造成宿主机高危文件被破坏。
           
         
         - 本地卷的类型选择LOG/DB/CONFIG时，会给主机目录默认添加前缀："/var/IoTEdge/{log\|db\|config}"。若需要将容器目录直接挂载到主机某个目录，本地卷的类型需选择为"其他"。
         
         - 当挂载的目录磁盘满，会导致节点异常，无法使用，请及时清理。
           
      
      5. **健康检查**
         健康检查是指容器运行过程中根据用户需要定时检查容器健康状况或是容器中负载的健康状况。
         - 应用存活探针：应用存活探针用于探测容器是否正常工作，不正常则重启实例。当前支持发送HTTP请求和执行命令检查，通过检测容器响应是否正常。
           
         
         - 应用业务探针：应用业务探针用于探测业务是否就绪，如果业务还未就绪，就不会将流量转发到当前实例。
           
          
         图7健康检查   
         ![](https://support.huaweicloud.com/bestpractice-iotedge/figure/zh-cn_image_0000001519699110.png "点击放大")
         表3检查方式 
         | 参数名称     | 说明                                                                                                                                                                                                                                                                                                                                                                                                           |
         |:---|:---|
         | HTTP请求检查 | 向容器发送HTTP GET请求，如果探针收到2xx或3xx，说明容器是健康的。 例如[图8]的配置，会在容器启动10秒（延迟时间）后，发送HTTP GET请求到"http://{实例IP}/health:8080"，如果在2秒（超时时间）内没有响应则视为检查失败；如果请求响应的状态码为2xx或3xx，则说明容器是健康的。 说明： 这里无需填写主机地址，默认直接使用实例的IP（即往容器发送请求），除非您有特殊需求。 |
         | 执行命令检查   | 探针执行容器中的命令并检查命令退出的状态码，如果状态码为0则说明健康。 例如[图9]的配置，会在容器启动10秒（延迟时间）后，在容器中执行"cat /tmp/healthy"命令，如果在2秒（超时时间）内没有响应，则视为检查失败；如果命令成功执行并返回0，则说明容器是健康的。                                                                                                                                                                   |
         | TCP检查    | 例如[图10]的配置 ，检查TCP端口是否正常可以访问。如果可以，说明容器是正常的。                                                                                                                                                                                                                                                                                                                    |
            
         图8HTTP请求检查   
         ![](https://support.huaweicloud.com/bestpractice-iotedge/figure/zh-cn_image_0000001570778241.png "点击放大")
         图9执行命令检查   
         ![](https://support.huaweicloud.com/bestpractice-iotedge/figure/zh-cn_image_0000001571098129.png "点击放大")
         图10TCP检查   
         ![](https://support.huaweicloud.com/bestpractice-iotedge/figure/zh-cn_image_0000001519858698.png "点击放大") 
       
   
   
   
   
5. 第二步"运行配置"。 
   图11端点和部署配置   
   ![](https://support.huaweicloud.com/bestpractice-iotedge/figure/zh-cn_image_0000001570978409.png "点击放大")
   1. 端点配置。 EdgeHub与其他模块之间的通讯采用MQTT作为消息总线，其中MQTT作为Broker可与各模块进行数据流转。
      - 输入端点：模块订阅的指定正则MQTT Topic的后缀，EdgeHub向该模块发送数据时则根据该模块配置的输入端点构造MQTT Topic并发送数据。
      
      - 输出端点：从模块端向EdgeHub发送数据时使用的MQTT Topic后缀；即EdgeHub接收该模块配置的输出端点对应的MQTT Topic的数据。
      
      
      ![](https://support.huaweicloud.com/bestpractice-iotedge/public_sys-resources/note_3.0-zh-cn.png)
      只有配置了消息输入输出端点的应用实例化的模块才能够使用数据流转功能。
      
   
   2. 部署配置。
      表4部署配置 
      | 参数名称 | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
      |:---|:---|
      | 重启策略 | 根据您的需要选择。 - 总是重启：当应用实例退出时，无论是正常退出还是异常退出，系统都会重新拉起应用实例。  - 失败时重启：当应用实例异常退出时，系统会重新拉起应用实例，正常退出时，则不再拉起应用实例。  - 不重启：当应用实例退出时，无论是正常退出还是异常退出，系统都不再重新拉起应用实例。   |
      | 网络类型 | 容器访问支持主机网络和端口映射两种方式。 - **主机网络** 使用宿主机（边缘节点）的网络，即容器与主机间不做网络隔离，使用同一个IP。   - **端口映射** 容器网络虚拟化隔离，容器拥有单独的虚拟网络，容器与外部通信需要与主机做端口映射。配置端口映射后，流向主机端口的流量会映射到对应的容器端口。例如容器端口80与主机端口8080映射，那主机8080端口的流量会流向容器的80端口。                                                   |
         
      
    
   
   
6. 第三步配置确认，参考[表5] 填写基本信息
   
   图12应用版本基本配置   
   ![](https://support.huaweicloud.com/bestpractice-iotedge/figure/zh-cn_image_0000001960979749.png "点击放大")
    表5应用版本基本配置 
   | 参数名称  | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
   |:---|:---|
   | 应用名称  | 自定义边缘应用的名称。                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
   | 功能用途  | 您可以根据实际情况选择： 数据处理：提供设备数据处理能力。 协议解析：提供设备接入能力。 本地子系统集成：提供IT子系统集成能力。 网关管理：扩展边缘节点的协议接入能力，当前支持Modbus，OPC-UA协议接入。 混合应用：包含数据处理、协议转换、子系统接入、网关管理、数据采集其中两个及以上功能的应用。 数据采集：提供OT数采能力。 |
   | 应用描述  | 输入对应用的描述信息，方便与其他应用进行区分。                                                                                                                                                                                                                                                                                                                                                                                                                                     |
   | SDK版本 | 集成边缘SDK的版本号。                                                                                                                                                                                                                                                                                                                                                                                                                                                |
   | 版本    | 自定义您的应用版本号。可选择是否"立即发布"。                                                                                                                                                                                                                                                                                                                                                                                                                                     |
   | 支持架构  | 选择应用可支持的架构。有x86_64、arm32、arm64的架构，支持多选。                                                                                                                                                                                                                                                                                                                                                                                                                     |
   | 支持多部署 | 应用版本支持在一个边缘节点上部署多个实例。                                                                                                                                                                                                                                                                                                                                                                                                                                       |
   | 业务模板  | 业务应用使用的配置模板，模板配置可参考[导入自定义业务应用配置模板](https://support.huaweicloud.com/bestpractice-iotedge/iotedge_bp_09.html)。也可以不关联模板。                                                                                                                                                                                                                                                                                                                                       |
      
   
   
7. 单击"确认添加"，完成应用的创建；单击"立即发布"，完成应用创建并发布新版本。 
   图13创建成功   
   ![](https://support.huaweicloud.com/bestpractice-iotedge/figure/zh-cn_image_0000001520178246.png "点击放大")
   
   
8. 单击"返回应用管理列表"。 
   您可以看到应用类型为"用户定义"，区别于系统预置的应用。
   图14应用管理列表   
   ![](https://support.huaweicloud.com/bestpractice-iotedge/figure/zh-cn_image_0000001570898501.png "点击放大")
   
   
 
