适用于:
IoT Edge 1.5
重要
IoT Edge 1.5 LTS 是受支持的版本。 IoT Edge 1.4 LTS 于 2024 年 11 月 12 日终止。 如果使用的是早期版本,请参阅 Update IoT Edge。
准备好将 IoT Edge 解决方案从开发迁移到生产环境时,请确保已将其配置为持续性能。
本文中并非所有信息都同样重要。 为了帮助你确定优先级,每个部分都从将工作划分为两个组的列表开始:在投入生产之前完成 非常重要,或者 了解会有帮助。
设备配置
IoT Edge 设备可以包括 Raspberry Pi、笔记本电脑或服务器上运行的虚拟机。 你可以以物理方式或通过虚拟连接访问设备,也可以将其隔离很长时间。 无论哪种方式,请确保它已配置为正常工作。
重要
- 安装生产证书
- 创建设备管理计划
- 将 Moby 用作容器引擎。 如果使用的是 Ubuntu Core 快照,Canonical 负责管理 Docker 快照,并支持在生产环境中使用。
有用
- 选择上游协议
安装生产证书
生产环境中的每个 IoT Edge 设备上需要安装设备证书颁发机构 (CA) 证书。 请在配置文件中将 CA 证书声明为 IoT Edge 运行时的一部分。 对于开发和测试,如果未在配置文件中声明证书,IoT Edge 运行时会创建临时证书。 但这些临时证书在三个月后过期,并且对于生产方案不安全。 对于生产方案,请提供自己的 Edge CA 证书,不管是自签名证书颁发机构颁发的证书,还是从商业证书颁发机构购买的证书。
若要了解 Edge CA 证书的作用,请参阅 Azure IoT Edge 如何使用证书。
有关在 IoT Edge 设备上安装证书并从配置文件引用证书的详细信息,请参阅 在 IoT Edge 设备上管理证书。
创建设备管理计划
将任何设备置于生产环境之前,请考虑如何管理将来的更新。 对于 IoT Edge 设备,要更新的组件列表可能包括:
- 设备固件
- 操作系统库
- 容器引擎,例如 Moby
- IoT Edge
- CA 证书
Device Update for IoT Hub 是一项服务,可用于为 IoT Edge 设备部署无线更新 (OTA)。
更新 IoT Edge 的其他方法需要物理或 SSH 访问 IoT Edge 设备。 有关详细信息,请参阅更新 IoT Edge 运行时。 若要更新许多设备,请考虑在脚本中添加更新步骤,或使用 Ansible 等自动化工具。
容器引擎
任何 IoT Edge 设备都需要容器引擎。 在生产环境中支持 Moby 引擎。 如果使用的是 Ubuntu Core 快照,Canonical 负责管理 Docker 快照,并支持在生产环境中使用。 其他容器引擎(如 Docker)可与 IoT Edge 配合使用,并且可以使用这些引擎进行开发。 与 Azure IoT Edge 配合使用时,moby-engine 可以重新分发,Microsoft 为此引擎提供支持。
选择上游协议
可同时为 IoT Edge 代理和 IoT Edge 中心配置用于与 IoT 中心进行上游通信的协议(确定所用端口)。 默认协议为 AMQP,但可能需要根据网络设置更改该协议。
两个运行时模块都有环境变量 UpstreamProtocol 。 此变量的有效值为:
- MQTT
- AMQP
- MQTTWS
- AMQPWS
在设备本身的配置文件中,为 IoT Edge 代理配置 UpstreamProtocol 变量。 例如,如果 IoT Edge 设备位于阻止 AMQP 端口的代理服务器后面,则可能需要将 IoT Edge 代理配置为使用基于 WebSocket 的 AMQP(AMQPWS)建立与 IoT 中心的初始连接。
IoT Edge 设备连接后,在将来的部署中继续为这两个运行时模块配置 UpstreamProtocol 变量。 例如,请参阅 配置 IoT Edge 设备以通过代理服务器进行通信。
部署
-
有用
- 与上游协议保持一致。
- 为系统模块设置主机存储。
- 减少 IoT Edge 中心使用的内存空间。
- 在部署清单中使用正确的模块镜像。
- 请注意使用自定义模块时的双尺寸限制。
- 配置如何应用模块更新。
与上游协议保持一致
如果将 IoT Edge 设备上的 IoT Edge 代理配置为使用与默认 AMQP 不同的协议,请在将来的所有部署中声明相同的协议。 例如,如果 IoT Edge 设备位于阻止 AMQP 端口的代理服务器后面,则你可能已将设备配置为通过基于 WebSocket 的 AMQP (AMQPWS) 进行连接。 将模块部署到设备时,请为 IoT Edge 代理和 IoT Edge 中心配置相同的 AMQPWS 协议。 否则,默认 AMQP 将覆盖设置并阻止再次连接。
只需为 IoT Edge 代理和 IoT Edge 中心模块配置 UpstreamProtocol 环境变量。 任何其他模块都继承运行时模块中设置的任何协议。
将 IoT Edge 设备配置为通过代理服务器进行通信中提供了此过程的示例。
为系统模块设置主机存储
IoT Edge 中心和代理模块使用本地存储来保留状态,并允许在模块、设备和云之间传递消息。 为了提高可靠性和性能,请将系统模块配置为使用主机文件系统上的存储。
有关详细信息,请参阅系统模块的主机存储。
减少 IoT Edge 中心使用的内存空间
如果要部署内存受限的设备,请将IoT Edge中心配置为以更精简的容量运行,并使用更少的磁盘空间。 但是,此配置会限制 IoT Edge 中心的性能,因此请找到适用于解决方案的适当平衡。
在受限的设备上不要进行性能优化
IoT Edge 中心默认已进行性能优化,因此它会尝试分配较大的内存区块。 在 Raspberry Pi 等小型设备上,此配置可能会影响稳定性。 如果要部署资源受限的设备,请将 OptimizeForPerformance 环境变量设置为 IoT Edge 中心上的 false。
当你将OptimizeForPerformance设置为true时,MQTT 协议头会使用PooledByteBufferAllocator,它具有更好的性能,但会分配更多的内存。 分配器在 32 位作系统或内存不足的设备上效果不佳。 此外,如果针对性能进行了优化,RocksDb 会为其作为本地存储提供程序的角色分配更多内存。
有关详细信息,请参阅小型设备的稳定性问题。
禁用未使用的协议
优化 IoT Edge 中心的性能并减少其内存用量的另一种方法是,针对未在解决方案中使用的所有协议禁用协议头。
为部署清单中的 IoT Edge 中心模块设置布尔环境变量以配置协议头。 三个变量如下:
- amqpSettings__enabled
- mqttSettings__enabled
- httpSettings__启用
所有三个变量都带有两条下划线,可设置为 true 或 false。
减少消息的存储时间
如果 IoT Edge 中心模块出于任何原因无法将其传送到 IoT 中心,则暂时存储消息。 可以对 IoT Edge 中心保存未送达消息的时间进行配置,该时间过后就让这些消息过期。 如果设备上存在内存问题,请在 IoT Edge 中心模块孪生中降低 timeToLiveSecs 值。
timeToLiveSecs 参数的默认值为 7200 秒,即 2 小时。
在部署配置文件中使用正确的模块图像。
如果使用空模块映像或错误模块映像,Edge 代理会重试加载映像。 此重试过程会生成额外的流量。 请将正确的映像添加到部署清单,免产生不必要的流量。
不要使用模块映像的调试版本
从测试方案迁移到生产方案时,请记住从部署清单中删除调试配置。 确保部署清单中没有任何模块映像带有 .debug 后缀。 如果添加了 create 选项用于公开模块中的调试端口,也请删除这些 create 选项。
使用自定义模块时,请注意孪生大小限制
包含自定义模块的部署清单是 EdgeAgent 孪生的组成部分。 查看模块孪生大小的限制。
如果部署大量模块,可能会耗尽此孪生大小限制。 请考虑对此硬限制的一些常见缓解措施:
- 将任何配置存储在自定义模块孪生(具有其自己的限制)中。
- 存储一些指向非空间受限位置(即,blob 存储)的配置。
配置如何应用模块更新
更新部署时,Edge 代理会收到新的配置作为孪生更新。 如果新配置具有新的或更新的模块映像,则默认情况下,Edge 代理会按顺序处理每个模块:
- 已下载更新的映像
- 正在运行的模块已被停止
- 已启动新的模块实例
- 正在处理下一个模块更新
在某些情况下,例如模块之间存在依赖项时,可能需要先下载所有更新的模块映像,然后再重启任何正在运行的模块。 可以通过将 IoT Edge 代理环境变量 ModuleUpdateMode 设置为字符串值 WaitForAllPulls来配置此模块更新行为。 有关详细信息,请参阅 IoT Edge 环境变量。
"modulesContent": {
"$edgeAgent": {
"properties.desired": {
...
"systemModules": {
"edgeAgent": {
"env": {
"ModuleUpdateMode": {
"value": "WaitForAllPulls"
}
...
容器管理
- 重要
- 使用标记管理版本。
- 管理存储卷。
-
有用
- 将运行时容器存储在专用注册表中。
- 配置映像垃圾回收。
使用标记管理版本
标记是一个 Docker 概念,可用于区分 Docker 容器的版本。 标记是附加在容器存储库末尾的后缀(如 1.5)。 例如 mcr.microsoft.com/azureiotedge-agent:1.5。 标记是可变的,随时可以更改为指向另一个容器,因此你的团队应就更新模块映像时遵循的约定达成一致。
标记还有助于在 IoT Edge 设备上强制执行更新。 将模块的更新版本推送到容器注册表时,请递增标记。 然后,使用递增的标记将新部署推送到设备。 容器引擎将递增的标记识别为新版本,并将最新模块版本提取到设备。
IoT Edge 运行时的标签
IoT Edge代理和IoT Edge中心映像使用与其关联的IoT Edge版本进行标记。 可通过两种不同的方法对运行时映像使用标记:
滚动标签 - 仅使用版本号的前两位数来获取匹配这些数字的最新镜像。 例如,每当有新版本发布时,1.5 就会更新为最新的 1.5.x 版本。 如果 IoT Edge 设备的容器运行时重新提取映像,则运行时模块会更新到最新版本。 Azure 门户中的部署默认使用滚动标记。 建议在开发时使用此方法。
特定标记 - 使用版本号的所有三个值,以显式设置映像版本。 例如,1.5.0 在初始版本后不会更改。 准备好更新时,请在部署清单中声明新的版本号。 出于生产目的,建议使用此方法。
管理存储卷
IoT Edge不会删除附加到模块容器的存储卷。 此行为是符合设计的,因为它允许跨容器实例(例如升级场景)保留数据。 但是,如果这些卷未使用,可能会导致磁盘空间耗尽和后续系统错误。 如果在场景中使用 Docker 卷,请使用 Docker 工具(如 docker volume prune 和 docker 卷 rm )删除未使用的卷,特别是在生产场景中。
将运行时容器存储在专用注册表中
你了解如何在专用 Azure 注册表中存储自定义代码模块的容器映像,但你也可以使用它来存储公共容器映像(例如将它用于 edgeAgent 和 edgeHub 运行时模块)。 如果防火墙限制严格,可能需要将这些运行时容器存储在专用注册表中,因为它们通常存储在Microsoft容器注册表(MCR) 中。
以下步骤演示如何将 edgeAgent 和 edgeHub 的 Docker 映像拉取到本地计算机,将其重新标记,将其推送到专用注册表,然后更新配置文件,以便设备知道从专用注册表拉取映像。
从 Microsoft 注册表拉取 edgeAgent Docker 映像。 根据需要更新版本号。
# Pull edgeAgent image docker pull mcr.microsoft.com/azureiotedge-agent:1.5 # Pull edgeHub image docker pull mcr.microsoft.com/azureiotedge-hub:1.5列出所有 Docker 映像,找到 edgeAgent 和 edgeHub 映像,然后复制其映像 ID。
docker images重新标记 edgeAgent 和 edgeHub 映像。 将括号中的值替换为你自己的值。
# Retag your edgeAgent image docker tag <my-image-id> <registry-name/server>/azureiotedge-agent:1.5 # Retag your edgeHub image docker tag <my-image-id> <registry-name/server>/azureiotedge-hub:1.5将 edgeAgent 和 edgeHub 映像推送到专用注册表。 将括号中的值替换为你自己的值。
# Push your edgeAgent image to your private registry docker push <registry-name/server>/azureiotedge-agent:1.5 # Push your edgeHub image to your private registry docker push <registry-name/server>/azureiotedge-hub:1.5对于 edgeAgent 和 edgeHub 系统模块,通过将
mcr.microsoft.com替换为你自己的“注册表名称/服务器”,来更新 deployment.template.json 文件中的镜像引用。在 IoT Edge 设备上打开文本编辑器以更改配置文件,使其知道你的专用注册表映像。
sudo nano /etc/aziot/config.toml在文本编辑器中,更改
[agent.config]下的图像参数。 将括号中的值替换为你自己的值。[agent.config] image = "<registry-name/server>/azureiotedge-agent:1.5"如果专用注册表需要身份验证,请在
[agent.config.auth]中设置身份验证参数。[agent.config.auth] serveraddress = "<login-server>" # Almost always equivalent to <registry-name/server> username = "<username>" password = "<password>"保存更改并退出文本编辑器。
应用 IoT Edge 配置更改。
sudo iotedge config applyIoT Edge 运行时重启。
有关详细信息,请参阅:
配置映像垃圾回收
映像垃圾回收是 IoT Edge v1.4 及更高版本中的一项功能,可自动清理 IoT Edge 模块不再使用的 Docker 映像。 它只会删除 IoT Edge 运行时作为部署的一部分拉取的 Docker 映像。 删除未使用的 Docker 映像有助于节省磁盘空间。
aziot-edged 服务(IoT Edge主机组件)实现此功能,并默认启用此功能。 清理过程每天在午夜(设备本地时间)运行,并删除七天前使用的未使用的 Docker 映像。 设置参数以控制 config.toml 文件中的清理行为,本部分介绍它们。 如果未在配置文件中指定参数,则应用默认值。
例如,以下 config.toml 节显示具有默认值的图像垃圾回收设置:
[image_garbage_collection]
enabled = true
cleanup_recurrence = "1d"
image_age_cleanup_threshold = "7d"
cleanup_time = "00:00"
下表描述了映像垃圾回收参数。 所有参数都是可选的。 单独设置它们以更改默认设置。
| 参数 | 描述 | 必须 | 默认值 |
|---|---|---|---|
enabled |
启用映像垃圾回收。 可以通过将此值设置为 false 来禁用该功能。 |
可选 | 是 |
cleanup_recurrence |
控制清理任务运行的频率。 将此值指定为天数的倍数,并且不能小于一天。 例如:1d、2d、6d 等。 |
可选 | 1 天 |
image_age_cleanup_threshold |
定义未使用图像在被考虑清理之前的最小年龄阈值。 以天为单位指定此值。 可以指定0d在从部署中删除映像后立即对其进行清理。 从部署中删除映像后,这些映像被视为未使用。 |
可选 | 7天 |
cleanup_time |
清理任务运行时,在设备本地时间的一天中的时间。 必须采用 24 小时制 HH:MM 格式。 如果设备未联机,则清理任务不会运行。 如果设备当时处于联机状态,则任务将在下一个计划 cleanup_time 下运行。 |
可选 | 00:00 |
网络
-
有用
- 查看出站和入站配置
- 允许从 IoT Edge 设备进行连接
- 配置为通过代理进行通信
- 在容器引擎设置中设置 DNS 服务器
查看出站和入站配置
始终将 Azure IoT 中心和 IoT Edge 之间的通信通道配置为出站。 对于大多数 IoT Edge 方案,只需建立三个连接。 容器引擎需要连接到保存模块映像的一个或多个容器注册表。 IoT Edge 运行时需要连接到 IoT 中心,以检索设备配置信息,以及发送消息和遥测数据。 如果使用自动预配,IoT Edge 需要连接到设备预配服务。 有关详细信息,请参阅防火墙和端口配置规则。
允许从 IoT Edge 设备进行连接
如果网络设置要求显式允许来自 IoT Edge 设备的连接,请查看以下 IoT Edge 组件列表:
- IoT Edge 代理 打开与 IoT 中心的持久 AMQP 或 MQTT 连接,可能通过 WebSockets 实现。
- IoT Edge 中心可能通过 WebSocket 来与 IoT 中心建立一个持久性 AMQP 连接或多个 MQTT 连接。
- IoT Edge 服务会向 IoT 中心发出间歇性 HTTPS 调用。
在所有三种情况下,完全限定的域名(FQDN)与模式 \*.azure-devices.net匹配。
容器注册表
容器引擎通过 HTTPS 向容器注册表发出调用。 若要检索 IoT Edge 运行时容器映像,FQDN 为 mcr.microsoft.com。 容器引擎连接到部署中配置的其他注册表。
此清单可作为防火墙规则的入手点:
FQDN(* = 通配符) |
出站 TCP 端口 | 使用情况 |
|---|---|---|
mcr.microsoft.com |
443 | Azure 容器注册表 |
*.data.mcr.microsoft.com |
443 | 提供内容分发的数据端点 |
*.cdn.azcr.io |
443 | 将模块从市场平台部署到设备 |
global.azure-devices-provisioning.net |
443 | 设备预配服务访问(可选) |
*.azurecr.cn |
443 | 个人和第三方容器注册表 |
*.blob.core.chinacloudapi.cn |
443 | 从 blob 存储下载 Azure 容器注册表映像增量 |
*.azure-devices.cn |
5671、8883、4431 | IoT 中心访问 |
*.docker.io |
443 | Docker 中心访问(可选) |
1为安全的 MQTT 打开端口 8883,或为安全的 AMQP 打开端口 5671。 如果只能通过端口 443 建立连接,则其中任一协议都可以通过 WebSocket 隧道运行。
由于 IoT 中心的 IP 地址可能会在无通知的情况下更改,因此应始终使用 FQDN 进行白名单配置。 若要了解详细信息,请参阅了解 IoT 中心的 IP 地址。
其中一些防火墙规则继承自 Azure 容器注册表。 有关详细信息,请参阅配置规则以访问防火墙后的 Azure 容器注册表。
可以在 Azure 容器注册表中启用专用数据终结点,从而避免对 *.blob.core.chinacloudapi.cn FQDN 使用通配符进行允许列表设置。 有关详细信息,请参阅启用专用数据终结点。
注意
为了在 REST 和数据终结点之间提供一致的 FQDN,从 2020 年 6 月 15 日开始,Azure 容器注册表数据终结点将从 *.cdn.mscr.io 更改为 *.data.mcr.microsoft.com
有关详细信息,请参阅 Microsoft Container Registry 客户端防火墙规则配置
如果你不想将防火墙配置为允许访问公共容器注册表,则可以在专用容器注册表中存储映像,如在专用注册表中存储运行时容器中所述。
Azure IoT 标识服务
IoT 标识服务为 Azure IoT 设备提供预配和加密服务。 标识服务会检查已安装的版本是否为最新版本。 该检查使用以下 FQDN 来验证版本。
| FQDN | 出站 TCP 端口 | 使用情况 |
|---|---|---|
aka.ms |
443 | 提供对版本文件的重定向的虚 URL |
raw.githubusercontent.com |
443 | GitHub 中托管的标识服务版本文件 |
配置为通过代理进行通信
如果要在使用代理服务器的网络上部署设备,则需要通过代理进行通信才能访问 IoT 中心和容器注册表。 有关详细信息,请参阅将 IoT Edge 设备配置为通过代理服务器进行通信。
在容器引擎设置中设置 DNS 服务器
在容器引擎设置中为环境指定 DNS 服务器。 DNS 服务器设置适用于引擎启动的所有容器模块。
在设备上的
/etc/docker目录中,编辑daemon.json文件。 如果文件不存在,请创建该文件。添加 dns 键,并将 DNS 服务器地址设置为可公开访问的 DNS 服务。 如果边缘设备无法访问公共 DNS 服务器,请使用可在网络中访问的 DNS 服务器地址。 例如:
{ "dns": ["1.1.1.1"] }对于阻止外部 DNS 的公司或专用网络,请改用内部 DNS 服务器:
{ "dns": ["10.0.0.53"] }
解决方案管理
-
有用
- 设置日志和诊断
- 设置默认日志记录驱动程序
- 考虑测试和 CI/CD 管道
设置日志和诊断
在 Linux 上,IoT Edge 守护程序使用日志作为默认的日志记录驱动程序。 使用命令行工具 journalctl 查询守护程序日志。
从 1.2 版开始,IoT Edge 依赖于多个守护程序。 虽然可以使用以下命令单独 journalctl查询每个守护程序的日志,但可以使用 iotedge system 命令来查询合并的日志。
合并的
iotedge命令:sudo iotedge system logs等效
journalctl命令:journalctl -u aziot-edge -u aziot-identityd -u aziot-keyd -u aziot-certd -u aziot-tpmd
测试 IoT Edge 部署时,通常会访问设备以检索日志和故障排除。 在部署方案中,可能没有该选项。 请考虑如何收集有关生产中设备的信息。 一个选项是使用日志记录模块从其他模块收集信息并将其发送到云。 例如,使用 logspout-loganalytics,或自行设计。
设置默认日志记录驱动程序
默认情况下,Moby 容器引擎不会设置容器日志大小限制。 随着时间的推移,此默认设置可能会导致设备填满日志并耗尽磁盘空间。 将您的容器引擎设置为使用 local 日志驱动程序 作为日志记录机制。
local日志记录驱动程序提供默认日志大小限制,默认执行日志轮换,并使用更高效的文件格式,这有助于防止磁盘空间耗尽。 还可以使用不同的 日志记录驱动程序 ,并根据需求设置不同的大小限制。
选项:为所有容器模块配置默认日志记录驱动程序
通过在log driver文件中将daemon.json的值设置为日志驱动程序的名称,为容器引擎指定一个特定的日志记录驱动程序。 以下示例将默认日志记录驱动程序设置为 local 日志驱动程序(建议)。
{
"log-driver": "local"
}
还可以将 log-opts 密钥配置为在 daemon.json 文件中使用适当的值。 以下示例将日志驱动程序设置为 local 并设置 max-size 和 max-file 选项。
{
"log-driver": "local",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
将此信息添加到命名 daemon.json 的文件,并将其置于以下位置:
/etc/docker/
重启容器引擎以使更改生效。
选项:调整每个容器模块的日志设置
在每个模块的 createOptions 中设置这些选项。 例如:
"createOptions": {
"HostConfig": {
"LogConfig": {
"Type": "local",
"Config": {
"max-size": "10m",
"max-file": "3"
}
}
}
}
Linux 系统上的其他选项
安装 logrotate 工具,以便从设备中定期删除旧日志。 使用以下文件规范:
/var/lib/docker/containers/*/*-json.log{ copytruncate daily rotate7 delaycompress compress notifempty missingok }
考虑测试和 CI/CD 管道
为使 IoT Edge 部署获得最大的效率,请将生产部署集成到测试和 CI/CD 管道中。 Azure IoT Edge 支持多个 CI/CD 平台,包括 Azure DevOps。 有关详细信息,请参阅向 Azure IoT Edge 进行持续集成和持续部署。
安全注意事项
- 重要
- 管理对容器注册表的访问权限。
- 限制对主机资源的容器访问。
管理对容器注册表的访问
在将模块部署到生产 IoT Edge 设备之前,请确保控制对容器注册表的访问,以便外部人员无法访问或更改容器映像。 使用专用容器注册表管理容器映像。
在教程和其他文档中,我们告诉你在 IoT Edge 设备上使用与开发计算机上相同的容器注册表凭据。 这些说明可帮助你更轻松地设置测试和开发环境,并且不可用于生产环境。
若要更安全地访问注册表,请从多个 身份验证选项中进行选择。 使用 Active Directory 服务主体是一种流行且推荐的方法,这样,应用程序或服务就可以像 IoT Edge 设备一样以无人值守的方式自动拉取容器映像。 您还可以使用仓库范围的访问令牌,该令牌允许您创建仅在 Azure 容器注册表中存在的长时间或短时间的身份,并将访问范围限定到存储库级别。
若要创建服务主体,请运行 创建服务主体中所述的两个脚本。 这些脚本执行以下作:
第一个脚本创建服务主体。 它显示服务主体 ID 和服务主体密码。 将这些值安全地存储在记录中。
第二个脚本创建角色分配以授予服务主体。 如果需要,请随后运行它。 请为参数指定
role用户角色。 有关角色列表,请参阅 Azure 容器注册表角色和权限。
若要使用服务主体进行身份验证,请从部署清单中的第一个脚本提供服务主体 ID 和密码凭据。
对于用户名或客户端 ID,请指定服务主体 ID。
对于密码或客户端机密,请指定服务主体密码。
要创建存储库范围的令牌,请按创建存储库范围的令牌操作。
若要使用存储库范围的令牌进行身份验证,请在部署清单中创建存储库范围的令牌后提供令牌名称和密码凭据。
对于用户名,请指定令牌的用户名。
对于密码,请指定其中一个令牌密码。
注意
实现增强的安全身份验证后,请禁用 管理员用户 设置,以便默认用户名和密码访问不可用。 可以在 Azure 门户中的“ 设置”下找到容器注册表的设置,选择 “访问密钥”。
限制容器对主机资源的访问
若要跨模块平衡共享主机资源,请为每个模块设置资源使用限制。 这些限制确保一个模块不能使用过多的内存或 CPU,并阻止其他进程在设备上运行。 默认情况下,IoT Edge 平台不会限制模块的资源,因为你需要测试以了解模块运行正常所需的资源量。
Docker 允许限制内存和 CPU 使用率等资源。 有关详细信息,请参阅内存、CPU 和 GPU 的运行时选项。
可以使用部署清单中的创建选项将这些约束应用于各个模块。 若要了解详细信息,请参阅如何配置 IoT Edge 模块的容器创建选项。
例如,若要将模块限制为 256 MB 内存和 1 个 CPU 核心:
"createOptions": {
"HostConfig": {
"Memory": 268435456,
"NanoCPUs": 1000000000
}
}
后续步骤
- 了解有关 IoT Edge 自动部署的详细信息。
- 了解 IoT Edge 如何支持 持续集成和持续部署。