Partager via


Déployer IoT Edge sur une machine virtuelle Ubuntu sur Azure Stack Edge

S’APPLIQUE À :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

Cet article explique comment déployer un runtime IoT Edge sur une machine virtuelle Ubuntu s’exécutant sur votre appareil Azure Stack Edge. Pour le nouveau travail de développement, utilisez la méthode de déploiement libre-service décrite dans cet article, car elle utilise la dernière version logicielle.

Flux général

Le flux de haut niveau est le suivant :

  1. Créez ou identifiez l’instance DPS (Device Provisioning Service) Azure IoT Hub ou IoT Hub.
  2. Utilisez Azure CLI pour acquérir l’image de machine virtuelle Ubuntu 20.04 LTS.
  3. Chargez l’image Ubuntu sur la bibliothèque d’images de machine virtuelle Azure Stack Edge.
  4. Déployez l’image Ubuntu en tant que machine virtuelle en procédant comme suit :
    1. Indiquez le nom de la machine virtuelle, le nom d’utilisateur et le mot de passe. La création d’un autre disque est facultative.
    2. Définissez la configuration réseau.
    3. Fournissez un script cloud-init préparé sous l’onglet Avancé.

Prérequis

Avant de commencer, assurez-vous d’avoir :

  • Appareil Azure Stack Edge que vous avez activé. Pour des étapes détaillées, consultez Activer Azure Stack Edge Pro GPU.

  • Accédez à la dernière image de machine virtuelle Ubuntu 20.04, soit à partir de Place de marché Azure, soit d’une image personnalisée que vous apportez :

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

    Suivez les étapes de Recherche d’images de la Place de marché Azure pour acquérir l’image de machine virtuelle.

Préparer le script cloud-init

Pour déployer le runtime IoT Edge sur la machine virtuelle Ubuntu, utilisez un script cloud-init pendant le déploiement de la machine virtuelle.

Suivez la procédure décrite dans l’une des sections suivantes :

Utiliser le provisionnement de clé symétrique

Pour connecter votre appareil à IoT Hub sans DPS, suivez les étapes décrites dans cette section pour préparer un script cloud-init pour la page Avancé de création de machine virtuelle pour déployer le runtime IoT Edge et le runtime de conteneur de Nvidia.

  1. Utilisez un IoT Hub existant ou créez-en un. Utilisez ces étapes pour créer un IoT Hub.

  2. Utilisez ces étapes pour inscrire votre appareil Azure Stack Edge dans IoT Hub.

  3. Récupérez la chaîne de connexion principale d’IoT Hub pour votre appareil, puis collez-la dans l’emplacement ci-dessous pour DeviceConnectionString.

Script cloud-init pour l’approvisionnement de clés symétriques


#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

Utiliser DPS

Suivez les étapes décrites dans cette section pour connecter votre appareil à DPS et IoT Central. Vous préparerez un fichier script.sh pour déployer le runtime IoT Edge lorsque vous allez créer la machine virtuelle.

  1. Utilisez les instances IoT Hub et DPS existantes ou créez un IoT Hub.

  2. Accédez à la ressource DPS et créez une inscription individuelle. 

    1. Accédez au service Device Provisioning Service>Gérer les inscriptions>Ajouter une inscription individuelle.
    2. Vérifiez que la sélection de la clé symétrique pour le type d’attestation et l’appareil IoT Edge est True. La sélection par défaut est False.
    3. Récupérez les informations suivantes à partir de la page de ressources DPS :
      • ID d’inscription. Nous vous recommandons d’utiliser le même ID que l’ID d’appareil de votre IoT Hub.
      • Étendue d’ID disponible dans le menu Vue d’ensemble.
      • Clé SAS principale dans le menu Inscription individuelle.
  3. Copiez et collez des valeurs de IoT Hub (IDScope) et DPS (RegistrationID, Clé symétrique) dans les arguments de script.

Script cloud-init pour 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

Déployer le runtime IoT Edge

Le déploiement du runtime IoT Edge fait partie de la création de machines virtuelles, à l’aide du script cloud-init mentionné ci-dessus.

Voici les étapes générales pour déployer la machine virtuelle et le runtime IoT Edge :

  1. Acquérir l’image VM Ubuntu dans la Place de marché Azure. Pour obtenir des étapes détaillées, suivez les instructions décrites dans Utiliser une image de la Place de marché Azure pour créer une image de machine virtuelle pour votre instance Azure Stack Edge.

    1. Dans le Portail Azure, accédez à Place de marché Azure.
    2. Connectez-vous à Azure Cloud Shell ou à un client sur lequel Azure CLI est installé. Pour obtenir des étapes détaillées, consultez Démarrage rapide pour Bash dans Azure Cloud Shell.

    Remarque

    La fermeture de la session d’interpréteur de commandes supprime toutes les variables créées pendant la session. La réouverture de la session nécessite la recréation des variables.

    c. Exécutez la commande suivante pour définir l’abonnement.

    az account set –subscription <subscription id>
    
  2. Suivez les étapes de Rechercher des images de la Place de marché Azure pour rechercher une image Ubuntu 20.04 LTS dans la Place de marché Azure.

    Exemple d’image Ubuntu 20.04 LTS :

    $urn = Canonical:0001-com-ubuntu-server-focal:20_04-lts:20.04.202007160
    
  3. Créez un nouveau disque managé à partir de l’image de la Place de marché. Pour obtenir les étapes détaillées, consultez Utiliser une image de la Place de marché Azure pour créer une image VM pour votre Azure Stack Edge.

  4. Exportez un VHD du disque managé vers le compte de stockage Azure. Pour obtenir les étapes détaillées, consultez Exporter un VHD à partir du disque managé vers le Stockage Azure.

  5. Suivez ces étapes pour créer une machine virtuelle Ubuntu à l’aide de l’image de machine virtuelle.

    1. Spécifiez le script cloud-init sous l’onglet Avancé. Pour créer une machine virtuelle, consultez Déployer une machine virtuelle GPU via le Portail Azure ou Déployer une machine virtuelle via le Portail Azure.

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

    2. Spécifiez les chaînes de connexion d’appareil appropriées dans cloud-init pour vous connecter à l’appareil IoT Hub ou DPS. Pour obtenir des étapes détaillées, consultez Provisionner avec des clés symétriques ou Provisionner avec IoT Hub DPS.

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

Si vous n’avez pas spécifié le cloud-init lors de la création de la machine virtuelle, vous devez déployer manuellement le runtime IoT Edge une fois la machine virtuelle créée :

  1. Connectez-vous à la machine virtuelle via SSH.
  2. Installez le moteur de conteneur sur la machine virtuelle. Pour obtenir des étapes détaillées, consultez Créer et approvisionner un appareil IoT Edge sur Linux à l’aide de clés symétriques ou Démarrage rapide : Configurer IoT Hub DPS avec le Portail Azure.

Vérifier le runtime IoT Edge

Utilisez ces étapes pour vérifier que votre runtime IoT Edge est en cours d’exécution.

  1. Dans le portail Azure, accédez à la ressource IoT Hub.

  2. Sélectionnez l’appareil IoT Edge.

  3. Vérifiez que le runtime IoT Edge est en cours d’exécution.

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

    Pour résoudre les problèmes de configuration de votre appareil IoT Edge, consultez Résoudre les problèmes de votre appareil IoT Edge.

Mettre à jour le runtime IoT Edge

Pour mettre à jour la machine virtuelle, suivez les instructions de Mettre à jour IoT Edge. Pour rechercher la dernière version d’Azure IoT Edge, consultez Versions d’Azure IoT Edge.

Étapes suivantes

Pour déployer et exécuter un module IoT Edge sur votre machine virtuelle Ubuntu, consultez les étapes décrites dans Déployer des modules IoT Edge.

Pour déployer le module DeepStream de Nvidia, consultez Déployer le module Nvidia DeepStream sur une machine virtuelle Ubuntu sur Azure Stack Edge Pro avec GPU.

Pour déployer NVIDIA DIGITS, consultez Activer un processeur graphique dans un module NVIDIA préfabriqué.