Compartir a través de


Configuración de opciones de creación de contenedores para módulos de IoT Edge

Se aplica a:IoT Edge 1.5 checkmark IoT Edge 1.5

Importante

IoT Edge 1.5 LTS es la versión compatible. IoT Edge 1.4 LTS alcanzó el final del ciclo de vida el 12 de noviembre de 2024. Si usa una versión anterior, consulte Update IoT Edge.

Use el createOptions parámetro en el manifiesto de implementación para configurar los contenedores de módulos en tiempo de ejecución. Con este parámetro, puede restringir el acceso del módulo a los recursos del dispositivo host o configurar las redes.

Los módulos de IoT Edge se ejecutan como contenedores compatibles con Docker en el dispositivo IoT Edge. Docker ofrece muchas opciones para crear contenedores y esas opciones también se aplican a IoT Edge módulos. Para más información, consulte Opciones de creación de un contenedor de Docker.

Formato de las opciones de creación

El manifiesto de implementación de IoT Edge acepta opciones de creación con formato JSON. Por ejemplo, tome las opciones de creación que se incluyen automáticamente para todos los módulos de edgeHub:

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

En este ejemplo de edgeHub se usa el HostConfig.PortBindings parámetro para asignar puertos expuestos en el contenedor a un puerto del dispositivo host.

Si usa la extensión Azure IoT Edge para Visual Studio o Visual Studio Code, escriba las opciones de creación en formato JSON en el archivo deployment.template.json. A continuación, cuando se usa la extensión para compilar la solución de IoT Edge o generar el manifiesto de implementación, se encadena el JSON en el formato que espera el entorno de ejecución de IoT Edge. Por ejemplo:

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

Importante

La extensión Azure IoT Edge Visual Studio Code está en modo maintenance. La herramienta iotedgedev es la herramienta recomendada para desarrollar módulos de IoT Edge.

Use el docker inspect comando para escribir opciones de creación. Ejecute el módulo localmente mediante docker run <container name> como parte del proceso de desarrollo. Una vez que tenga el módulo trabajando de la manera que desee, ejecute docker inspect <container name>. Este comando genera los detalles del módulo en formato JSON. Busque los parámetros que configuró y copie el json. Por ejemplo:

Captura de pantalla de los resultados del comando edgeHub de inspección de Docker.

Escenarios frecuentes

Las opciones de creación de contenedores admiten varios escenarios. Estos son los más comunes para crear soluciones de IoT Edge:

Asignación del puerto del host al puerto del módulo

Si el módulo necesita comunicarse con un servicio fuera de la solución de IoT Edge y no usa el enrutamiento de mensajes para hacerlo, asigne un puerto host a un puerto de módulo.

Sugerencia

La asignación de puertos no es necesaria para la comunicación de módulo a módulo en el mismo dispositivo. Si el módulo A necesita consultar una API hospedada en el módulo B, puede hacerlo sin ninguna asignación de puertos. El módulo B debe exponer un puerto en su dockerfile. Por ejemplo, expone EXPOSE 8080. A continuación, el módulo A puede consultar la API mediante el nombre del módulo B; por ejemplo, http://ModuleB:8080/api.

En primer lugar, asegúrese de que un puerto dentro del módulo se expone para escuchar las conexiones. Puede hacerlo mediante una instrucción EXPOSE en el dockerfile; por ejemplo, EXPOSE 8080. La instrucción expose tiene como valor predeterminado el protocolo TCP si no especifica un protocolo o puede especificar UDP.

A continuación, use la PortBindings configuración en el HostConfig grupo de opciones de creación del contenedor de Docker para asignar el puerto expuesto en el módulo a un puerto del dispositivo host. Por ejemplo, si expone el puerto 8080 dentro del módulo y desea asignar ese puerto al puerto 80 en el dispositivo host, las opciones de creación en el archivo template.json tendría un aspecto similar al ejemplo siguiente:

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

Cuando se convierte en cadena para el manifiesto de implementación, la configuración tiene el siguiente aspecto:

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

Restricción del uso de CPU y memoria del módulo

Declare la cantidad de recursos de host que puede usar un módulo. Este control garantiza que un módulo no consume demasiada memoria o CPU, lo que impide que otros procesos se ejecuten en el dispositivo. Puede administrar esta configuración mediante las opciones de creación del contenedor de Docker en el HostConfig grupo, entre las que se incluyen:

  • Memoria: límite de memoria en bytes. Por ejemplo, 268435456 bytes = 256 MB.
  • MemorySwap: límite de memoria total (memoria + intercambio). Por ejemplo, 536870912 bytes = 512 MB.
  • NanoCpus: cuota de CPU en unidades de CPU de 10 a -9 (1 mil millones). Por ejemplo, 250000000 nanocpuus = 0,25 CPU.

En el formato template.json , estos valores tienen un aspecto similar al del ejemplo siguiente:

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

Una vez que se haya marcado una cadena para el manifiesto de implementación final, estos valores tienen un aspecto similar al ejemplo siguiente:

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

Optimización de GPU en un módulo de IoT Edge

Si ejecuta el módulo IoT Edge en una máquina virtual optimizada para GPU, también puede habilitar un módulo de IoT Edge para conectarse a la GPU. Para realizar esta conexión mediante un módulo existente, agregue algunas especificaciones a createOptions:

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

Confirme esta configuración mediante el comando docker inspect para ver la nueva configuración en una impresión JSON:

sudo docker inspect <YOUR-MODULE-NAME>

Para obtener más información sobre cómo el dispositivo y la máquina virtual se conectan a una GPU, consulte Configurar, conectar y verificar un módulo de IoT Edge para una GPU.

Pasos siguientes

Para obtener más ejemplos de opciones de creación en acción, consulte estos ejemplos de IoT Edge: