你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
在 Azure Stack Edge 上的 Ubuntu VM 上部署 IoT Edge
适用于:Azure Stack Edge Pro - GPUAzure Stack Edge Pro 2Azure Stack Edge Pro RAzure Stack Edge Mini R
本文介绍如何在 Azure Stack Edge 设备上运行的 Ubuntu VM 上部署 IoT Edge 运行时。 对于新的开发工作,请使用本文中所述的自助部署方法,因为它使用的是最新的软件版本。
概要工作流
概要流程如下所示:
- 创建或标识 IoT 中心或 Azure IoT 中心设备预配服务 (DPS) 实例。
- 使用 Azure CLI 获取 Ubuntu 20.04 LTS VM 映像。
- 将 Ubuntu 映像上传到 Azure Stack Edge VM 映像库。
- 使用以下步骤将 Ubuntu 映像部署为 VM:
- 提供 VM 的名称、用户名和密码。 另创建一个磁盘(可选)。
- 设置网络配置。
- 在“高级”选项卡上提供准备好的 cloud-init 脚本。
先决条件
在开始之前,请确保:
具备已激活的 Azure Stack Edge 设备。 有关详细步骤,请参阅激活 Azure Stack Edge Pro GPU。
访问最新的 Ubuntu 20.04 VM 映像(Azure 市场的映像或要引入的自定义映像):
$urn = Canonical:0001-com-ubuntu-server-focal:20_04-lts:20.04.202007160
使用搜索 Azure 市场映像中的步骤获取 VM 映像。
准备 cloud-init 脚本
若要将 IoT Edge 运行时部署到 Ubuntu VM,请在 VM 部署期间使用 cloud-init 脚本。
使用以下某个部分中的步骤:
使用对称密钥预配
若要在不使用 DPS 的情况下将设备连接到 IoT 中心,请使用本部分中的步骤为 VM 创建“高级”页面准备 cloud-init 脚本,以部署 IoT Edge 运行时和 Nvidia 的容器运行时。
使用现有的 IoT 中心或创建新的中心。 使用这些步骤创建 IoT 中心。
使用这些步骤在 IoT 中心注册 Azure Stack Edge 设备。
从 IoT 中心为设备检索主连接字符串,然后将其粘贴到下面的 DeviceConnectionString 位置。
用于对称密钥预配的 cloud-init 脚本
#cloud-config
runcmd:
- dcs="<DeviceConnectionString>"
- |
set -x
(
# Wait for docker daemon to start
while [ $(ps -ef | grep -v grep | grep docker | wc -l) -le 0 ]; do
sleep 3
done
if [ $(lspci | grep NVIDIA | wc -l) -gt 0 ]; then
#install Nvidia drivers
apt install -y ubuntu-drivers-common
ubuntu-drivers devices
ubuntu-drivers autoinstall
# Install NVIDIA Container Runtime
curl -s -L https://nvidia.github.io/nvidia-container-runtime/gpgkey | apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-container-runtime/$distribution/nvidia-container-runtime.list | tee /etc/apt/sources.list.d/nvidia-container-runtime.list
apt update
apt install -y nvidia-container-runtime
fi
# Restart Docker
systemctl daemon-reload
systemctl restart docker
# Install IoT Edge
apt install -y aziot-edge
if [ ! -z $dcs ]; then
iotedge config mp --connection-string $dcs
iotedge config apply
fi
if [ $(lspci | grep NVIDIA | wc -l) -gt 0 ]; then
reboot
fi ) &
apt:
preserve_sources_list: true
sources:
msft.list:
source: "deb https://packages.microsoft.com/ubuntu/20.04/prod focal main"
key: |
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.7 (GNU/Linux)
mQENBFYxWIwBCADAKoZhZlJxGNGWzqV+1OG1xiQeoowKhssGAKvd+buXCGISZJwT
LXZqIcIiLP7pqdcZWtE9bSc7yBY2MalDp9Liu0KekywQ6VVX1T72NPf5Ev6x6DLV
7aVWsCzUAF+eb7DC9fPuFLEdxmOEYoPjzrQ7cCnSV4JQxAqhU4T6OjbvRazGl3ag
OeizPXmRljMtUUttHQZnRhtlzkmwIrUivbfFPD+fEoHJ1+uIdfOzZX8/oKHKLe2j
H632kvsNzJFlROVvGLYAk2WRcLu+RjjggixhwiB+Mu/A8Tf4V6b+YppS44q8EvVr
M+QvY7LNSOffSO6Slsy9oisGTdfE39nC7pVRABEBAAG0N01pY3Jvc29mdCAoUmVs
ZWFzZSBzaWduaW5nKSA8Z3Bnc2VjdXJpdHlAbWljcm9zb2Z0LmNvbT6JATUEEwEC
AB8FAlYxWIwCGwMGCwkIBwMCBBUCCAMDFgIBAh4BAheAAAoJEOs+lK2+EinPGpsH
/32vKy29Hg51H9dfFJMx0/a/F+5vKeCeVqimvyTM04C+XENNuSbYZ3eRPHGHFLqe
MNGxsfb7C7ZxEeW7J/vSzRgHxm7ZvESisUYRFq2sgkJ+HFERNrqfci45bdhmrUsy
7SWw9ybxdFOkuQoyKD3tBmiGfONQMlBaOMWdAsic965rvJsd5zYaZZFI1UwTkFXV
KJt3bp3Ngn1vEYXwijGTa+FXz6GLHueJwF0I7ug34DgUkAFvAs8Hacr2DRYxL5RJ
XdNgj4Jd2/g6T9InmWT0hASljur+dJnzNiNCkbn9KbX7J/qK1IbR8y560yRmFsU+
NdCFTW7wY0Fb1fWJ+/KTsC4=
=J6gs
-----END PGP PUBLIC KEY BLOCK-----
packages:
- moby-cli
- moby-engine
write_files:
- path: /etc/systemd/system/docker.service.d/override.conf
permissions: "0644"
content: |
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd --host=fd:// --add-runtime=nvidia=/usr/bin/nvidia-container-runtime --log-driver local
使用 DPS
使用本部分中的步骤将设备连接到 DPS 和 IoT Central。 你将准备一个 script.sh 文件,用于在创建 VM 时部署 IoT Edge 运行时。
使用现有的 IoT 中心和 DPS,或创建新的 IoT 中心。
- 使用这些步骤创建 IoT 中心。
- 使用这些步骤创建 DPS,然后将 IoT 中心链接到 DPS 范围。
转到 DPS 资源并创建单个注册。
- 转到“设备预配服务”>“管理注册”>“添加单个注册”。
- 确保为“证明类型和 IoT Edge 设备的对称密钥”选择 True。 默认选择为 False。
- 从 DPS 资源页中检索以下信息:
- 注册 ID。 建议对 IoT 中心使用与“设备 ID”相同的 ID。
- ID 范围(在“概述”菜单)。
- “单个注册”菜单中的“主 SAS 密钥”。
将 IoT 中心 (IDScope) 和 DPS(RegistrationID、对称密钥)中的值复制并粘贴到脚本参数中。
IoT 中心 DPS 的 cloud-init 脚本
#cloud-config
runcmd:
- dps_idscope="<DPS IDScope>"
- registration_device_id="<RegistrationID>"
- key="<Symmetric Key>"
- |
set -x
(
wget https://github.com/Azure/iot-edge-config/releases/latest/download/azure-iot-edge-installer.sh -O azure-iot-edge-installer.sh \
&& chmod +x azure-iot-edge-installer.sh \
&& sudo -H ./azure-iot-edge-installer.sh -s $dps_idscope -r $registration_device_id -k $key \
&& rm -rf azure-iot-edge-installer.sh
# Wait for docker daemon to start
while [ $(ps -ef | grep -v grep | grep docker | wc -l) -le 0 ]; do
sleep 3
done
systemctl stop aziot-edge
if [ $(lspci | grep NVIDIA | wc -l) -gt 0 ]; then
#install Nvidia drivers
apt install -y ubuntu-drivers-common
ubuntu-drivers devices
ubuntu-drivers autoinstall
# Install NVIDIA Container Runtime
curl -s -L https://nvidia.github.io/nvidia-container-runtime/gpgkey | apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-container-runtime/$distribution/nvidia-container-runtime.list | tee /etc/apt/sources.list.d/nvidia-container-runtime.list
apt update
apt install -y nvidia-container-runtime
fi
# Restart Docker
systemctl daemon-reload
systemctl restart docker
systemctl start aziot-edge
if [ $(lspci | grep NVIDIA | wc -l) -gt 0 ]; then
reboot
fi
) &
write_files:
- path: /etc/systemd/system/docker.service.d/override.conf
permissions: "0644"
content: |
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd --host=fd:// --add-runtime=nvidia=/usr/bin/nvidia-container-runtime --log-driver local
部署 IoT Edge 运行时
使用上述 cloud-init 脚本部署 IoT Edge 运行时是 VM 创建过程的一部分。
以下是部署 VM 和 IoT Edge 运行时的大致步骤:
从 Azure 市场获取 Ubuntu VM 映像。 有关详细步骤,请按照使用 Azure 市场映像为 Azure Stack Edge 创建 VM 映像中的说明进行操作。
- 在 Azure 门户中,转到 Azure 市场。
- 连接到 Azure Cloud Shell 或已安装 Azure CLI 的客户端。 有关详细步骤,请参阅 Azure Cloud Shell 中的 Bash 快速入门。
注意
关闭 shell 会话将删除在 shell 会话期间创建的所有变量。 重新打开会话需要重新创建变量。
c. 运行以下命令设置订阅。
az account set –subscription <subscription id>
使用搜索 Azure 市场映像中的步骤在 Azure 市场中搜索 Ubuntu 20.04 LTS 映像。
Ubuntu 20.04 LTS 映像的示例:
$urn = Canonical:0001-com-ubuntu-server-focal:20_04-lts:20.04.202007160
从市场映像创建新的托管磁盘。 详细步骤请参见使用 Azure 市场映像为 Azure Stack Edge 创建 VM 映像。
将 VHD 从托管磁盘导出到 Azure 存储帐户。 更多详细步骤请参见将 VHD 从托管磁盘导出到 Azure 存储。
按照以下步骤使用 VM 映像创建 Ubuntu VM。
在“高级”选项卡上指定 cloud-init 脚本。若要创建 VM,请参阅通过 Azure 门户部署 GPU VM 或通过 Azure 门户部署 VM。
在 cloud-init 中指定适当的设备连接字符串以连接到 IoT 中心或 DPS 设备。 有关详细步骤,请参阅使用对称密钥进行预配,或使用 IoT 中心 DPS 进行预配。
如果在创建 VM 期间未指定 cloud-init,则必须在创建 VM 后手动部署 IoT Edge 运行时:
- 通过 SSH 连接到 VM。
- 在 VM 上安装容器引擎。 有关详细步骤,请参阅使用对称密钥在 Linux 上创建和预配 IoT Edge 设备或快速入门 - 使用 Azure 门户设置 IoT 中心 DPS。
验证 IoT Edge 运行时
使用这些步骤验证 IoT Edge 运行时是否正在运行。
在 Azure 门户中,转到 IoT 中心资源。
选择 IoT Edge 设备。
验证 IoT Edge 运行时是否正在运行。
若要对 IoT Edge 设备配置进行故障排除,请参阅对 IoT Edge 设备进行故障排除。
更新 IoT Edge 运行时
若要更新 VM,请按照更新 IoT Edge 中的说明进行操作。 若要查找最新版本的 Azure IoT Edge,请参阅 Azure IoT Edge 版本。
后续步骤
若要在 Ubuntu VM 上部署和运行 IoT Edge 模块,请参阅部署 IoT Edge 模块中的步骤。
若要部署 Nvidia 的 DeepStream 模块,请参阅在具有 GPU 的 Azure Stack Edge Pro 上的 Ubuntu VM 上部署 Nvidia DeepStream 模块。
若要部署 NVIDIA DIGITS,请参阅在预制 NVIDIA 模块中启用 GPU。