Opties voor het maken van containers configureren voor IoT Edge-modules

Van toepassing op:IoT Edge 1.5-vinkje IoT Edge 1.5 Vinkje voor IoT Edge 1.4 IoT Edge 1.4

Belangrijk

IoT Edge 1.5 LTS en IoT Edge 1.4 LTS worden ondersteund releases. IoT Edge 1.4 LTS eindigt op 12 november 2024. Raadpleeg IoT Edge bijwerken als u een eerdere versie hebt.

Met de parameter createOptions in het implementatiemanifest kunt u de modulecontainers tijdens runtime configureren. Met deze parameter breidt u de controle over de modules uit en kunt u taken uitvoeren, zoals het toestaan of beperken van de toegang van de module tot de resources van het hostapparaat of het configureren van netwerken.

IoT Edge-modules worden geïmplementeerd als Docker-compatibele containers op uw IoT Edge-apparaat. Docker biedt veel opties voor het maken van containers en deze opties zijn ook van toepassing op IoT Edge-modules. Zie Opties voor het maken van Docker-containers voor meer informatie.

Opties voor maken opmaken

Het IoT Edge-implementatiemanifest accepteert het maken van opties die zijn opgemaakt als JSON. Neem bijvoorbeeld de opties voor maken die automatisch worden opgenomen voor elke EdgeHub-module:

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

In dit edgeHub-voorbeeld wordt de parameter HostConfig.PortBindings gebruikt om weergegeven poorten in de container toe te wijzen aan een poort op het hostapparaat.

Als u de Azure IoT Edge-extensie voor Visual Studio of Visual Studio Code gebruikt, kunt u de opties voor maken in JSON-indeling schrijven in het deployment.template.json-bestand . Wanneer u vervolgens de extensie gebruikt om de IoT Edge-oplossing te bouwen of het implementatiemanifest te genereren, wordt de JSON voor u opgemaakt in de indeling die de IoT Edge-runtime verwacht. Voorbeeld:

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

Belangrijk

De Azure IoT Edge Visual Studio Code-extensie bevindt zich in de onderhoudsmodus. Het iotedgedev-hulpprogramma is het aanbevolen hulpprogramma voor het ontwikkelen van IoT Edge-modules.

Een tip voor het schrijven van opties voor maken is het gebruik van de docker inspect opdracht. Als onderdeel van uw ontwikkelingsproces voert u de module lokaal uit met behulp van docker run <container name>. Zodra u de module op de gewenste manier hebt uitgevoerd, voert u deze uit docker inspect <container name>. Met deze opdracht worden de moduledetails uitgevoerd in JSON-indeling. Zoek de parameters die u hebt geconfigureerd en kopieer de JSON. Voorbeeld:

Schermopname van de resultaten van de opdracht docker inspect edgeHub.

Algemene scenario's

Bij het maken van containers zijn veel scenario's mogelijk, maar hier volgen enkele die het vaakst worden weergegeven bij het bouwen van IoT Edge-oplossingen:

Hostpoort toewijzen aan modulepoort

Als uw module moet communiceren met een service buiten de IoT Edge-oplossing en geen berichtroutering gebruikt, moet u een hostpoort toewijzen aan een modulepoort.

Tip

Deze poorttoewijzing is niet vereist voor module-naar-module-communicatie op hetzelfde apparaat. Als module A een query moet uitvoeren op een API die wordt gehost op module B, kan dit zonder poorttoewijzing. Module B moet een poort beschikbaar maken in het dockerfile, bijvoorbeeld: EXPOSE 8080. Module A kan vervolgens een query uitvoeren op de API met de naam van module B, bijvoorbeeld: http://ModuleB:8080/api.

Zorg er eerst voor dat een poort in de module beschikbaar is om te luisteren naar verbindingen. U kunt dit doen met behulp van een EXPOSE-instructie in het dockerfile. Bijvoorbeeld: EXPOSE 8080. De standaardinstellingen voor het beschikbaar maken van instructies voor TCP-protocol als deze niet zijn opgegeven, of u kunt UDP opgeven.

Gebruik vervolgens de portBindings-instelling in de HostConfig-groep van de Docker-container om de weergegeven poort in de module toe te wijzen aan een poort op het hostapparaat. Als u bijvoorbeeld poort 8080 in de module beschikbaar hebt gemaakt en dat wilt toewijzen aan poort 80 van het hostapparaat, zien de opties in het template.json-bestand eruit als in het volgende voorbeeld:

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

Zodra de tekenreeks is gedefinieerd voor het implementatiemanifest, ziet dezelfde configuratie eruit als in het volgende voorbeeld:

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

Geheugen en CPU-gebruik van modules beperken

U kunt declareren hoeveel van de hostresources een module kan gebruiken. Deze controle is nuttig om ervoor te zorgen dat één module niet te veel geheugen of CPU-gebruik kan verbruiken en voorkomen dat andere processen op het apparaat worden uitgevoerd. U kunt deze instellingen beheren met opties voor het maken van Docker-containers in de HostConfig-groep , waaronder:

  • Geheugen: geheugenlimiet in bytes. Bijvoorbeeld 268435456 bytes = 256 MB.
  • MemorySwap: Totale geheugenlimiet (geheugen + wisselen). Bijvoorbeeld 536870912 bytes = 512 MB.
  • NanoCpus: CPU-quotum in eenheden van 10-9 (1 miljardste) CPU's. Bijvoorbeeld 250000000 nanocpus = 0,25 CPU.

In de template.json-indeling zien deze waarden eruit als in het volgende voorbeeld:

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

Zodra de tekenreeks is gedefinieerd voor het uiteindelijke implementatiemanifest, zien deze waarden eruit als in het volgende voorbeeld:

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

Een IoT Edge-module optimaliseren met GPU

Als u uw IoT Edge-module uitvoert op een voor GPU geoptimaliseerde virtuele machine, kunt u ook een IoT Edge-module inschakelen om verbinding te maken met uw GPU. Als u dit wilt doen met een bestaande module, voegt u enkele specificaties toe aan uw createOptions:

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

Als u wilt controleren of deze instellingen zijn toegevoegd, gebruikt u de opdracht Docker inspect om de nieuwe instelling in een JSON-afdruk te zien.

sudo docker inspect <YOUR-MODULE-NAME>

Zie Een IoT Edge-module configureren, verbinden en verifiëren voor een GPU voor meer informatie over hoe uw apparaat en virtuele machine verbinding maken met een GPU.

Volgende stappen

Zie de volgende IoT Edge-voorbeelden voor meer voorbeelden van het maken van opties in actie: