Partager via


Guide pratique pour configurer des 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 a atteint la fin de vie le 12 novembre 2024. Si vous utilisez une version antérieure, consultez Update IoT Edge.

Utilisez le createOptions paramètre dans le manifeste de déploiement pour configurer les conteneurs de module au moment de l’exécution. À l’aide de ce paramètre, vous pouvez restreindre l’accès du module aux ressources de l’appareil hôte ou configurer la mise en réseau.

IoT Edge modules 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 HostConfig.PortBindings paramètre 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 recommandé pour le développement de modules IoT Edge.

Utilisez la docker inspect commande pour écrire des options de création. Exécutez le module localement à l'aide de docker run <container name> dans le cadre de votre processus de développement. 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 n'utilise pas le routage des messages pour le faire, mappez 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, il expose 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 le faire à l’aide d’une instruction EXPOSE dans le fichier dockerfile ; par exemple, EXPOSE 8080. L’instruction d’exposition est définie par défaut sur le protocole TCP si vous ne spécifiez pas de protocole, ou si vous pouvez spécifier UDP.

Ensuite, utilisez le PortBindings paramètre dans le groupe HostConfig des options de création de conteneur Docker pour mapper le port exposé dans le module à un port sur le dispositif hôte. Par exemple, si vous avez exposé le port 8080 à l’intérieur du module et que vous souhaitez mapper ce port au port 80 sur l’appareil hôte, les options de création dans le fichier template.json ressemblent à 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 à l’aide des options de création de conteneur Docker dans le HostConfig groupe, 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 format template.json , ces valeurs ressemblent à l’exemple suivant :

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

Une fois converties en chaînes pour le manifeste de déploiement final, ces valeurs ressemblent à ce qui suit :

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

Optimiser un module IoT Edge pour GPU

Si vous exécutez votre module IoT Edge sur une machine virtuelle optimisée par GPU, vous pouvez également activer un module IoT Edge pour vous connecter à votre GPU. Pour effectuer cette connexion à l’aide d’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 Configure, connectez-vous et vérifiez un module IoT Edge pour un GPU.

Étapes suivantes

Pour plus d’exemples d’options de création en action, consultez ces exemples IoT Edge :