Konfigurace možností vytvoření kontejneru pro moduly IoT Edge
Platí pro: IoT Edge 1.5 IoT Edge 1.4
Důležité
Podporované verze ioT Edge 1.5 LTS a IoT Edge 1.4 LTS. IoT Edge 1.4 LTS je konec životnosti 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 úlohy, jako je povolení nebo omezení přístupu modulu k prostředkům hostitelského zařízení nebo konfigurace sítí.
Moduly IoT Edge se implementují jako kontejnery kompatibilní s Dockerem na zařízení IoT Edge. Docker nabízí mnoho možností pro vytváření kontejnerů a tyto možnosti platí i 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žíváte rozšíření Azure IoT Edge pro Visual Studio nebo Visual Studio Code, můžete do souboru deployment.template.json napsat možnosti vytvoření ve formátu JSON. Když pak pomocí rozšíření sestavíte řešení IoT Edge nebo vygenerujete manifest nasazení, za vás vytyčuje JSON ve formátu, který modul runtime IoT Edge očekává. 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.
Jedním z tipů pro psaní možností vytvoření je použití docker inspect
příkazu. V rámci procesu vývoje spusťte modul místně pomocí docker run <container name>
. 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:
Obvyklé scénáře
Možnosti vytváření kontejnerů umožňují mnoho scénářů, ale tady jsou některé, které se při vytváření řešení IoT Edge nejčastěji objeví:
- Udělení přístupu k hostitelskému úložišti modulům
- Mapování portu hostitele na port modulu
- Omezení využití paměti a procesoru modulu
- Optimalizace gpu modulu 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.
Tip
Toto 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 v souboru dockerfile, například: EXPOSE 8080
. Pak 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 vystavený 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"
}
]
}
}
}
Po vytvoření řetězce manifestu nasazení by stejná konfigurace vypadala jako v následujícím příkladu:
"createOptions": "{\"HostConfig\":{\"PortBindings\":{\"8080/tcp\":[{\"HostPort\":\"80\"}]}}}"
Omezení využití paměti a procesoru modulu
Můžete deklarovat, kolik prostředků hostitele může modul používat. Toto řízení pomáhá zajistit, aby jeden modul neměl příliš vysoké využití paměti nebo procesoru a nebránil tak spuštění dalších procesů na 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 createOptions
souboru některé specifikace:
{"HostConfig": {"DeviceRequests": [{"Count": -1,"Capabilities": [["gpu"]]}]}}
Pokud chcete ověřit, že se tato nastavení úspěšně přidala, použijte příkaz Docker Inspect a podívejte se na 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 následujících ukázkách IoT Edge: