Bereitstellen von IoT Edge auf einer Ubuntu-VM unter Azure Stack Edge
GILT FÜR:Azure Stack Edge Pro – GPUAzure Stack Edge Pro 2Azure Stack Edge Pro RAzure Stack Edge Mini R
In diesem Artikel wird beschrieben, wie Sie eine IoT Edge-Runtime auf einer Ubuntu-VM bereitstellen, die auf Ihrem Azure Stack Edge-Gerät ausgeführt wird. Verwenden Sie bei neuen Entwicklungsarbeiten die in diesem Artikel beschriebene Self-Service-Bereitstellungsmethode, da sie die neueste Softwareversion verwendet.
Allgemeiner Ablauf
Der allgemeine Ablauf ist wie folgt:
- Erstellen oder identifizieren Sie die IoT Hub- oder Azure IoT Hub Device Provisioning Service (DPS)-Instanz.
- Verwenden Sie Azure CLI, um das Ubuntu 20.04 LTS VM-Image zu erwerben.
- Laden Sie das Ubuntu-Image in die Azure Stack Edge-VM-Imagebibliothek hoch.
- Stellen Sie das Ubuntu-Image als VM mithilfe der folgenden Schritte bereit:
- Geben Sie den Namen der VM, den Benutzernamen und das Kennwort an. Das Erstellen eines weiteren Datenträgers ist optional.
- Richten Sie die Netzwerkkonfiguration ein.
- Stellen Sie ein vorbereitetes cloud-init-Skript auf der Registerkarte Erweitert bereit.
Voraussetzungen
Bevor Sie beginnen, stellen Sie sicher, dass Sie über:
Ein Azure Stack Edge-Gerät, das Sie aktiviert haben. Eine ausführliche Beschreibung der erforderlichen Schritte finden Sie unter Aktivieren von Azure Stack Edge Pro GPU.
Zugriff auf das neueste Ubuntu 20.04 VM-Image – entweder das Image aus Azure Marketplace oder ein benutzerdefiniertes Image, das Sie bereitstellen:
$urn = Canonical:0001-com-ubuntu-server-focal:20_04-lts:20.04.202007160
Führen Sie die Schritte in Suchen nach Azure Marketplace-Images aus, um das VM-Image zu erwerben.
Vorbereiten des „cloud-init“-Skripts
Verwenden Sie während der VM-Bereitstellung ein cloud-init-Skript, um die IoT Edge-Runtime auf der Ubuntu-VM bereitzustellen.
Führen Sie die Schritte in einem der folgenden Abschnitte aus:
- Bereiten Sie das „cloud-init“-Skript mit symmetrischer Schlüsselbereitstellung vor.
- Bereiten Sie das „cloud-init“-Skript mit IoT Hub DPS vor.
Verwenden der Bereitstellung symmetrischer Schlüssel
Wenn Sie Ihr Gerät mit IoT Hub ohne DPS verbinden möchten, führen Sie die Schritte in diesem Abschnitt aus, um ein cloud-init-Skript für die VM-Erstellungsseite Erweitert vorzubereiten, damit es die IoT Edge Runtime und die Container-Runtime von Nvidia bereitstellt.
Verwenden Sie einen vorhandenen IoT Hub, oder erstellen Sie einen neuen Hub. Führen Sie diese Schritte zum Erstellen eines IoT Hubs aus.
Führen Sie diese Schritte zum Registrieren Ihres Azure Stack Edge-Geräts in IoT Hub aus.
Rufen Sie die primäre Verbindungszeichenfolge aus IoT Hub für Ihr Gerät ab, und fügen Sie sie dann im folgenden Ort für DeviceConnectionString ein.
„cloud-init“-Skript für die symmetrische Schlüsselbereitstellung
#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
Verwenden von DPS
Führen Sie die Schritte in diesem Abschnitt aus, um Ihr Gerät mit DPS und IoT Central zu verbinden. Sie bereiten eine script.sh-Datei vor, um die IoT Edge-Runtime während der Erstellung der VM bereitzustellen.
Verwenden Sie den vorhandenen IoT Hub und DPS, oder erstellen Sie einen neuen IoT Hub.
- Führen Sie diese Schritte zum Erstellen eines IoT Hubs aus.
- Führen Sie diese Schritte aus, um den DPS zu erstellen und anschließend den IoT Hub mit dem DPS-Bereich zu verknüpfen.
Wechseln Sie zur DPS-Ressource, und erstellen Sie eine individuelle Registrierung.
- Wechseln Sie zu Device Provisioning Service>Registrierungen verwalten>Individuelle Registrierung hinzufügen.
- Stellen Sie sicher, dass die Auswahl für Symmetric Key for attestation type and IoT Edge device (Symmetrischer Schlüssel für Nachweistyp und IoT Edge-Gerät) gleich True lautet. Die Standardauswahl ist False.
- Rufen Sie die folgenden Informationen von der DPS-Ressourcenseite ab:
- Registrierungs-ID. Wir empfehlen, dass Sie dieselbe ID wie die Geräte-ID für Ihren IoT Hub verwenden.
- ID-Bereich, der im Menü „Übersicht“ verfügbar ist.
- Primärer SAS-Schlüssel aus dem Menü „Individuelle Registrierung“.
Kopieren Sie Werte aus IoT Hub (IDScope) und DPS („Registrierungs-ID“, „Symmetrischer Schlüssel“), und fügen Sie sie in die Skriptargumente ein.
„cloud-init“-Skript für IoT Hub DPS
#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
Bereitstellen der IoT Edge-Runtime
Die Bereitstellung der IoT Edge-Runtime ist Teil der VM-Erstellung, wobei das oben genannte cloud-init-Skript verwendet wird.
Hier sind die allgemeinen Schritte zum Bereitstellen der VM und der IoT Edge-Runtime:
Erwerben Sie das Ubuntu-VM-Image über den Azure Marketplace. Ausführliche Schritte finden Sie in den Anleitungen in Use Azure Marketplace image to create VM image for your Azure Stack Edge (Verwenden eines Azure Marketplace-Images zum Erstellen eines VM-Images für Ihr Azure Stack Edge-Gerät).
- Navigieren Sie im Azure-Portal zu Azure Marketplace.
- Stellen Sie eine Verbindung zur Azure Cloud Shell oder einem Client her, auf dem die Azure-Befehlszeilenschnittstelle (CLI) installiert ist. Eine ausführliche Beschreibung der Schritte finden Sie im Schnellstart für Bash in Azure Cloud Shell.
Hinweis
Durch Schließen der Shellsitzung werden alle während der Shellsitzung erstellten Variablen gelöscht. Beim erneuten Öffnen der Sitzung müssen die Variablen neu erstellt werden.
c. Führen Sie den folgenden Befehl aus, um das Abonnement festzulegen.
az account set –subscription <subscription id>
Führen Sie die Schritte in Suchen nach Azure Marketplace-Images aus, um den Azure Marketplace nach einem Ubuntu 20.04 LTS-Image zu durchsuchen.
Beispiel für ein Ubuntu 20.04 LTS-Image:
$urn = Canonical:0001-com-ubuntu-server-focal:20_04-lts:20.04.202007160
Erstellen Sie mit dem Marketplace-Image einen neuen verwalteten Datenträger. Ausführliche Schritte finden Sie unter Verwenden eines Azure Marketplace-Images zum Erstellen von VM-Images für Azure Stack Edge.
Exportieren Sie eine VHD vom verwalteten Datenträger in ein Azure Storage-Konto. Ausführliche Schritte finden Sie unter Exportieren einer VHD vom verwalteten Datenträger in Azure Storage.
Führen Sie die folgenden Schritte zum Erstellen einer Ubuntu-VM mithilfe des VM-Images aus.
Geben Sie das cloud-init-Skript auf der Registerkarte Erweitert an. Informationen zum Erstellen einer VM finden Sie unter Bereitstellen einer GPU-VM über das Azure-Portal oder Bereitstellen einer VM über das Azure-Portal.
Geben Sie die entsprechenden Geräteverbindungszeichenfolgen im cloud-init-Skript an, um eine Verbindung mit dem IoT Hub- oder DPS-Gerät herzustellen. Eine ausführliche Beschreibung der erforderlichen Schritte finden Sie unter Bereitstellen mit symmetrischen Schlüsseln bzw. Bereitstellen mit IoT Hub DPS.
Wenn Sie das cloud-init-Skript während der VM-Erstellung nicht angegeben haben, müssen Sie die IoT Edge-Runtime manuell bereitstellen, nachdem die VM erstellt wurde:
- Verbinden Sie die VM über SSH.
- Installieren Sie das Containermodul auf der VM. Eine ausführliche Beschreibung der erforderlichen Schritte finden Sie unter Erstellen und Bereitstellen eines IoT Edge-Geräts unter Linux mithilfe von symmetrischen Schlüsseln bzw. Schnellstart – Einrichten von IoT Hub DPS über das Azure-Portal.
Überprüfen der IoT Edge-Runtime
Führen Sie diese Schritte aus, um zu überprüfen, ob Ihre IoT Edge-Runtime ausgeführt wird.
Wechseln Sie im Azure-Portal zur IoT Hub-Ressource.
Wählen Sie das IoT Edge-Gerät aus.
Überprüfen Sie, ob die IoT Edge-Runtime ausgeführt wird.
Informationen zur Problembehandlung für die IoT Edge-Gerätekonfiguration finden Sie unter Behandeln von Problemen bei Ihrem IoT Edge-Gerät.
Aktualisieren der IoT Edge-Runtime
Folgen Sie zum Aktualisieren der VM den Anleitungen in Aktualisieren von IoT Edge. Informationen zur neuesten Version von Azure IoT Edge finden Sie unter Azure IoT Edge releases (Azure IoT Edge-Versionen).
Nächste Schritte
Informationen zum Bereitstellen und Ausführen eines IoT Edge Moduls auf Ihrer Ubuntu-VM finden Sie in den Schritten in Bereitstellen von IoT Edge-Modulen.
Informationen zum Bereitstellen des DeepStream-Moduls von Nvidia finden Sie unter Bereitstellen des Nvidia DeepStream-Moduls auf einer Ubuntu-VM auf Azure Stack Edge Pro mit GPU.
Informationen zum Bereitstellen von NVIDIA DIGITS finden Sie unter Aktivieren einer GPU in einem vordefinierten NVIDIA-Modul.