Sdílet prostřednictvím


Konfigurace možností vytvoření kontejneru pro moduly IoT Edge

Platí pro:IoT Edge 1.5 - zaškrtnuto IoT Edge 1.5

Důležité

Podporovanou verzí je IoT Edge 1.5 LTS. IoT Edge 1.4 LTS je konec životnosti od 12. listopadu 2024. Pokud používáte starší verzi, podívejte se na článek Aktualizace IoT Edge.

Parametr createOptions v manifestu nasazení umožňuje konfigurovat kontejnery modulů za běhu. Tento parametr rozšiřuje kontrolu nad moduly a umožňuje provádět úlohy, jako je omezení přístupu modulu k prostředkům hostitelského zařízení nebo konfigurace sítě.

Moduly IoT Edge běží na zařízení IoT Edge jako kontejnery kompatibilní s Dockerem. Docker nabízí mnoho možností pro vytváření kontejnerů a tyto možnosti platí také pro moduly IoT Edge. Další informace najdete v tématu Možnosti vytvoření kontejneru Dockeru.

Možnosti vytvoření formátu

Manifest nasazení IoT Edge přijímá možnosti vytvoření formátované jako JSON. Vezměte například možnosti vytvoření, které se automaticky zahrnou pro každý modul EdgeHub:

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

Tento příklad edgeHubu používá parametr HostConfig.PortBindings k mapování vystavených portů v kontejneru na port na hostitelském zařízení.

Pokud použijete rozšíření Azure IoT Edge pro Visual Studio nebo Visual Studio Code, napište do souborudeployment.template.json možnosti vytvoření ve formátu JSON. Když pak pomocí rozšíření sestavíte řešení IoT Edge nebo vygenerujete manifest nasazení, převede JSON na řetězcový formát, který očekává modul runtime IoT Edge. Příklad:

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

Důležité

Rozšíření Visual Studio Code pro Azure IoT Edge je v režimu údržby. Nástroj iotedgedev je doporučeným nástrojem pro vývoj modulů IoT Edge.

K zápisu možností vytváření použijte příkaz docker inspect. Spusťte modul lokálně pomocí docker run <container name> jako součást svého vývojového procesu. Jakmile modul pracuje tak, jak ho chcete, spusťte docker inspect <container name>. Tento příkaz vypíše podrobnosti o modulu ve formátu JSON. Vyhledejte parametry, které jste nakonfigurovali, a zkopírujte JSON. Příklad:

Snímek obrazovky s výsledky příkazu docker inspect edgeHub

Obvyklé scénáře

Možnosti vytváření kontejnerů podporují různé scénáře. Zde jsou nejběžnější pro vytváření řešení IoT Edge:

Mapování portu hostitele na port modulu

Pokud váš modul potřebuje komunikovat se službou mimo řešení IoT Edge a nepoužívá k tomu směrování zpráv, musíte namapovat port hostitele na port modulu.

Návod

Mapování portů se nevyžaduje pro komunikaci mezi moduly na stejném zařízení. Pokud modul A potřebuje dotazovat rozhraní API hostované v modulu B, může to udělat bez mapování portů. Modul B musí vystavit port ve souboru dockerfile. Například EXPOSE 8080. Potom se modul A může dotazovat rozhraní API pomocí názvu modulu B. Například http://ModuleB:8080/api.

Nejprve se ujistěte, že je port uvnitř modulu přístupný pro naslouchání připojení. Můžete to provést pomocí instrukce EXPOSE v souboru dockerfile. Například EXPOSE 8080. Pokud není zadán protokol TCP, zobrazí se výchozí nastavení instruktážní instrukce nebo můžete zadat UDP.

Pak pomocí nastavení PortBindings ve skupině HostConfig kontejneru Dockeru vytvořte možnosti pro mapování vystaveného portu v modulu na port na hostitelském zařízení. Pokud jste například v modulu odhalili port 8080 a chcete ho namapovat na port 80 hostitelského zařízení, možnosti vytvoření v souboru template.json by vypadaly jako v následujícím příkladu:

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

Konfigurace vypadá takto, když je zřetězená pro manifest nasazení:

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

Omezení využití paměti a procesoru modulu

Deklarujte, kolik prostředků hostitele může modul používat. Tento ovládací prvek zajistí, že jeden modul nebude spotřebovávat příliš mnoho paměti nebo procesoru, což brání spuštění jiných procesů v zařízení. Tato nastavení můžete spravovat pomocí možností vytvoření kontejneru Dockeru ve skupině HostConfig , včetně:

  • Paměť: Limit paměti v bajtech. Například 268435456 bajtů = 256 MB.
  • MemorySwap: Celkový limit paměti (paměť + prohození). Například 536870912 bajtů = 512 MB.
  • NanoCpus: Kvóta procesoru v jednotkách 10–9 (1 miliarda) procesorů. Například 250000000 nanocpus = 0,25 CPU.

Ve formátu template.json by tyto hodnoty vypadaly jako v následujícím příkladu:

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

Po vytvoření řetězce pro konečný manifest nasazení by tyto hodnoty vypadaly jako v následujícím příkladu:

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

Optimalizace gpu modulu IoT Edge

Pokud používáte modul IoT Edge na virtuálním počítači optimalizovaném pro GPU, můžete povolit, aby se modul IoT Edge připojil i k GPU. Pokud to chcete udělat s existujícím modulem, přidejte do svého createOptionssouboru některé specifikace:

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

Pomocí příkazu Kontroly Dockeru ověřte tato nastavení a zobrazte nové nastavení v výtisku JSON.

sudo docker inspect <YOUR-MODULE-NAME>

Další informace o tom, jak se vaše zařízení a virtuální počítač připojují k GPU, najdete v tématu Konfigurace, připojení a ověření modulu IoT Edge pro GPU.

Další kroky

Další příklady možností vytvoření v akci najdete v těchto ukázkách IoT Edge: