Partager via


Guide pratique pour configurer les options de création de conteneur pour les modules IoT Edge

S’applique à :Coche IoT Edge 1.5 IoT Edge 1.5

Important

IoT Edge 1.5 LTS est la version prise en charge. IoT Edge 1.4 LTS est en fin de vie depuis le 12 novembre 2024. Si vous utilisez une version antérieure, consultez l’article Mettre à jour IoT Edge.

Le paramètre createOptions dans le manifeste de déploiement vous permet de configurer les conteneurs de module au moment de l’exécution. Ce paramètre étend votre contrôle sur les modules et vous permet d’effectuer des tâches telles que la restriction de l’accès du module aux ressources de l’appareil hôte ou la configuration de la mise en réseau.

Les modules IoT Edge s’exécutent en tant que conteneurs compatibles Docker sur votre appareil IoT Edge. Docker offre de nombreuses options pour créer des conteneurs, et ces options s’appliquent également aux modules IoT Edge. Pour plus d’informations, consultez les options de création de conteneur Docker.

Format des options de création

Le manifeste de déploiement IoT Edge accepte les options de création au format JSON. Par exemple, prenez les options de création qui sont automatiquement incluses pour chaque module edgeHub :

"createOptions": {
  "HostConfig": {
    "PortBindings": {
      "5671/tcp": [
        {
          "HostPort": "5671"
        }
      ],
      "8883/tcp": [
        {
          "HostPort": "8883"
        }
      ],
      "443/tcp": [
        {
          "HostPort": "443"
        }
      ]
    }
  }
}

Cet exemple edgeHub utilise le paramètre HostConfig.PortBindings pour mapper les ports exposés sur le conteneur à un port sur l’appareil hôte.

Si vous utilisez l’extension Azure IoT Edge pour Visual Studio ou Visual Studio Code, écrivez les options de création au format JSON dans le fichier deployment.template.json . Ensuite, lorsque vous utilisez l’extension pour générer la solution IoT Edge ou générer le manifeste de déploiement, il chaîne le JSON au format attendu par le runtime IoT Edge. Par exemple :

"createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"

Important

L’extension Azure IoT Edge Visual Studio Code est en mode maintenance. L’outil iotedgedev est l’outil conseillé pour développer des modules IoT Edge.

Utilisez la docker inspect commande pour écrire des options de création. Exécutez le module localement dans le cadre de votre processus de développement en utilisant docker run <container name>. Une fois que le module fonctionne comme vous le souhaitez, exécutez docker inspect <container name>. Cette commande génère les détails du module au format JSON. Recherchez les paramètres que vous avez configurés et copiez le json. Par exemple :

Capture d’écran des résultats de la commande « docker inspect edgeHub ».

Scénarios courants

Les options de création de conteneur prennent en charge différents scénarios. Voici les plus courantes pour créer des solutions IoT Edge :

Mapper un port hôte à un port de module

Si votre module doit communiquer avec un service en dehors de la solution IoT Edge et qu’il n’utilise pas pour cela le routage des messages, vous devez mapper un port hôte à un port de module.

Conseil

Le mappage de port n’est pas nécessaire pour la communication de module à module sur le même appareil. Si le module A doit interroger une API hébergée sur le module B, il peut le faire sans aucun mappage de ports. Le module B doit exposer un port dans son fichier dockerfile. Par exemple : EXPOSE 8080. Ensuite, le module A peut interroger l’API à l’aide du nom du module B. Par exemple : http://ModuleB:8080/api.

Tout d’abord, vérifiez qu’un port à l’intérieur du module est exposé pour écouter les connexions. Vous pouvez pour cela utiliser une instruction EXPOSE dans le fichier dockerfile. Par exemple : EXPOSE 8080. L’instruction EXPOSE utilise par défaut le protocole TCP s’il n’est pas spécifié, ou vous pouvez spécifier UDP.

Ensuite, utilisez le paramètre PortBindings dans le groupe HostConfig des options de création de conteneur Docker pour mapper le port exposé dans le module à un port sur l’appareil hôte. Par exemple, si vous avez exposé le port 8080 dans le module et que vous souhaitez le mapper au port 80 de l’appareil hôte, les options de création dans le fichier template.json se présenteront comme dans l’exemple suivant :

"createOptions": {
  "HostConfig": {
    "PortBindings": {
      "8080/tcp": [
        {
          "HostPort": "80"
        }
      ]
    }
  }
}

Lorsqu’elle est convertie en chaîne pour le manifeste de déploiement, la configuration ressemble à ceci :

"createOptions": "{\"HostConfig\":{\"PortBindings\":{\"8080/tcp\":[{\"HostPort\":\"80\"}]}}}"

Restreindre l’utilisation de la mémoire et du processeur du module

Déclarez la quantité de ressources hôtes qu’un module peut utiliser. Ce contrôle garantit qu’un module ne consomme pas trop de mémoire ou d’UC, ce qui empêche les autres processus de s’exécuter sur l’appareil. Vous pouvez gérer ces paramètres avec les options de création de conteneur Docker dans le groupe HostConfig, notamment :

  • Mémoire : limite de mémoire en octets. Par exemple, 268435456 octets = 256 Mo.
  • MemorySwap : limite totale de mémoire (mémoire + échange). Par exemple, 536870912 octets = 512 Mo.
  • NanoCpus : quota de processeurs en unités de 10 -9 (1 milliardième) processeurs. Par exemple, 250000000 nanocpus = 0,25 PROCESSEUR.

Dans le fichier template.json, ces valeurs ressembleraient à l’exemple suivant :

"createOptions": {
  "HostConfig": {
    "Memory": 268435456,
    "MemorySwap": 536870912,
    "NanoCpus": 250000000
  }
}

Une fois stringifiées pour le manifeste de déploiement final, ces valeurs se présenteraient comme dans l’exemple suivant :

"createOptions":"{\"HostConfig\":{\"Memory\":268435456,\"MemorySwap\":536870912,\"CpuPeriod\":25000}}"

Optimiser en GPU un module IoT Edge

Si vous exécutez votre module IoT Edge sur une machine virtuelle optimisée en GPU, vous pouvez également activer un module IoT Edge pour vous connecter à votre GPU. Pour ce faire avec un module existant, ajoutez certaines spécifications à votre createOptions :

{"HostConfig": {"DeviceRequests": [{"Count": -1,"Capabilities": [["gpu"]]}]}}

Vérifiez ces paramètres à l’aide de la commande Docker inspect pour afficher le nouveau paramètre dans une impression JSON.

sudo docker inspect <YOUR-MODULE-NAME>

Pour en savoir plus sur la façon dont votre appareil et votre machine virtuelle se connectent à un GPU, consultez Configurer, connecter et vérifier un module IoT Edge pour un GPU.

Étapes suivantes

Pour obtenir d’autres exemples d’options de création en action, consultez les exemples IoT Edge suivants :