Příprava nasazení vašeho IoT Edge v produkčním prostředí

Platí pro:  ikona Ano IoT Edge 1,1 jiných verzí: IoT Edge 1,2

Platí pro:  ikona Ano IoT Edge 1,2 jiných verzí: IoT Edge 1,1

Až budete připraveni převezměte své řešení IoT Edge z vývoje do produkčního prostředí, ujistěte se, že je nakonfigurované pro průběžný výkon.

Informace uvedené v tomto článku nejsou všechny stejné. Abyste si pomohli určit prioritu, každá část začíná seznamy, které rozdělují práci do dvou částí: je důležité je dokončit před tím, než se pracujou v produkčním prostředí, nebo pro vás užitečné.

Konfigurace zařízení

IoT Edge zařízení může být cokoli od Raspberry Pi po přenosný počítač až po virtuální počítač běžící na serveru. K zařízení můžete mít přístup buď fyzicky, nebo prostřednictvím virtuálního připojení, nebo může být izolován po delší dobu. V obou případech chcete mít jistotu, že je nakonfigurovaná tak, aby správně fungovala.

  • Důležité upozornění

    • Instalace produkčních certifikátů
    • Mít plán správy zařízení
    • Použití Moby jako modulu kontejneru
  • Užitečné

    • Volba nadřazeného protokolu

Instalace produkčních certifikátů

Každé IoT Edge v produkčním prostředí potřebuje nainstalovaný certifikát certifikační autority (CA) zařízení. Tento certifikát certifikační autority je poté deklarován IoT Edge modulu runtime v konfiguračním souboru. Pro scénáře vývoje a testování vytvoří IoT Edge runtime dočasné certifikáty, pokud nejsou v konfiguračním souboru deklarovány žádné certifikáty. Platnost těchto dočasných certifikátů ale vyprší po třech měsících a nejsou bezpečné pro produkční scénáře. V produkčních scénářích byste měli zadat vlastní certifikát CA zařízení, buď od certifikační autority podepsané svým držitelem, nebo zakoupený od komerční certifikační autority.

Poznámka

V současné době omezení brání použití certifikátů, které vyprší 1. ledna 2038 nebo po tomto vypršení.

Informace o roli certifikátu certifikační autority zařízení najdete v tématu Jak Azure IoT Edge používá certifikáty.

Další informace o instalaci certifikátů do zařízení IoT Edge a odkazování na ně z konfiguračního souboru najdete v tématu Správa certifikátu na IoT Edge zařízení.

Mít plán správy zařízení

Než jakékoli zařízení dáte do produkčního prostředí, měli byste vědět, jak budete spravovat budoucí aktualizace. Pro IoT Edge zařízení může seznam součástí, které se mají aktualizovat, zahrnovat:

  • Firmware zařízení
  • Knihovny operačního systému
  • Modul kontejneru, například Moby
  • IoT Edge
  • Certifikáty certifikačních autorit

Další informace najdete v tématu Aktualizace modulu runtime IoT Edge runtime. Aktuální metody pro aktualizaci IoT Edge vyžadují fyzický přístup nebo přístup SSH k IoT Edge zařízení. Pokud máte mnoho zařízení, která je třeba aktualizovat, zvažte přidání kroků aktualizace do skriptu nebo použijte nástroj pro automatizaci, jako je Ansible.

Použití Moby jako modulu kontejneru

Modul kontejneru je předpokladem pro každé IoT Edge zařízení. V produkčním prostředí se podporuje pouze moby-engine. Jiné kontejnerové moduly, jako je Docker, pracují s IoT Edge a je v pořádku je používat pro vývoj. Moby-engine je možné distribuovat při použití s Azure IoT Edge a Microsoft pro tento modul zajišťuje údržbu.

Volba nadřazeného protokolu

Můžete nakonfigurovat protokol (který určuje použitý port) pro upstreamovou komunikaci s IoT Hub pro agenta IoT Edge i pro IoT Edge hub. Výchozí protokol je AMQP, ale v závislosti na nastavení sítě ho můžete změnit.

Oba dva moduly runtime mají proměnnou prostředí UpstreamProtocol. Platné hodnoty pro proměnnou jsou:

  • MQTT
  • AMQP
  • MQTTWS
  • AMQPWS

Nakonfigurujte proměnnou UpstreamProtocol pro agenta IoT Edge v konfiguračním souboru na samotném zařízení. Pokud se například vaše zařízení IoT Edge nachází za serverem proxy server, který blokuje porty AMQP, možná budete muset nakonfigurovat agenta IoT Edge tak, aby k navázání počátečního připojení k serveru IoT Hub.

Jakmile se IoT Edge připojí, nezapomeňte v budoucích nasazeních pokračovat v konfiguraci proměnné UpstreamProtocol pro oba moduly modulu runtime. Příklad tohoto procesu je k dispozici v tématu Konfigurace IoT Edge zařízení pro komunikaci přes proxy server.

Nasazení

  • Užitečné
    • Být konzistentní s upstreamový protokolem
    • Nastavení úložiště hostitele pro systémové moduly
    • Zmenšete paměťový prostor používaný IoT Edge hubem.
    • Nepoužívejte ladicí verze imagí modulů.

Být konzistentní s upstreamový protokolem

Pokud jste na zařízení IoT Edge IoT Edge nakonfigurovali jiný protokol než výchozí protokol AMQP, měli byste ve všech budoucích nasazeních deklarovat stejný protokol. Pokud je například vaše IoT Edge zařízení za proxy server, která blokuje porty AMQP, pravděpodobně jste zařízení nakonfigurovali pro připojení přes AMQP přes WebSocket (AMQPWS). Při nasazování modulů do zařízení nakonfigurujte stejný protokol AMQPWS pro agenta IoT Edge a IoT Edge Hub, jinak výchozí protokol AMQP přepíše nastavení a zabrání vám v dalším připojení.

Musíte nakonfigurovat pouze proměnnou prostředí UpstreamProtocol pro moduly agenta IoT Edge a IoT Edge centra. Všechny další moduly přijímají jakýkoli protokol nastavený v modulech runtime.

Příklad tohoto procesu je k dispozici v tématu Konfigurace IoT Edge zařízení pro komunikaci přes proxy server.

Nastavení úložiště hostitele pro systémové moduly

Moduly IoT Edge a agentů používají místní úložiště k udržování stavu a umožnění zasílání zpráv mezi moduly, zařízeními a cloudem. Pro zajištění vyšší spolehlivosti a výkonu nakonfigurujte systémové moduly tak, aby se v systému souborů hostitele používá úložiště.

Další informace najdete v tématu Úložiště hostitele pro systémové moduly.

Zmenšete paměťový prostor používaný IoT Edge centrem.

Pokud nasazujete omezená zařízení s omezenou dostupnou pamětí, můžete nakonfigurovat IoT Edge Hub tak, aby se spouštěla v jednodušší kapacitě a využíla méně místa na disku. Tyto konfigurace ale omezují výkon centra IoT Edge, takže najděte správnou rovnováhu, která pro vaše řešení funguje.

Ne optimize for performance on constrained devices

Centrum IoT Edge je ve výchozím nastavení optimalizované pro výkon, takže se pokusí přidělit velké bloky paměti. Tato konfigurace může způsobit problémy se stabilitou na menších zařízeních, jako je Raspberry Pi. Pokud nasazujete zařízení s omezenými prostředky, můžete nastavit proměnnou prostředí OptimizeForPerformance na hodnotu false v IoT Edge hubu.

Pokud je hodnota OptimizeForPerformance nastavená na hodnotu true, bude hlavička protokolu MQTT používat pooledByteBufferAllocator, který má lepší výkon, ale přiděluje více paměti. Alokátor nefunguje dobře v 32bitových operačních systémech nebo na zařízeních s nízkou pamětí. Při optimalizaci výkonu navíc RocksDb přidělí více paměti své roli místního poskytovatele úložiště.

Další informace najdete v tématu Problémy se stabilitou menších zařízení.

Zakázání nepoužívaných protokolů

Dalším způsobem, jak optimalizovat výkon centra IoT Edge a snížit jeho využití paměti, je vypnout hlavičky protokolů pro všechny protokoly, které ve svém řešení nevyužíte.

Hlavičky protokolů se konfigurují nastavením logických proměnných prostředí pro modul IoT Edge hub v manifestech nasazení. Tři proměnné jsou:

  • amqpSettings__enabled
  • mqttSettings__enabled
  • httpSettings__enabled

Všechny tři proměnné mají dvě podtržítka a je možné je nastavit na true nebo false.

Zkrácení doby uložení zpráv

Modul IoT Edge hub dočasně ukládá zprávy, pokud je z nějakého důvodu IoT Hub do služby. Můžete nakonfigurovat, jak dlouho bude centrum IoT Edge na nedoručené zprávy, než jim vyprší jejich platnost. Pokud máte na svém zařízení obavy týkající se paměti, můžete snížit hodnotu timeToLiveSecs v IoT Edge dvojčete modulu centra.

Výchozí hodnota parametru timeToLiveSecs je 7200 sekund, což jsou dvě hodiny.

Nepoužívejte ladicí verze imagí modulů.

Při přechodu z testovacích scénářů do produkčních scénářů nezapomeňte z manifestů nasazení odebrat konfigurace ladění. Zkontrolujte, že žádná image modulu v manifestech nasazení nemá . příponu ladění. Pokud jste přidali možnosti vytvoření pro vystavení portů v modulech pro ladění, odeberte také tyto možnosti vytvoření.

Správa kontejnerů

  • Důležité upozornění
    • Použití značek ke správě verzí
  • Užitečné
    • Uložení kontejnerů modulu runtime v privátním registru

Použití značek ke správě verzí

Značka je koncept Dockeru, který můžete použít k rozlišení mezi verzemi kontejnerů Dockeru. Značky jsou přípony jako 1.1, které se nachází na konci úložiště kontejneru. Příklad: mcr.microsoft.com/azureiotedge-agent:1.1. Značky jsou měnitelné a je možné je kdykoli změnit tak, aby odkazovat na jiný kontejner, takže by se váš tým měl shodnout na konvenci, podle které se bude postupovat při aktualizaci imagí modulů.

Značky také pomáhají vynucovat aktualizace na vašich IoT Edge zařízeních. Když do registru kontejneru nasoudíte aktualizovanou verzi modulu, zvyšte značku. Potom nasazování nového nasazení do zařízení se zvětšeou značkou . Modul kontejnerů rozpozná inkrementovanou značku jako novou verzi a stáhne nejnovější verzi modulu do vašeho zařízení.

Značky pro modul runtime IoT Edge runtime

Agent IoT Edge a image IoT Edge jsou označené verzí IoT Edge, ke které jsou přidruženy. Existují dva různé způsoby použití značek s imagemi modulu runtime:

  • Postupné značky – K získání nejnovějšího obrázku, který odpovídá oběma číslům, použijte pouze první dvě hodnoty čísla verze. Například 1.1 se aktualizuje vždy, když je k dispozici nová verze, která ukazuje na nejnovější verzi 1.1.x. Pokud modul runtime kontejneru ve vašem IoT Edge zařízení image znovu načtou, moduly runtime se aktualizují na nejnovější verzi. Nasazení z Azure Portal na postupné značky. Tento přístup se navrhuje pro účely vývoje.

  • Konkrétní značky – K explicitnímu nastavení verze image použijte všechny tři hodnoty čísla verze. Například verze 1.1.0 se po počátečním vydání nezmění. Až budete připraveni k aktualizaci, můžete v manifestu nasazení deklarovat nové číslo verze. Tento přístup se navrhuje pro produkční účely.

Uložení kontejnerů modulu runtime v privátním registru

Víte o ukládání imagí kontejnerů pro moduly vlastního kódu do privátního registru Azure, ale můžete ho také použít k ukládání veřejných imagí kontejnerů, jako jsou moduly runtime edgeAgent a edgHub. To může být nutné, pokud máte velmi úzká omezení brány firewall, protože tyto kontejnery modulu runtime jsou uložené v Microsoft Container Registry (MCR).

Získejte image pomocí příkazu Docker pull, který se má umístit do privátního registru. Během operace pull budete muset zadat verzi kontejneru, najít nejnovější verzi kontejneru na stránce popisu kontejneru, jak je uvedeno níže, a v případě potřeby nahradit verzi v příkazu pull. Uvědomte si, že budete muset aktualizovat image s každou novou verzí IoT Edge runtime.

IoT Edge kontejner modulu runtime Příkaz Docker pull
Azure IoT Edge Agent docker pull mcr.microsoft.com/azureiotedge-agent:<VERSION_TAG>
Azure IoT Edge Hub docker pull mcr.microsoft.com/azureiotedge-hub:<VERSION_TAG>

Dále nezapomeňte aktualizovat odkazy na image v souboru deployment.template.json pro systémové moduly edgeAgent a edgeHub. Nahraďte mcr.microsoft.com názvem registru a serverem obou modulů.

  • edgeAgent :

    "image": "<registry name and server>/azureiotedge-agent:1.1",

  • edgeHub:

    "image": "<registry name and server>/azureiotedge-hub:1.1",

Sítě

  • Užitečné
    • Kontrola konfigurace odchozích/příchozích přenosů
    • Povolit připojení z IoT Edge zařízení
    • Konfigurace komunikace prostřednictvím proxy serveru

Kontrola konfigurace odchozích/příchozích přenosů

Komunikační kanály mezi Azure IoT Hub a IoT Edge jsou vždy nakonfigurované tak, aby byly odchozí. Ve většině IoT Edge scénářů jsou nutná pouze tři připojení. Modul kontejneru se musí připojit k registru kontejneru (nebo registrům), který obsahuje image modulu. Modul IoT Edge runtime se musí připojit k IoT Hub, aby načítá informace o konfiguraci zařízení a odesílal zprávy a telemetrii. A pokud používáte automatické zřizování, IoT Edge připojit ke službě Device Provisioning. Další informace najdete v tématu Pravidla konfigurace portů a brány firewall.

Povolit připojení z IoT Edge zařízení

Pokud nastavení sítě vyžaduje výslovné povolení připojení z IoT Edge zařízení, projděte si následující seznam komponent IoT Edge zařízení:

  • IoT Edge agent otevře trvalé připojení AMQP/MQTT IoT Hub přes WebSockets.
  • IoT Edge Hub otevře jedno trvalé připojení AMQP nebo několik připojení MQTT k IoT Hub, případně přes WebSockets.
  • IoT Edge služba provádí přerušované volání HTTPS pro IoT Hub.

Ve všech třech případech by název DNS odpovídal vzoru * .azure-devices.net.

Modul kontejnerů navíc provádí volání do registrů kontejnerů přes protokol HTTPS. Pokud chcete načíst IoT Edge kontejneru modulu runtime, název DNS je mcr.microsoft.com. Modul kontejneru se připojí k dalším registrům, jak je nakonfigurované v nasazení.

Tento kontrolní seznam je výchozím bodem pro pravidla brány firewall:

ADRESA URL ( * = zástupný znak) Odchozí porty TCP Využití
mcr.microsoft.com 443 Microsoft Container Registry
global.azure-devices-provisioning.net 443 Přístup ke dps (volitelné)
*.azurecr.io 443 Osobní registry kontejnerů a registry kontejnerů třetích stran
*.blob.core.windows.net 443 Stažení Azure Container Registry rozdílů obrázků z úložiště objektů blob
*.azure-devices.net 5671, 8883, 443 IoT Hub přístupu
*.docker.io 443 Docker Hub přístupu (volitelné)

Některá z těchto pravidel brány firewall se dědí z Azure Container Registry. Další informace najdete v tématu Konfigurace pravidel pro přístup k registru kontejneru Azure za bránou firewall.

Poznámka

Pokud chcete zajistit konzistentní plně kvalifikovaný název domény mezi restem a koncovými body dat, od 15. června 2020 se koncový bod Microsoft Container Registry změní z na . *.cdn.mscr.io``*.data.mcr.microsoft.com
Další informace najdete v tématu konfigurace Microsoft Container Registry brány firewall klienta.

Pokud nechcete konfigurovat bránu firewall tak, aby povoloval přístup k veřejným registrům kontejnerů, můžete image ukládat do privátního registru kontejnerů, jak je popsáno v tématu Uložení kontejnerů modulu runtime ve vašem privátním registru.

Konfigurace komunikace prostřednictvím proxy serveru

Pokud se vaše zařízení budou nasazovat v síti, která používá proxy server, musí být schopná komunikovat přes proxy server, aby mohla komunikovat s IoT Hub a registry kontejnerů. Další informace najdete v tématu Konfigurace IoT Edge zařízení pro komunikaci přes proxy server.

Správa řešení

  • Užitečné
    • Nastavení protokolů a diagnostiky
    • Omezení velikosti protokolu
    • Zvážení testů a kanálů CI/CD

Nastavení protokolů a diagnostiky

V Linuxu používá IoT Edge démon deníky jako výchozí ovladač protokolování. K dotazování protokolů démona můžete journalctl použít nástroj příkazového řádku.

Na Windows proces démon IoT Edge diagnostiku PowerShellu. Slouží Get-IoTEdgeLog k dotazování protokolů z démona. IoT Edge moduly používají ovladač JSON pro protokolování, což je výchozí nastavení.

. {Invoke-WebRequest -useb aka.ms/iotedge-win} | Invoke-Expression; Get-IoTEdgeLog

Počínaje verzí 1,2 IoT Edge spoléhá na více procesů démonů. I když se každý z protokolů démona dá jednotlivě dotazovat journalctl , iotedge system příkazy poskytují pohodlný způsob dotazování na kombinované protokoly.

  • Konsolidovaný iotedge příkaz:

    sudo iotedge system logs
    
  • Ekvivalentní journalctl příkaz:

    journalctl -u aziot-edge -u aziot-identityd -u aziot-keyd -u aziot-certd -u aziot-tpmd
    

Při testování nasazení IoT Edge můžete obvykle získat přístup k zařízením, abyste mohli načítat protokoly a řešit potíže. V případě nasazení nemusí být tato možnost k dispozici. Vezměte v úvahu, jak budete shromažďovat informace o vašich zařízeních v produkčním prostředí. Jednou z možností je použití protokolovacího modulu, který shromažďuje informace z jiných modulů a odesílá je do cloudu. Jedním z příkladů protokolovacího modulu je logspout-loganalytics, nebo můžete navrhnout vlastní.

Omezit omezení velikosti protokolu

Ve výchozím nastavení nenastavuje Moby kontejnerového modulu limity velikosti protokolu kontejneru. V průběhu času to může vést k tomu, že zařízení zaplňuje protokoly a uvolní místo na disku. Pokud tomu chcete zabránit, vezměte v úvahu následující možnosti:

Možnost: Nastavte globální limity, které platí pro všechny moduly kontejneru.

Velikost všech protokolů kontejnerů můžete omezit v možnostech protokolu modulu container Engine. Následující příklad nastaví ovladač protokolu na json-file (doporučeno) s omezeními velikosti a počtu souborů:

{
    "log-driver": "json-file",
    "log-opts": {
        "max-size": "10m",
        "max-file": "3"
    }
}

Přidejte (nebo přidejte) tyto informace do souboru s názvem daemon.json a umístěte je do následujícího umístění:

Platforma Umístění
Linux /etc/docker/
Windows C:\ProgramData\iotedge-moby\config\
  • /etc/docker/

Aby se změny projevily, musí být modul kontejneru restartován.

Možnost: upravit nastavení protokolu pro každý modul kontejneru

To můžete provést v createOptions každého modulu. Například:

"createOptions": {
    "HostConfig": {
        "LogConfig": {
            "Type": "json-file",
            "Config": {
                "max-size": "10m",
                "max-file": "3"
            }
        }
    }
}

Další možnosti pro systémy Linux

  • Nakonfigurujte modul kontejneru tak, aby odesílal protokoly do systemd deníku nastavením journald jako výchozí ovladač protokolování.

  • Pomocí nástroje logrotate pravidelně odeberte staré protokoly ze zařízení. Použijte následující specifikaci souboru:

    /var/lib/docker/containers/*/*-json.log{
         copytruncate
         daily
         rotate7
         delaycompress
         compress
         notifempty
         missingok
    }
    

Zvažte testy a kanály CI/CD.

Pro nejúčinnější scénář nasazení IoT Edge zvažte integraci nasazení v produkčním prostředí do kanálů pro testování a CI/CD. Azure IoT Edge podporuje několik platforem CI/CD, včetně Azure DevOps. Další informace najdete v tématu průběžná integrace a průběžné nasazování do Azure IoT Edge.

Důležité informace o zabezpečení

  • Důležité upozornění
    • Správa přístupu k registru kontejneru
    • Omezení přístupu kontejneru k prostředkům hostitele

Správa přístupu k registru kontejneru

Než nasadíte moduly do produkčních IoT Edge zařízení, ujistěte se, že máte pod kontrolou přístup k registru kontejneru, aby k nim nemohly přistupovat ani dělat změny v imagích kontejnerů. Použití soukromého registru kontejnerů ke správě imagí kontejneru.

V kurzech a další dokumentaci vám pomůžeme, abyste na svém zařízení IoT Edge používali stejné přihlašovací údaje registru kontejneru jako při použití ve vývojovém počítači. Tyto pokyny jsou určené jenom pro snazší nastavení testovacích a vývojových prostředí a neměli byste je dodržovat v produkčním scénáři.

Pro bezpečnější přístup k vašemu registru máte možnost volby ověřování. Oblíbeným a doporučeným ověřováním je použití instančního objektu služby Active Directory, který je vhodný pro aplikace nebo služby pro vyžádání imagí kontejneru v automatizovaném nebo jiném bezobslužném režimu (bez periferních), jako IoT Edge zařízení. Další možností je použít tokeny v oboru úložiště, které umožňují vytvářet dlouhé nebo krátkodobé identity, které existují pouze v Azure Container Registry byly vytvořeny v nástroji a mají přístup k úrovni úložiště.

Chcete-li vytvořit instanční objekt, spusťte dva skripty, jak je popsáno v tématu Vytvoření instančního objektu. Tyto skripty dělají následující úlohy:

  • První skript vytvoří instanční objekt. Vypíše ID objektu služby a heslo instančního objektu. Tyto hodnoty bezpečně ukládejte do svých záznamů.

  • Druhý skript vytvoří přiřazení rolí, které se udělí instančnímu objektu, který se v případě potřeby může spustit později. Doporučujeme použít pro parametr roli uživatele acrPull role . Seznam rolí najdete v tématu Azure Container Registry role a oprávnění.

K ověřování pomocí instančního objektu zadejte ID a heslo instančního objektu, které jste získali z prvního skriptu. Zadejte tyto přihlašovací údaje v manifestu nasazení.

  • Pro uživatelské jméno nebo ID klienta zadejte ID objektu služby.

  • Pro heslo nebo tajný klíč klienta zadejte heslo objektu služby.


Pokud chcete vytvořit tokeny s rozsahem úložiště, postupujte prosím podle pokynů pro vytvoření tokenu s oboremúložiště.

K ověřování pomocí tokenů v oboru úložiště zadejte název a heslo tokenu, který jste získali po vytvoření tokenu s oborem úložiště. Zadejte tyto přihlašovací údaje v manifestu nasazení.

  • Jako uživatelské jméno zadejte uživatelské jméno tokenu.

  • Pro heslo zadejte jedno z hesel tokenu.

Poznámka

Po implementaci rozšířeného ověřování zabezpečení zakažte nastavení uživatele pro správu , aby nebylo k dispozici výchozí přístup k uživatelskému jménu nebo heslu. ve vašem registru kontejneru v Azure Portal v nabídce levé podokno v části Nastavení vyberte přístupové klíče.

Omezení přístupu kontejneru k prostředkům hostitele

Pro vyrovnávání zatížení prostředků sdíleného hostitele napříč moduly doporučujeme uvést omezení spotřeby prostředků na modul. Tato omezení zajišťují, že jeden modul nemůže spotřebovat příliš mnoho paměti nebo využití procesoru a zabránit spuštění jiných procesů na zařízení. IoT Edge platforma ve výchozím nastavení neomezuje prostředky pro moduly. vzhledem k tomu, kolik prostředků daný modul potřebuje optimální běh, vyžaduje testování.

Docker poskytuje některá omezení, která můžete použít k omezení prostředků, jako jsou paměť a využití procesoru. Další informace najdete v tématu Možnosti modulu runtime s pamětí, procesory agrafickými procesory.

Tato omezení lze použít pro jednotlivé moduly pomocí možností Create v manifestech nasazení. Další informace najdete v tématu jak nakonfigurovat možnosti vytváření kontejnerů pro IoT Edge moduly.

Další kroky