Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a: IoT Edge 1.5
Importante
IoT Edge 1.5 LTS es la versión compatible. IoT Edge 1.4 LTS finaliza su ciclo de vida el 12 de noviembre de 2024. Si está usando una versión anterior, consulte Actualización de IoT Edge.
El parámetro createOptions del manifiesto de implementación le permite configurar los contenedores de módulos en tiempo de ejecución. Este parámetro expande el control sobre los módulos y le permite realizar tareas como 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 los módulos de IoT Edge. 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 las 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 parámetro HostConfig.PortBindings para asignar los puertos expuestos en el contenedor a un puerto en el dispositivo host.
Si usa la extensión de 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, al usar la extensión para compilar la solución de IoT Edge o generar el manifiesto de implementación, 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 de Visual Studio Code de Azure IoT Edge está en modo de mantenimiento. 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 el módulo funcione de la manera que desea, 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:
Escenarios comunes
Las opciones de creación de contenedores admiten varios escenarios. Para desarrollar soluciones de IoT Edge, estos son los más comunes:
- Concesión a los módulos de acceso al almacenamiento de host
- Asignación del puerto del host al puerto del módulo
- Restricción del uso de CPU y memoria del módulo
- Optimización de GPU en un módulo 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 IoT Edge y no usa el enrutamiento de mensajes para hacerlo, deberá asignar un puerto del host a un puerto del 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, 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 archivo dockerfile. Por ejemplo, EXPOSE 8080
. La instrucción EXPOSE tiene como valor predeterminado el protocolo TCP si no se especifica o bien se puede especificar UDP.
A continuación, use el valor PortBindings del grupo HostConfig de las opciones de creación de un contenedor de Docker para asignar el puerto expuesto en el módulo a un puerto del dispositivo host. Por ejemplo, si expuso el puerto 8080 dentro del módulo y desea asignarlo al puerto 80 del dispositivo host, las opciones de creación del archivo template.json serían como en el 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 con las opciones de creación de contenedores de Docker del grupo HostConfig, incluidas:
- 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 del archivo template.json, estos valores se verían como en el ejemplo siguiente:
"createOptions": {
"HostConfig": {
"Memory": 268435456,
"MemorySwap": 536870912,
"NanoCpus": 250000000
}
}
Una vez convertido en cadena para el manifiesto de implementación final, estos valores serían similares a los del ejemplo siguiente:
"createOptions":"{\"HostConfig\":{\"Memory\":268435456,\"MemorySwap\":536870912,\"CpuPeriod\":25000}}"
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 ello con 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 Configuración, conexión y comprobación de 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: