
# 容器应用
IEF支持下发容器应用到边缘节点，本节主要介绍如何创建自定义边缘应用。
#### 约束与限制
- 边缘节点磁盘占用超过70%时，会启动镜像回收机制回收容器镜像占用的磁盘空间，此时部署容器应用会导致容器启动变慢，请在部署容器应用前规划好边缘节点磁盘空间。
- 创建容器应用时，边缘节点会从容器镜像服务拉取镜像，如果镜像超大且边缘节点下载带宽较小，容器镜像没有拉取完成，从而导致控制台上容器应用显示创建失败。虽然应用创建失败，但容器镜像拉取不会中断，等容器镜像拉取成功后，容器应用的状态会刷新为创建成功。此情况下也可以先将容器镜像拉取到边缘节点，然后再创建容器应用。
- 容器镜像的架构必须与节点架构一致，比如节点为x86，那容器镜像的架构也必须是x86。
- 企业版可将应用实例数量修改为零。
 
#### 创建边缘应用
1. 登录[IEF控制台](https://console.huaweicloud.com/ief2.0/)，在"总览"页面切换实例为企业版。
2. 选择左侧导航栏的"边缘应用 \> 容器应用"，单击页面右上角"创建容器应用"。
3. 填写基本信息。 
   - **名称**：容器应用的名称。
   
   - **实例数量**：容器应用的实例数量。一个容器应用可以拥有多个实例。
   
   - **配置方式**
     - 自定义配置：即从零开始配置容器应用，具体请参见[4]-[6]。
     
     - 应用模板配置：选择一个已经定义好的应用模板，可以在模板的基础上进行修改，使用应用模板能够帮助您省去重复的工作量。模板的定义与[4]-[6]需要的配置相同，创建模板的方法请参见[应用模板](https://support.huaweicloud.com/usermanual-ief/ief_01_0057_0.html)。
      
   
   - **标签**
     标签可用于对资源进行标记，方便分类管理。
     
   
   
   图1基本信息   
   ![](https://support.huaweicloud.com/usermanual-ief/zh-cn_image_0000001214722802.png "点击放大")
   
   
4. 配置容器。
   
   选择需要部署的镜像，单击"使用镜像"。
   - 我的镜像：展示了您在[容器镜像服务](https://console.huaweicloud.com/swr/)中创建的所有镜像。
   
   - 他人共享：展示了其他用户共享的镜像，共享镜像是在SWR中操作的，具体请参见[共享私有镜像](https://support.huaweicloud.com/usermanual-swr/swr_01_0026.html)。
    
   选择镜像后，您可以配置容器的规格。
   - **镜像版本** ：请选择需要部署的镜像版本。
     ![](https://support.huaweicloud.com/usermanual-ief/public_sys-resources/notice_3.0-zh-cn.png)
     在生产环境中部署容器时，应避免使用latest版本。因为这会导致难以确定正在运行的镜像版本，并且难以正确回滚。
     
   
   - **容器规格**：据需要选择容器CPU、内存、昇腾AI加速卡和GPU的配额。
   
   - **昇腾AI加速卡** ：容器应用选择的AI加速卡配置与实际部署的边缘节点配置的AI加速卡必须一致，否则会创建应用失败，详见[注册边缘节点](https://support.huaweicloud.com/usermanual-ief/ief_01_0084_0.html#ief_01_0084_0__li14272818297)。
     ![](https://support.huaweicloud.com/usermanual-ief/public_sys-resources/note_3.0-zh-cn.png)
     虚拟化切分后的NPU类型，一个容器只能挂载一个虚拟化NPU，只有当该容器退出后，该虚拟化NPU才能分配给其他容器使用。
     AI加速卡支持的NPU类型，如下表。
     表1NPU类型说明 
     | 类型     | 描述       |
     |:---|:---|
     | 昇腾310  | 昇腾310芯片  |
     | 昇腾310B | 昇腾310B芯片 |
        
     图2容器配置   
     ![](https://support.huaweicloud.com/usermanual-ief/zh-cn_image_0000001259402607.png "点击放大") 
   
   
   您还可以对容器进行如下高级配置。
   - **运行命令**
     容器镜像拥有存储镜像信息的相关元数据，如果不设置生命周期命令和参数，容器运行时会运行镜像制作时提供的默认的命令和参数，Dockerfile这两个字段为"Entrypoint"和"CMD"。
     如果在创建容器应用时填写了容器的运行命令和参数，将会覆盖镜像构建时的默认命令"Entrypoint"、"CMD"，规则如下：
     表2容器如何执行命令和参数 
     | 镜像Entrypoint | 镜像CMD          | 容器运行命令    | 容器运行参数        | 最终执行                 |
     |:---|:---|:---|:---|:---|
     | \[touch\]    | \[/root/test\] | 未设置       | 未设置           | \[touch /root/test\] |
     | \[touch\]    | \[/root/test\] | \[mkdir\] | 未设置           | \[mkdir\]            |
     | \[touch\]    | \[/root/test\] | 未设置       | \[/opt/test\] | \[touch /opt/test\]  |
     | \[touch\]    | \[/root/test\] | \[mkdir\] | \[/opt/test\] | \[mkdir /opt/test\]  |
        
     图3运行命令   
     ![](https://support.huaweicloud.com/usermanual-ief/zh-cn_image_0000001258962667.png "点击放大")
     - 运行命令 输入可执行的命令，例如/run/start。
       若可执行命令有多个，多个命令之间用空格进行分隔。若命令本身带空格，则需要加引号（""）。
       ![](https://support.huaweicloud.com/usermanual-ief/public_sys-resources/note_3.0-zh-cn.png)
       多命令时，运行命令建议用/bin/sh或其他shell，其他全部命令作为参数来传入。
       
     
     - 运行参数 输入控制容器运行命令的参数，例如--port=8080。
       若参数有多个，多个参数以换行分隔。
       
      
   
   - **安全选项**
     - 可以通过开启"特权选项"，使容器拥有root权限，可以访问主机上的设备（如GPU、FPGA）。
     
     - 指定运行用户 IEF默认不改变容器运行的用户，以构建镜像时定义的运行用户来运行。
       打开开关后，下方出现运行用户的输入框，可输入范围为0\~65534的整数。指定了运行用户后，应用将以该运行用户来运行。如果镜像的操作系统中没有该用户ID，将导致容器应用启动失败。
       
      
   
   - **环境变量** **配置**
     容器运行环境中设定的变量。可以在应用部署后修改，为应用提供极大的灵活性。当前支持手动添加、密钥导入、配置项导入和变量引用方式。
     - 手动添加支持自定义变量名称和变量值。
     
     - 使用密钥导入，环境变量名称可自定义输入，环境变量值支持引用密钥的属性值，密钥创建方法请参见[密钥](https://support.huaweicloud.com/usermanual-ief/ief_01_0022_0.html)。
     
     - 使用配置项导入，环境变量名称可自定义输入，环境变量值支持引用配置项的属性值，配置项创建方法请参见[配置项](https://support.huaweicloud.com/usermanual-ief/ief_01_0010_0.html)。
     
     - 变量引用支持引用"hostIP"，即边缘节点的IP地址。
     
     
     ![](https://support.huaweicloud.com/usermanual-ief/public_sys-resources/note_3.0-zh-cn.png)
     IEF不会对用户输入的环境变量进行加密。如果用户配置的环境变量涉及敏感信息，用户需要自行加密后再填入，并在应用中自己完成解密过程。
     IEF也不提供任何加解密工具，如果您需要设置加密密文，可以使用其他加解密工具。
     
   
   - **数据存储**
     您可以通过定义本地卷，将边缘节点本地存储目录挂载到容器中，以实现数据文件的持久化存储。
     当前支持如下四种类型的本地卷。
     - hostPath：将主机某个目录挂载到容器中。hostPath是一种持久化存储，应用删除后hostPath里面的内容依然存在于边缘节点本地硬盘目录中，如果后续重新创建应用，挂载后依然可以读取到之前写入的内容。
       您可以将应用日志目录挂载到主机的"/var/IEF/app/log/{appName}"目录，"{appName}"是应用名，边缘节点会将"/var/IEF/app/log/{appName}"目录下后缀为log和trace的文件上传到AOM。
       挂载目录为容器内应用的日志路径，如nginx应用默认的日志路径为/var/log/nginx；权限需配置为"读写"。
       图4日志卷挂载   
       ![](https://support.huaweicloud.com/usermanual-ief/zh-cn_image_0000001214402786.png "点击放大") 
     
     - emptyDir：一种简单的空目录，主要用于临时存储，支持在硬盘或内存中创建。emptyDir挂载后就是一个空目录，应用程序可以在里面读写文件，emptyDir的生命周期与应用相同，应用删除后emptyDir的数据也同时删除掉。
     
     - configMap：存储应用所需配置信息的资源类型，创建方法请参见[配置项](https://support.huaweicloud.com/usermanual-ief/ief_01_0010_0.html)。
     
     - secret：密钥是一种用于存储应用所需的认证信息、证书、密钥等敏感信息的资源类型，创建方法请参见[密钥](https://support.huaweicloud.com/usermanual-ief/ief_01_0022_0.html)。
       ![](https://support.huaweicloud.com/usermanual-ief/public_sys-resources/notice_3.0-zh-cn.png)
       - 请不要挂载在系统目录下，如"**/** "、"**/var/run**"等，会导致容器异常。建议挂载在空目录下，若目录不为空，请确保目录下无影响容器启动的文件，否则文件会被替换，导致容器启动异常，应用创建失败。
       
       - 挂载高危目录的情况下，建议使用低权限账号启动，否则可能会造成宿主机高危文件被破坏。
       
       - 数据存储的"类型"选择"configMap"或"secret"时，可通过设置"权限"参数，自定义挂载至容器的文件权限，输入框的填写值为文件权限的十进制表示，默认为420（rw-r--r--)。
         
      
   
   - **健康检查**
     健康检查是指容器运行过程中根据用户需要定时检查容器健康状况或是容器中负载的健康状况。
     - 应用存活探针：应用存活探针用于探测容器是否正常工作，不正常则重启实例。当前支持发送HTTP请求和执行命令检查，检测容器响应是否正常。
     
     - 应用业务探针：应用业务探针用于探测业务是否就绪，如果业务还未就绪，就不会将流量转发到当前实例。
     
     
     详细的配置说明请参见[健康检查配置说明](https://support.huaweicloud.com/usermanual-ief/ief_01_0058_0.html)。
     
   
   
   
   
5. 单击"下一步"，进行部署配置。 
   选择部署对象，当前支持两种方式。
   - **自动调度**
     容器应用将在边缘节点组内根据资源用量自动调度。您还可以设置故障策略，当应用实例所在的边缘节点不可用时，是否将应用实例重新调度，迁移到边缘节点组内的其他可用节点。
     ![](https://support.huaweicloud.com/usermanual-ief/public_sys-resources/note_3.0-zh-cn.png)
     节点组内不可用节点比例大于 0.55 时，将停止自动迁移。
     您还可以设置调度策略，详细信息请参见[亲和与反亲和调度](https://support.huaweicloud.com/usermanual-ief/ief_01_0080.html)。
     图5自动调度   
     ![](https://support.huaweicloud.com/usermanual-ief/zh-cn_image_0000001561328378.png "点击放大") 
   
   
   迁移时间窗：参数表示负载在具有指定污点的节点上可以保持不被驱逐的最长时间。用户未配置迁移时间窗时，默认的迁移时间是300s，在这故障时间窗内保持节点仍可以被调度。
   您还可以对容器进行如下高级配置。
   - **重启策略**
     - 总是重启：当应用容器退出时，无论是正常退出还是异常退出，系统都会重新拉起应用容器。 当使用节点组时，重启策略为"总是重启"。
       
     
     - 失败时重启：当应用容器异常退出时，系统会重新拉起应用容器，正常退出时，则不再拉起应用容器。
     
     - 不重启：当应用容器退出时，无论是正常退出还是异常退出，系统都不再重新拉起应用容器。
     
     
     ![](https://support.huaweicloud.com/usermanual-ief/public_sys-resources/notice_3.0-zh-cn.png)
     只有选择了"总是重启"，容器应用才能在创建后更新升级，修改实例数量和访问配置。
     
   
   - **Host PID**
     启用时容器与边缘节点宿主机共享PID命名空间，这样在容器或边缘节点上能够进行互相操作，比如在容器中启停边缘节点的进程、在边缘节点启停容器的进程。
     启用此选项要求边缘节点软件版本大于等于2.8.0。
     
   
   
   
   
6. 单击"下一步"，进行访问配置。
   
   容器访问支持端口映射和主机网络两种方式。
   ![](https://support.huaweicloud.com/usermanual-ief/public_sys-resources/caution_3.0-zh-cn.png)
   当部署在同一个边缘节点的容器端口冲突时，容器会启动失败。
   - **端口映射**
     - 容器网络虚拟化隔离，容器拥有单独的虚拟网络，容器与外部通信需要与主机做端口映射。配置端口映射后，流向主机端口的流量会映射到对应的容器端口。例如容器端口80与主机端口8080映射，那主机8080端口的流量会流向容器的80端口。
     
     
     
     - 端口映射可以选择主机网卡，请注意端口映射不支持选择IPv6地址类型的网卡。
     
     
     
     - 端口映射中的主机端口可以选择指定和自动分配。选择自动分配可以避免多实例的端口冲突导致容器启动失败。
       ![](https://support.huaweicloud.com/usermanual-ief/public_sys-resources/note_3.0-zh-cn.png)
       选择自动分配时，请输入合适且充足的端口范围，避免端口冲突。
       
      
   
   - **主机网络**
     使用宿主机（边缘节点）的网络，即容器与主机间不做网络隔离，使用同一个IP。
     
   
   - **服务**
     点击"添加服务"，填写服务名称，访问端口，容器端口选择端口映射中的容器端口，协议支持HTTP和TCP两种。
     图6添加服务   
     ![](https://support.huaweicloud.com/usermanual-ief/zh-cn_image_0000001507211460.png "点击放大")
     如果容器访问配置为端口映射，不添加端口的情况下是不能创建服务的。
     服务定义了更加精细化的访问方案，您也可以在应用创建完成后再创建服务，具体请参见[创建服务](https://support.huaweicloud.com/usermanual-ief/ief_01_0071.html#ief_01_0071__section9139438440)。
     
     
   
   
   
   
7. 单击"下一步"，确认容器应用的规格，确认无误后单击"创建"。
 
#### 查看应用运维信息
应用部署后，您可以在[IEF管理控制台](https://console.huaweicloud.com/ief2.0/)查看应用的CPU、内存等信息。您还可以通过访问应用运维管理（AOM）的"容器监控"功能，查看更多监控指标，在"告警"功能查看或添加告警。
1. 登录[IEF控制台](https://console.huaweicloud.com/ief2.0/)，在"总览"页面切换实例为企业版。
2. 选择左侧导航栏"边缘应用 \> 容器应用"，单击容器应用名称。
3. 选择"监控"页签即可查看应用监控信息。 
   图7应用监控信息   
   ![](https://support.huaweicloud.com/usermanual-ief/zh-cn_image_0000001558694129.png "点击放大")
   
   
 
#### 更新升级应用
应用部署后，您可以更新升级应用，应用升级采用滚动升级的方式，即先创建新应用实例，然后删除老的应用实例。
1. 登录[IEF控制台](https://console.huaweicloud.com/ief2.0/)，在"总览"页面切换实例为企业版。
2. 选择左侧导航栏"边缘应用 \> 容器应用"，单击容器应用名称。
3. 选择"更新升级"页签，修改容器相关配置。具体配置参数与[4]中一致。
   
   图8更新升级   
   ![](https://support.huaweicloud.com/usermanual-ief/zh-cn_image_0000001258962703.png "点击放大")
   
   
4. 配置修改后，单击"提交"。
 
#### 修改访问配置
应用部署后，您可以修改应用的访问配置。
1. 登录[IEF控制台](https://console.huaweicloud.com/ief2.0/)，在"总览"页面切换实例为企业版。
2. 选择左侧导航栏"边缘应用 \> 容器应用"，单击容器应用名称。
3. 选择"访问配置"页签，修改容器相关配置。具体配置参数与[6]中一致。
   
   图9修改访问配置   
   ![](https://support.huaweicloud.com/usermanual-ief/zh-cn_image_0000001506892108.png "点击放大")
   
   
4. 配置修改后，单击"提交"。
 
