华为云用户手册

  • 操作步骤 安装GPU驱动。 下载GPU驱动,推荐驱动链接: https://www.nvidia.com/content/DriverDownload-March2009/confirmation.php?url=/tesla/440.33.01/NVIDIA-Linux-x86_64-440.33.01.run&lang=us&type=Tesla 执行如下安装驱动命令。 bash NVIDIA-Linux-x86_64-440.33.01.run 执行如下命令检查GPU驱动安装状态。 nvidia-smi 以root用户登录边缘节点。 执行如下命令。 nvidia-modprobe -c0 -u 创建文件夹。 mkdir -p /var/IEF/nvidia/drivers /var/IEF/nvidia/bin /var/IEF/nvidia/lib64 拷贝驱动文件。 对于CentOS,依次执行如下命令拷贝驱动文件: cp /lib/modules/{当前环境内核版本号}/kernel/drivers/video/nvi* /var/IEF/nvidia/drivers/ cp /usr/bin/nvidia-* /var/IEF/nvidia/bin/ cp -rd /usr/lib64/libcuda* /var/IEF/nvidia/lib64/ cp -rd /usr/lib64/libEG* /var/IEF/nvidia/lib64/ cp -rd /usr/lib64/libGL* /var/IEF/nvidia/lib64/ cp -rd /usr/lib64/libnv* /var/IEF/nvidia/lib64/ cp -rd /usr/lib64/libOpen* /var/IEF/nvidia/lib64/ cp -rd /usr/lib64/libvdpau_nvidia* /var/IEF/nvidia/lib64/ cp -rd /usr/lib64/vdpau /var/IEF/nvidia/lib64/ 对于Ubuntu,依次执行如下命令拷贝驱动文件: cp /lib/modules/{当前环境内核版本号}/kernel/drivers/video/nvi* /var/IEF/nvidia/drivers/ cp /usr/bin/nvidia-* /var/IEF/nvidia/bin/ cp -rd /usr/lib/x86_64-linux-gnu/libcuda* /var/IEF/nvidia/lib64/ cp -rd /usr/lib/x86_64-linux-gnu/libEG* /var/IEF/nvidia/lib64/ cp -rd /usr/lib/x86_64-linux-gnu/libGL* /var/IEF/nvidia/lib64/ cp -rd /usr/lib/x86_64-linux-gnu/libnv* /var/IEF/nvidia/lib64/ cp -rd /usr/lib/x86_64-linux-gnu/libOpen* /var/IEF/nvidia/lib64/ cp -rd /usr/lib/x86_64-linux-gnu/libvdpau_nvidia* /var/IEF/nvidia/lib64/ cp -rd /usr/lib/x86_64-linux-gnu/vdpau /var/IEF/nvidia/lib64/ 其中,当前环境内核版本号可以使用uname -r命令查看获取,如下所示,请替换为实际取值。 # uname -r3.10.0-514.e17.x86_64 执行以下命令修改目录权限。 chmod -R 755 /var/IEF
  • Go语言代码样例 package mainimport ("crypto/tls""crypto/x509""fmt""math/rand""sync""time"MQTT "github.com/eclipse/paho.mqtt.golang")func main() {subClient := InitMqttClient(onSubConnectionLost)pubClient := InitMqttClient(onPubConnectionLost)wait := sync.WaitGroup{}wait.Add(1)go func() {for {time.Sleep(1*time.Second)pubClient.Publish("topic", 0, false, "hello world")}}()subClient.Subscribe("topic", 0, onReceived)wait.Wait()}func InitMqttClient(onConnectionLost MQTT.ConnectionLostHandler) MQTT.Client {pool := x509.NewCertPool()cert, err := tls.LoadX509KeyPair("/tmp/example_cert.crt", "/tmp/example_cert.key")if err != nil {panic(err)}tlsConfig := &tls.Config{RootCAs: pool,Certificates: []tls.Certificate{cert},// 单向认证,client不校验服务端证书InsecureSkipVerify: true,} // 使用tls或者ssl协议,连接8883端口opts := MQTT.NewClientOptions().AddBroker("tls://127.0.0.1:8883").SetClientID(fmt.Sprintf("%f",rand.Float64()))opts.SetTLSConfig(tlsConfig)opts.OnConnect = onConnectopts.AutoReconnect = false// 回调函数,客户端与服务端断连后立刻被触发opts.OnConnectionLost = onConnectionLostclient := MQTT.NewClient(opts)loopConnect(client)return client}func onReceived(client MQTT.Client, message MQTT.Message) {fmt.Printf("Receive topic: %s, payload: %s \n", message.Topic(), string(message.Payload()))}// sub客户端与服务端断连后,触发重连机制func onSubConnectionLost(client MQTT.Client, err error) {fmt.Println("on sub connect lost, try to reconnect")loopConnect(client)client.Subscribe("topic", 0, onReceived)}// pub客户端与服务端断连后,触发重连机制func onPubConnectionLost(client MQTT.Client, err error) {fmt.Println("on pub connect lost, try to reconnect")loopConnect(client)}func onConnect(client MQTT.Client) {fmt.Println("on connect")}func loopConnect(client MQTT.Client) {for {token := client.Connect()if rs, err := CheckClientToken(token); !rs {fmt.Printf("connect error: %s\n", err.Error())} else {break}time.Sleep(1 * time.Second)}}func CheckClientToken(token MQTT.Token) (bool, error) {if token.Wait() && token.Error() != nil {return false, token.Error()}return true, nil}
  • 操作场景 内置MQTT broker默认开启端口进行TLS(Transport Layer Security)安全认证,客户端必须带上证书才能访问MQTT broker。 终端设备和应用可以通过在对应节点详情页创建的证书进行安全认证。 在节点组中部署的应用可能调度到节点组内任意节点,终端设备可能访问节点组内任意节点,从边缘节点处创建的证书不能满足应用访问节点MQTT broker的需要,所以需要使用节点组证书。节点组证书创建方法请参见节点组证书。
  • 约束与限制 证书与边缘节点绑定,在一个边缘节点下申请的证书只能用来访问该边缘节点的MQTT broker,如果访问其他边缘节点的MQTT broker,会导致认证失败。 一个边缘节点最多只能申请10份证书。 证书的有效期为5年。 MQTT使用限制 表1 MQTT使用限制 描述 限制 支持的MQTT协议版本 3.1.1 与标准MQTT协议的区别 支持QoS 0 支持Topic自定义 不支持QoS 1和QoS 2 不支持will、retain msg MQ TTS 支持的安全等级 采用TCP通道基础 + TLS协议(TLSV1.2 版本)
  • 使用证书 证书用于终端设备与MQTT broker通信时鉴权。 下面是Go语言代码样例和Java语言代码样例,演示了如何使用证书做鉴权。 客户端不需要校验服务端证书,单向认证即可。 内置MQTT broker默认开启8883端口。 样例中的Go语言MQTT Client引用了github.com/eclipse/paho.mqtt.golang开源库。 客户端需要处理断连事件,实现掉线重连机制,提高连接可靠性。
  • 示例 $hw/events/device/ab39361a-6fc0-4c94-b919-72b1e08ca690/twin/get/result{ "event_id":"123456", "timestamp":1557317510926, "twin":{ "state":{ "expected":{ "value":"stop", "metadata":{ "timestamp":1557316778931 } }, "optional":true, "metadata":{ "type":"string" } } } }
  • 示例 终端设备绑定到边缘节点时可收到如下消息。 $hw/events/device/{device_id}/updated{ "event_id":"", "timestamp":1557314742136, "attributes":{ "address":{ "value":"xxx", "optional":true, "metadata":{ "type":"string" } } } }
  • 示例 $hw/events/device/ab39361a-6fc0-4c94-b919-72b1e08ca690/twin/update/result{ "event_id":"123457", "timestamp":1557317614026, "twin":{ "state":{ "actual":{ "value":"stop", "metadata":{ "timestamp":1557317614026 } }, "optional":true, "metadata":{ "type":"string" } } } }
  • 发送消息 在边缘节点使用MQTT客户端发送消息。 此处需要放到创建消息路由中指定的Topic,如下图所示使用mosquitto_pub发送。 [root@ief-node ~]# mosquitto_pub -t '05e1aef9040010e22fccc009adecb056/nodes/7092ad14-adee-4a09-b969-1505bbdecef5/user/aaa' -d -m '{ "edgemsg": "msgToCloud"}'Client mosq-p5LouPQIW2gx0JPkRF sending CONNECTClient mosq-p5LouPQIW2gx0JPkRF received CONNACK (0)Client mosq-p5LouPQIW2gx0JPkRF sending PUBLISH (d0, q0, r0, m1, '05e1aef9040010e22fccc009adecb056/nodes/7092ad14-adee-4a09-b969-1505bbdecef5/user/aaa', ... (26 bytes))Client mosq-p5LouPQIW2gx0JPkRF sending DISCONNECT 消息发送后,您可以在消息路由处看到已经成功转发一条消息,如下图所示。 图4 转发消息数 您可以在DIS界面看到有消息流入,如下图所示。 图5 DIS数据监控
  • IEF自定义策略样例 授权用户创建、更新应用和应用模板的权限。 { "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "ief:deployment:create", "ief:appVersion:update", "ief:deployment:update", "ief:application:create" ], "Condition": { "StringEquals": { "ief:AssumeUserName": [ "test" ] } }, "Resource": [ "ief:*:*:deployment:*", "ief:*:*:appVersion:*", "ief:*:*:application:*" ] } ]}
  • 示例 $hw/events/device/ab39361a-6fc0-4c94-b919-72b1e08ca690/twin/update/result{ "event_id":"123457", "timestamp":1557317614026, "twin":{ "state":{ "actual":{ "value":"stop", "metadata":{ "timestamp":1557317614026 } }, "optional":true, "metadata":{ "type":"string" } } } }
  • 操作场景 IEF支持从边缘节点上报消息到云端。 您可以将消息发送到边缘节点SystemEventBus(MQTT broker)的自定义Topic中,IEF会将这些数据转发到DIS通道或APIG后端地址。数据转发到DIS通道或者APIG后端地址后,您可以提取这些数据,并对数据进行处理分析。 本章节使用DIS端点作为示例,APIG端点的使用方法类似,主要分如下几个步骤。 创建消息端点 购买DIS接入通道 创建消息路由 发送消息
  • 创建铂金版服务实例 登录IEF管理控制台。 选择左侧导航栏的“总览”,单击页面右上角的“创建铂金版服务实例”。 配置参数。 区域:选择服务实例所在区域。不同的区域之间服务实例不互通,建议您选择最靠近您业务的区域,这样可以减少网络时延、提高访问速度。 实例名称:填写实例名称。 终端节点服务白名单:输入需要添加至白名单的用户domainID。 边云接入方式:当前支持“互联网接入”和“专线接入”。专线连接IEF的具体方法请参见通过专线或VPN连接IEF。 边缘节点规模:选择服务实例能管理的边缘节点规模。当前支持选择50、200、1000节点。 接入带宽:接入方式为“互联网接入”时,根据边缘节点规模,分别对应为5Mbit/s、10Mbit/s、30Mbit/s。“专线接入”的带宽由专线决定。 高级设置:多可用区部署,即铂金版服务实例部署在多个可用区,支持多可用区容灾,但是对于集群性能有所损耗。 单击“下一步”。 确认订单详情,单击“创建”。 服务实例创建需要20-30分钟,您可以在服务实例列表的“详情”中查看状态。 在“总览”页面可以查看到铂金版服务实例的信息。 图1 查看实例信息
  • HTTP请求检查 向容器发送HTTP GET请求,如果探针收到2xx或3xx,说明容器是健康的。 例如下图这个配置,IEF会在容器启动10秒(延迟时间)后,发送HTTP GET请求到“http://{实例IP}/healthz:8080”,如果在2秒(超时时间)内没有响应则视为检查失败;如果请求响应的状态码为2xx或3xx,则说明容器是健康的。 这里无需填写主机地址,默认直接使用实例的IP(即往容器发送请求),除非您有特殊需求。 图1 HTTP请求检查
  • 设备孪生(DeviceTwin) 终端设备通常包含两类数据: 一是不会改变的元数据,包括序列号、资产标识符、Mac地址等描述设备信息的数据。这种数据也可以称为终端设备的静态属性或设备属性。 另一类是终端设备的动态数据,包括特定背景下的终端设备专有实时数据,例如灯的开、关状态。这种数据也可以称为终端设备的孪生属性。 设备孪生具有与物理设备相同的特性,便于终端设备与应用之间进行更好地通信。应用发送的命令首先到达设备孪生,设备孪生根据应用设置的Expected State(期望的状态)进行状态更新,此外终端设备实时反馈自身的Actual State(真实的状态),设备孪生同时记录终端设备的Actual State和Expected State 。这种方式也使终端设备在离线状况下再次上线时,终端设备的状态也能得到同步。 图2 DeviceTwin 在IEF中可以创建终端设备,并能将终端设备与边缘节点关联,关联后会在边缘节点上保存被关联设备的属性和孪生信息。边缘节点上的应用程序可在边缘节点获取终端设备属性、设备孪生信息、以及修改终端设备孪生期望值和真实值。同时IEF负责同步云、边的孪生信息,当有冲突时,将以边缘侧的修改为主。 详细的终端设备状态边云协同机制请参见设备孪生工作原理。
  • 使用IEF构建边缘计算 使用IEF构建边缘计算的步骤如图1所示。 纳管边缘节点,绑定终端设备。 使用IEF构建边缘计算首先需要将边缘节点纳入IEF的管理(通过在边缘节点安装边缘节点软件),并将终端设备绑定到边缘节点,做完这些后您就可以通过IEF往边缘节点部署应用。 纳管边缘节点、绑定终端设备的详细内容将在节点管理和终端设备管理中介绍。 开发应用并制作镜像,上传到 容器镜像服务 (SWR)。 这个步骤是针对实际业务场景开发应用,开发完成后制作成容器镜像,并上传到SWR上,这样后面IEF下发应用后,边缘节点就可以从SWR中拉取应用镜像。 虽然这里将开发应用放在了步骤 1之后,但这两个步骤之间并没有明确的先后顺序,您也可以先开发应用,然后再纳管边缘节点、绑定终端设备。 部署应用。 边缘节点纳管、应用开发完后,就可以通过IEF将应用部署到边缘节点,运行您的实际业务。 应用运行后,就能通过 AOM 对应用进行监控和告警,提供运维便利性。 部署应用的详细内容将在容器应用管理中详细介绍。 (可选)回传数据到云上做进一步处理,根据处理结果更新应用。 这个步骤与IEF的使用本身没有强相关,但是这是一个常见的根据数据改进应用的方法,您可以根据自身需求选择是否操作。 图1 构建边缘计算
  • 亲和与反亲和调度策略 在创建容器应用时,可以设置亲和/反亲和调度策略,例如将某类应用部署到某些特定的节点、不同应用部署到不同的节点等等。 IEF当前支持简易的调度策略,具体如下。 亲和性 容器应用与节点亲和:当容器应用与节点亲和时,容器应用只会调度到亲和的这些节点中。在设置节点的亲和与反亲和时,如果设置了与某些节点亲和,那就没有必要再设置与其他节点反亲和,因为与这些节点亲和了,必然不会调度到其他节点。 容器应用与容器应用亲和:当容器应用A与容器应用B亲和时,容器应用A只会调度到容器应用B所在的节点。 反亲和性 容器应用与节点反亲和:当容器应用与节点反亲和时,容器应用不会调度到反亲和的这些节点中。 容器应用与容器应用反亲和:当容器应用A与容器应用B反亲和时,容器应用A不会调度到容器应用B所在的节点。
  • 亲和反亲和策略示例 您可以同时设置多个亲和反亲和对象。例如当前节点组有4个节点,Node1、Node2、Node3和Node4,容器应用App1的实例运行在Node1和Node2上,容器应用App2的实例运行在Node3上。这时您需要创建一个容器应用App3,容器应用App3与节点Node1、Node2、Node3亲和,与容器应用App1亲和,与容器应用App2反亲和,那容器应用App3只会被调度到Node1、Node2上。下图示例中,App3只有一个实例,被调度到了Node1上。 图1 App3被调度到Node1上
  • 状态说明 批量应用升级作业有以下八种状态。 排队中:作业等待执行 执行中:作业处于执行状态 成功:全部任务执行成功 部分成功:部分任务执行成功 失败:全部任务执行失败 停止中:作业处于停止中 已停止:作业已停止 更新超时:作业排队和执行时间超过10分钟仍未完成 批量作业执行过程中可以停止,停止后可以继续。 如果批量作业执行失败、部分成功或更新超时,可以重试执行作业,将未执行成功的作业再次执行一遍。
  • 状态说明 批量节点升级作业有以下八种状态。 排队中:作业等待执行 执行中:作业处于执行状态 成功:全部任务执行成功 部分成功:部分任务执行成功 失败:全部任务执行失败 停止中:作业处于停止中 已停止:作业已停止 更新超时:作业排队和执行时间超过10分钟仍未完成 批量作业执行过程中可以停止,停止后可以继续。 如果批量作业执行失败、部分成功或更新超时,可以重试执行作业,将未执行成功的作业再次执行一遍。 图2 重试
  • 注意事项 为了让您的边缘节点应用更稳定可靠的运行,IEF不会主动升级您的边缘节点上的EdgeCore,需要由您在业务影响最小的时间窗内进行节点升级,以减轻对您业务的影响。 处于维护周期中的版本升级,边缘节点上的应用业务不会中断,如果您有使用消息路由功能,可能会有短暂影响。 处于维护周期外的版本升级,可能会因为容器重启引起业务的短暂中断。 请勿在节点升级过程中变更节点配置,比如重启Docker、安装卸载GPU/NPU驱动、OS内核升级、变更网络配置等,这些操作会增大节点升级失败风险。
  • IEF自定义策略样例 授权用户创建、更新应用和应用模板的权限。 { "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "ief:deployment:create", "ief:appVersion:update", "ief:deployment:update", "ief:application:create" ], "Condition": { "StringEquals": { "ief:AssumeUserName": [ "test" ] } }, "Resource": [ "ief:*:*:deployment:*", "ief:*:*:appVersion:*", "ief:*:*:application:*" ] } ]}
  • 支持审计的关键操作列表 表1 云审计 服务支持的IEF操作列表 操作名称 资源类型 事件名称 注册边缘节点 node createEdgeNode 更新边缘节点 node updateEdgeNode 删除边缘节点 node deleteEdgeNode 创建边缘节点组 group createEdgeGroup 更新边缘节点组 group updateEdgeGroup 删除边缘节点组 group deleteEdgeGroup 创建设备模板 deviceTemplate createDeviceTemplate 更新设备模板 deviceTemplate updateDeviceTemplate 删除设备模板 deviceTemplate deleteDeviceTemplate 注册设备 device createDevice 更新设备 device updateDevice 删除设备 device deleteDevice 部署Edge-Connector device deployConnector 更新设备孪生 device updateDeviceTwin 更新设备访问配置 device updateDeviceAccessConfig 创建应用模板 application createApplication 更新应用模板 application updateApplication 删除应用模板 application deleteApplication 创建应用模板版本 appVersion createAppVersion 更新应用模板版本 appVersion updateAppVersion 删除应用模板版本 appVersion deleteAppVersion 创建配置项 configmap createConfigMap 更新配置项 configmap updateConfigMap 删除配置项 configmap deleteConfigMap 创建容器应用 deployment createDeployment 更新容器应用 deployment updateDeployment 删除容器应用 deployment deleteDeployment 查询容器应用列表 deployment getDeploymentList 查询容器应用 deployment getDeployment 创建端点 endpoint createEndpoint 删除端点 endpoint deleteEndpoint 添加节点证书 node AddNodeCert 删除节点证书 node deleteNodeCert 升级固件 nodeFirmware UpgradeNodeFirmware 查询应用实例列表 Pods getPods 查询实例 Pod getPod 创建节点注册作业 product createProduct 删除节点注册作业 product deleteProduct 创建节点升级作业/创建应用部署作业/创建应用升级作业 batchJob createJob 停止节点升级作业/停止应用部署作业/停止应用升级作业 batchJob pauseJob 删除节点升级作业/删除应用部署作业/删除应用升级作业 batchJob deleteJob 恢复节点升级作业/恢复应用部署作业/恢复应用升级作业 batchJob restoreJob 重试节点升级作业/重试应用部署作业/重试应用升级作业 batchJob retryJob 查询配额 quota getQuota 更新配额 quota updateQuota 创建规则 rule createRule 删除规则 rule deleteRule 更新规则 rule updateRule 创建密钥 secret createSecret 更新密钥 secret updateSecret 删除密钥 secret deleteSecret 过滤标签 Tags filterTags 批量添加删除标签 Tags batchAddDeleteTags 添加标签 Tags addTag 删除标签 Tags deleteTag 绑定加密数据 encryptdata bindEncryptdata 创建加密数据 encryptdata createEncryptData 删除加密数据 encryptdata deleteEncryptData 解绑加密数据 encryptdata unbindEncryptdata 更新加密数据 encryptdata updateEncryptData 创建网关 gateway createGateway 创建虚拟服务 gateway createVirtualService 删除网关 gateway deleteGateway 删除虚拟服务 gateway deleteVirtualService 更新网关 gateway updateGateway 更新虚拟服务 gateway updateVirtualService 创建系统订阅 Systemevent createSystemevent 删除系统订阅 Systemevent DeleteSystemevent 启用系统订阅 Systemevent startSystemevent 停用系统订阅 Systemevent stopSystemevent
  • 订阅后说明 创建系统订阅后,当有系统事件发生,在IEF控制台系统订阅列表中,会记录消息转发的次数。 图3 转发消息数 同时IEF会调用APIG中注册的API,请求消息体如下所示。请求消息体采用标准的CloudEvents格式,CloudEvents详细信息请参见这里。 {"data": {"event_type": "instance","operation": "created","timestamp": 134567677,"topic": "$hw/events/deployment/+/created","name": "xxxx","attributes": {"ID":"x"}}, "datacontenttype": "application/json","source": "sysevents","id": "xxxx","time": "2020-11-5 xxx"} data:系统事件的数据。 event_type:资源类型,String类型。 operation:资源的操作类型,String类型。 topic:消息发送的Topic,String类型。 timestamp:事件产生的时间戳,Uint64类型。 name:资源名称,String类型。 attributes:资源的属性,删除资源时消息中无此参数,Object类型。 datacontenttype:系统事件数据内容的格式,String类型。 source:系统事件的来源,String类型。 id:系统事件ID,String类型。 time:系统事件产生时间,String类型。 当前支持的资源类型、操作和Topic如下表所示。 表2 支持订阅的事件 系统事件 Topic 资源类型 操作 实例创建 $hw/events/instance/+/created 应用实例(instance) created 实例更新 $hw/events/instance/+/updated 应用实例(instance) updated 实例删除 $hw/events/instance/+/deleted 应用实例(instance) deleted 应用删除 $hw/events/deployment/+/deleted 容器应用(deployment) deleted 应用创建 $hw/events/deployment/+/created 容器应用(deployment) created 应用更新 $hw/events/deployment/+/updated 容器应用(deployment) updated 节点创建 $hw/events/edgeNode/+/created 边缘节点(edgeNode) created 节点更新 $hw/events/edgeNode/+/updated 边缘节点(edgeNode) updated 节点删除 $hw/events/edgeNode/+/deleted 边缘节点(edgeNode) deleted 节点上线 $hw/events/edgeNode/+/online 边缘节点(edgeNode) online 节点离线 $hw/events/edgeNode/+/offline 边缘节点(edgeNode) offline 设备创建 $hw/events/device/+/created 终端设备(device) created 设备更新 $hw/events/device/+/updated 终端设备(device) updated 设备删除 $hw/events/device/+/deleted 终端设备(device) deleted
  • 支持订阅的事件 当前支持订阅如下事件。 表1 支持订阅的事件 系统事件 Topic 资源类型 操作 实例创建 $hw/events/instance/+/created 应用实例(instance) created 实例更新 $hw/events/instance/+/updated 应用实例(instance) updated 实例删除 $hw/events/instance/+/deleted 应用实例(instance) deleted 应用删除 $hw/events/deployment/+/deleted 容器应用(deployment) deleted 应用创建 $hw/events/deployment/+/created 容器应用(deployment) created 应用更新 $hw/events/deployment/+/updated 容器应用(deployment) updated 节点创建 $hw/events/edgeNode/+/created 边缘节点(edgeNode) created 节点更新 $hw/events/edgeNode/+/updated 边缘节点(edgeNode) updated 节点删除 $hw/events/edgeNode/+/deleted 边缘节点(edgeNode) deleted 节点上线 $hw/events/edgeNode/+/online 边缘节点(edgeNode) online 节点离线 $hw/events/edgeNode/+/offline 边缘节点(edgeNode) offline 设备创建 $hw/events/device/+/created 终端设备(device) created 设备更新 $hw/events/device/+/updated 终端设备(device) updated 设备删除 $hw/events/device/+/deleted 终端设备(device) deleted
  • IEF预置的告警 IEF为每个边缘节点预置了7个告警规则,这7类告警会自动上报到AOM。 告警名称 触发条件 清除条件 告警等级 容器引擎异常 边缘节点配置Docker使能时,查询Docker信息失败 Docker正常运行,EdgeCore能够获取到Docker信息 紧急 存活探针异常 应用配置存活探针,探针检测到异常 容器探针检测成功 重要 申请GPU资源失败 部署GPU应用,申请GPU资源失败 成功申请到GPU资源 紧急 获取GPU信息失败 边缘节点配置GPU使能时,查询GPU信息失败 成功查询到GPU信息 紧急 AK/SK无效 EdgeHub连续10次分发临时AK/SK,检测到过期或者状态异常 EdgeHub成功分发临时AK/SK 重要 应用重启 应用容器异常重启 无需清除 次要 容器绑定网卡异常 容器绑定的网卡发生异常 容器绑定的网卡状态正常 紧急 图6 查看告警
  • 日志说明 边缘节点会上传系统日志和应用日志,您需要在IEF控制台上打开日志开关。 系统日志:边缘节点上IEF软件(如edge-core、edge-logger和edge-monitor等)产生的日志。 应用日志:边缘节点上部署的应用所产生的日志。 边缘节点会上传“/var/IEF/app/log”目录的日志,您可以在创建应用时将容器中目录挂载到“/var/IEF/app/log/{appName}”下,具体挂载方法请参见▪hostPath:将主机某个目录挂载到容器中。在AOM中可以按{appName}分类查看到应用的日志。 边缘节点会上传容器日志,日志组件会上传“{{DOCKER_ROOT_DIR}}/containers/{containerID}/{containerID}-json.log”文件的内容,DOCKER_ROOT_DIR可以通过docker info命令查询到,containerID就是容器ID。
  • 操作步骤 在边缘节点上执行如下命令修改EdgeCore配置,并保存。 vi /opt/IEF/Edge-core/conf/edge.yaml 支持配置的参数如下表所示: 表1 参数说明 组件 参数 说明 取值 edge-core interface-name 网卡名称 默认:eth0 internal-server 内置mqtt broker监听地址 tls://lo:8883,tls://docker0:8883 mage-gc-high-threshold 触发镜像垃圾回收的磁盘使用率百分比 默认:80 image-gc-low-threshold 镜像垃圾回收试图释放资源后达到的磁盘使用率百分比 默认:40 swr-url 拉取镜像的代理地址 默认:"" 更改完配置之后,重启EdgeCore。 systemctl restart edgecore
  • 消息端点 IEF提供如下默认消息端点: SystemEventBus:边缘节点上的MQTT,代表节点通信,可以作为源端点向云上发数据,也可以作为目的端点,接收云上消息。端点资源为边缘节点MQTT Topic。 SystemREST:云端的REST网关接口,可以作为源端点,向边缘侧发送REST请求。端点资源为REST请求的路径。 您还可以创建如下消息端点: Service Bus:边缘节点上的事务请求处理端点,可以作为目的端点,处理文件上传请求。端点资源为REST请求的路径。 DIS: 数据接入服务 ,可以作为目的端点,接收由IEF转发的数据。端点资源为在DIS服务中创建的DIS通道。 APIG:API网关服务,可以作为目的端点,接收由IEF转发的数据。端点资源为在API网关服务中创建的API地址。
  • 消息路由 目前支持如下几种消息转发路径: SystemREST到Service Bus:通过调用云端的REST Gateway接口,获取边缘节点上的文件服务。需配合边缘市场中的边缘文件服务应用一起使用。 SystemREST到SystemEventBus:通过调用云端的REST Gateway接口,向边缘节点中的SystemEventBus(MQTT broker)发送消息。 SystemEventBus到DIS/APIG服务:您可以将终端设备数据发送到边缘节点SystemEventBus(MQTT broker)的自定义Topic中,IEF会将这些数据转发到DIS通道或APIG后端地址。数据转发到DIS通道或者APIG后端地址后,您可以提取这些数据,并对数据进行处理分析。这条路径需要在创建消息路由时自定义MQTT Topic,自定义Topic的详细说明请参见自定义Topic。
共99354条