Share via


IoT Edge implementeren op een Ubuntu-VM in Azure Stack Edge

VAN TOEPASSING OP: Ja voor Pro GPU-SKUAzure Stack Edge Pro - GPUJa voor Pro 2 SKUAzure Stack Edge Pro 2Ja voor Pro R SKUAzure Stack Edge Pro RJa voor Mini R SKUAzure Stack Edge Mini R

In dit artikel wordt beschreven hoe u een IoT Edge-runtime implementeert op een Ubuntu-VM die wordt uitgevoerd op uw Azure Stack Edge-apparaat. Gebruik voor nieuwe ontwikkelwerkzaamheden de zelfbedieningsimplementatiemethode die in dit artikel wordt beschreven, omdat deze gebruikmaakt van de nieuwste softwareversie.

Stroom op hoog niveau

De stroom op hoog niveau is als volgt:

  1. Maak of identificeer het DPS-exemplaar (IoT Hub of Azure IoT Hub Device Provisioning Service).
  2. Gebruik Azure CLI om de VM-installatiekopie van Ubuntu 20.04 LTS te verkrijgen.
  3. Upload de Ubuntu-installatiekopie naar de azure Stack Edge VM-installatiekopiebibliotheek.
  4. Implementeer de Ubuntu-installatiekopie als een VM met behulp van de volgende stappen:
    1. Geef de naam op van de virtuele machine, de gebruikersnaam en het wachtwoord. Het maken van een andere schijf is optioneel.
    2. Stel de netwerkconfiguratie in.
    3. Geef een voorbereid cloud-init-script op op het tabblad Geavanceerd .

Vereisten

Zorg ervoor dat u voordat u begint de volgende zaken paraat hebt:

  • Een Azure Stack Edge-apparaat dat u hebt geactiveerd. Zie Azure Stack Edge Pro GPU activeren voor gedetailleerde stappen.

  • Toegang tot de nieuwste VM-installatiekopie van Ubuntu 20.04, de installatiekopie van Azure Marketplace of een aangepaste installatiekopie die u meebrengt:

    $urn = Canonical:0001-com-ubuntu-server-focal:20_04-lts:20.04.202007160

    Gebruik de stappen in Search for Azure Marketplace-installatiekopieën om de VM-installatiekopieën te verkrijgen.

Het cloud-init-script voorbereiden

Als u de IoT Edge-runtime wilt implementeren op de Ubuntu-VM, gebruikt u een cloud-init-script tijdens de IMPLEMENTATIE van de VM.

Gebruik de stappen in een van de volgende secties:

Symmetrische sleutelinrichting gebruiken

Als u uw apparaat wilt verbinden met IoT Hub zonder DPS, gebruikt u de stappen in deze sectie om een cloud-init-script voor te bereiden op de pagina Geavanceerd voor het maken van de VIRTUELE machine om de IoT Edge-runtime en de containerruntime van Nvidia te implementeren.

  1. Gebruik een bestaande IoT Hub of maak een nieuwe hub. Gebruik deze stappen om een IoT Hub te maken.

  2. Gebruik deze stappen om uw Azure Stack Edge-apparaat te registreren in IoT Hub.

  3. Haal de primaire verbindingsreeks op uit IoT Hub voor uw apparaat en plak deze in de onderstaande locatie voor DeviceConnectionString.

Cloud-init-script voor het inrichten van symmetrische sleutels


#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 gebruiken

Gebruik de stappen in deze sectie om uw apparaat te verbinden met DPS en IoT Central. U bereidt een script.sh bestand voor om de IoT Edge-runtime te implementeren tijdens het maken van de virtuele machine.

  1. Gebruik de bestaande IoT Hub en DPS of maak een nieuwe IoT Hub.

  2. Ga naar de DPS-resource en maak een afzonderlijke inschrijving. 

    1. Ga naar Device Provisioning Service>Manage enrollments>Add individual enrollment.
    2. Zorg ervoor dat de selectie voor symmetrische sleutel voor het attestation-type en het IoT Edge-apparaat waar is. De standaardselectie is Onwaar.
    3. Haal de volgende informatie op van de DPS-resourcepagina:
      • Registratie-id. U wordt aangeraden dezelfde id te gebruiken als de apparaat-id voor uw IoT Hub.
      • Id-bereik dat beschikbaar is in het menu Overzicht.
      • Primaire SAS-sleutel in het menu Afzonderlijke inschrijving.
  3. Kopieer en plak waarden uit IoT Hub (IDScope) en DPS (RegistrationID, Symmetric Key) in de scriptargumenten.

Cloud-init-script voor 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

IoT Edge-runtime implementeren

Het implementeren van de IoT Edge-runtime maakt deel uit van het maken van een virtuele machine met behulp van het cloud-init-script dat hierboven wordt genoemd.

Hier volgen de stappen op hoog niveau voor het implementeren van de VM en IoT Edge-runtime:

  1. Haal de ubuntu-VM-installatiekopie op uit Azure Marketplace. Volg de instructies in Azure Marketplace-installatiekopieën gebruiken om een VM-installatiekopieën voor uw Azure Stack Edge te maken voor gedetailleerde stappen.

    1. Ga in Azure Portal naar Azure Marketplace.
    2. Maak verbinding met Azure Cloud Shell of een client waarop Azure CLI is geïnstalleerd. Zie quickstart voor Bash in Azure Cloud Shell voor gedetailleerde stappen.

    Notitie

    Als u de shellsessie sluit, worden alle variabelen verwijderd die tijdens de shell-sessie zijn gemaakt. Als u de sessie opnieuw opent, moet u de variabelen opnieuw maken.

    c. Voer de volgende opdracht uit om het abonnement in te stellen.

    az account set –subscription <subscription id>
    
  2. Gebruik de stappen in Search for Azure Marketplace-installatiekopieën om in Azure Marketplace te zoeken naar een Ubuntu 20.04 LTS-installatiekopie.

    Voorbeeld van een Ubuntu 20.04 LTS-installatiekopie:

    $urn = Canonical:0001-com-ubuntu-server-focal:20_04-lts:20.04.202007160
    
  3. Maak een nieuwe beheerde schijf op basis van de Marketplace-installatiekopieën. Zie Azure Marketplace-installatiekopieën gebruiken om een VM-installatiekopieën te maken voor uw Azure Stack Edge voor gedetailleerde stappen.

  4. Exporteer een VHD van de beheerde schijf naar een Azure Storage-account. Zie Een VHD exporteren van de beheerde schijf naar Azure Storage voor gedetailleerde stappen.

  5. Volg deze stappen om een Ubuntu-VM te maken met behulp van de VM-installatiekopie.

    1. Geef het cloud-init-script op op het tabblad Geavanceerd . Zie GPU-VM implementeren via Azure Portal of VM implementeren via Azure Portal om een VIRTUELE machine te maken.

      Schermopname van het tabblad Geavanceerd van vm-configuratie in Azure Portal.

    2. Geef het juiste apparaat op verbindingsreeks s in de cloud-init om verbinding te maken met het IoT Hub- of DPS-apparaat. Zie Inrichten met symmetrische sleutels of Inrichten met IoT Hub DPS voor gedetailleerde stappen.

      Schermopname van het veld Aangepaste gegevens van vm-configuratie in Azure Portal.

Als u de cloud-init niet hebt opgegeven tijdens het maken van de VM, moet u de IoT Edge-runtime handmatig implementeren nadat de VIRTUELE machine is gemaakt:

  1. Maak verbinding met de virtuele machine via SSH.
  2. Installeer de containerengine op de VIRTUELE machine. Zie Een IoT Edge-apparaat in Linux maken en inrichten met behulp van symmetrische sleutels of quickstart: IoT Hub DPS instellen met Azure Portal voor gedetailleerde stappen.

De IoT Edge-runtime controleren

Gebruik deze stappen om te controleren of uw IoT Edge-runtime wordt uitgevoerd.

  1. Ga naar de IoT Hub-resource in Azure Portal.

  2. Selecteer het IoT Edge-apparaat.

  3. Controleer of de IoT Edge-runtime wordt uitgevoerd.

    Schermopname van de runtimestatus van IoT Edge in Azure Portal.

    Zie Problemen met uw IoT Edge-apparaat oplossen om problemen met de configuratie van uw IoT Edge-apparaat op te lossen.

De IoT Edge-runtime bijwerken

Volg de instructies in IoT Edge bijwerken om de VM bij te werken. Zie Azure IoT Edge-releases om de nieuwste versie van Azure IoT Edge te vinden.

Volgende stappen

Als u een IoT Edge-module op uw Ubuntu-VM wilt implementeren en uitvoeren, raadpleegt u de stappen in IoT Edge-modules implementeren.

Zie De Nvidia DeepStream-module implementeren op Ubuntu VM op Azure Stack Edge Pro met GPU om de DeepStream-module van Nvidia te implementeren.

Zie Een GPU inschakelen in een vooraf geprefabriceerde NVIDIA-module om NVIDIA DIGITS te implementeren.