Bereitstellen von IoT Edge auf einer Ubuntu-VM unter Azure Stack Edge

GILT FÜR:Yes for Pro GPU SKUAzure Stack Edge Pro – GPUYes for Pro 2 SKUAzure Stack Edge Pro 2Yes for Pro R SKUAzure Stack Edge Pro RYes for Mini R SKUAzure 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:

  1. Erstellen oder identifizieren Sie die IoT Hub- oder Azure IoT Hub Device Provisioning Service (DPS)-Instanz.
  2. Verwenden Sie Azure CLI, um das Ubuntu 20.04 LTS VM-Image zu erwerben.
  3. Laden Sie das Ubuntu-Image in die Azure Stack Edge-VM-Imagebibliothek hoch.
  4. Stellen Sie das Ubuntu-Image als VM mithilfe der folgenden Schritte bereit:
    1. Geben Sie den Namen der VM, den Benutzernamen und das Kennwort an. Das Erstellen eines weiteren Datenträgers ist optional.
    2. Richten Sie die Netzwerkkonfiguration ein.
    3. 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:

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.

  1. Verwenden Sie einen vorhandenen IoT Hub, oder erstellen Sie einen neuen Hub. Führen Sie diese Schritte zum Erstellen eines IoT Hubs aus.

  2. Führen Sie diese Schritte zum Registrieren Ihres Azure Stack Edge-Geräts in IoT Hub aus.

  3. 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.

  1. Verwenden Sie den vorhandenen IoT Hub und DPS, oder erstellen Sie einen neuen IoT Hub.

  2. Wechseln Sie zur DPS-Ressource, und erstellen Sie eine individuelle Registrierung. 

    1. Wechseln Sie zu Device Provisioning Service>Registrierungen verwalten>Individuelle Registrierung hinzufügen.
    2. 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.
    3. 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“.
  3. 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:

  1. 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).

    1. Navigieren Sie im Azure-Portal zu Azure Marketplace.
    2. 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>
    
  2. 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
    
  3. 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.

  4. 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.

  5. Führen Sie die folgenden Schritte zum Erstellen einer Ubuntu-VM mithilfe des VM-Images aus.

    1. 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.

      Screenshot of the Advanced tab of VM configuration in the Azure portal.

    2. 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.

      Screenshot of the Custom data field of VM configuration in the Azure portal.

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:

  1. Verbinden Sie die VM über SSH.
  2. 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.

  1. Wechseln Sie im Azure-Portal zur IoT Hub-Ressource.

  2. Wählen Sie das IoT Edge-Gerät aus.

  3. Überprüfen Sie, ob die IoT Edge-Runtime ausgeführt wird.

    Screenshot of the IoT Edge runtime status in the Azure portal.

    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.