Sdílet prostřednictvím


Spouštění existujících modulů IoT Edge ze zařízení Azure Stack Edge Pro FPGA na zařízeních Azure Stack Edge Pro GPU

PLATÍ PRO: Ano pro skladovou položku Pro GPUAzure Stack Edge Pro – GPUAno pro skladovou položku Pro RAzure Stack Edge Pro R

Poznámka:

Důrazně doporučujeme nasadit nejnovější verzi IoT Edge na virtuální počítač s Linuxem. Spravovaný IoT Edge ve službě Azure Stack Edge používá starší verzi modulu runtime IoT Edge, která nemá nejnovější funkce a opravy. Pokyny najdete v tématu Nasazení virtuálního počítače s Ubuntu. Další informace o dalších podporovaných distribucích Linuxu, které můžou spouštět IoT Edge, najdete v podporovaných systémech Azure IoT Edge – kontejnerové moduly.

Tento článek podrobně popisuje změny potřebné pro modul IoT Edge založený na Dockeru, který běží na azure Stack Edge Pro FPGA, aby mohl běžet na platformě IoT Edge založené na Kubernetes na zařízení Azure Stack Edge Pro GPU.

Informace o implementaci IoT Edge

Implementace IoT Edge se liší na zařízeních Azure Stack Edge Pro FPGA a na zařízeních Azure Stack Edge Pro GPU. Pro zařízení s GPU se Kubernetes používá jako hostitelská platforma pro IoT Edge. IoT Edge na zařízeních FPGA používá platformu založenou na Dockeru. Aplikační model založený na Dockeru ioT Edge se automaticky přeloží do nativního aplikačního modelu Kubernetes. Některé změny ale můžou být stále potřeba, protože se podporuje jenom malá podmnožina aplikačního modelu Kubernetes.

Pokud migrujete úlohy ze zařízení FPGA na zařízení s GPU, budete muset provést změny stávajících modulů IoT Edge, aby se tyto moduly úspěšně spouštěly na platformě Kubernetes. Možná budete muset zadat jiné požadavky na úložiště, sítě, využití prostředků a webový proxy server.

Úložiště

Při zadávání úložiště pro moduly IoT Edge zvažte následující informace.

  • Úložiště pro kontejnery v Kubernetes se zadává pomocí připojení svazků.
  • Nasazení v Kubernetes nemůže mít vazby pro přidružení trvalého úložiště nebo cest hostitele.
    • Pro trvalé úložiště použijte Mounts s typem volume.
    • Pro cesty hostitele použijte Mounts s typem bind.
  • Pro IoT Edge v Kubernetes vytvořte vazbu Mounts jenom pro adresář a ne pro soubor.

Příklad – Úložiště prostřednictvím připojení svazků

Pro IoT Edge v dockeru se vazby cest hostitele používají k mapování sdílených složek v zařízení na cesty uvnitř kontejneru. Tady jsou možnosti vytvoření kontejneru používané na zařízeních FPGA:

{
  "HostConfig": 
  {
   "Binds": 
    [
     "<Host storage path for Edge local share>:<Module storage path>"
    ]
   }
}

V případě cest hostitelů pro IoT Edge v Kubernetes se tady zobrazuje příklad použití Mounts s typem bind :

{
    "HostConfig": {
        "Mounts": [
            {
                "Target": "<Module storage path>",
                "Source": "<Host storage path>",
                "Type": "bind"
            }
        ]
    }
}

Pro zařízení GPU, na kterých běží IoT Edge v Kubernetes, se připojení svazků používají k určení úložiště. Pokud chcete zřídit úložiště pomocí sdílených složek, hodnota Mounts.Source by byla název sdílené složky SMB nebo NFS, kterou jste na svém zařízení GPU zřídili. Je to /home/input cesta, ve které je svazek přístupný v rámci kontejneru. Tady jsou možnosti vytvoření kontejneru používané na zařízeních s GPU:

{
    "HostConfig": {
        "Mounts": [
        {
            "Target": "/home/input",
            "Source": "<nfs-or-smb-share-name-here>",
            "Type": "volume"
        },
        {
            "Target": "/home/output",
            "Source": "<nfs-or-smb-share-name-here>",
            "Type": "volume"
        }]
    }
}

Síť

Při zadávání sítí pro moduly IoT Edge zvažte následující informace.

  • HostPort K zveřejnění služby uvnitř i mimo cluster se vyžaduje specifikace.
    • Možnosti K8sExperimental, které omezují vystavení služby pouze clusteru.
  • Komunikace mezi moduly vyžaduje HostPort specifikaci a připojení pomocí namapovaného portu (a ne pomocí portu vystaveného kontejneru).
  • Hostitelské sítě fungují s dnsPolicy = ClusterFirstWithHostNettím, že všechny kontejnery (zejména edgeHub) nemusí být také v hostitelské síti.
  • Přidání mapování portů pro tcp, UDP ve stejném požadavku nefunguje.

Příklad – externí přístup k modulům

Pro všechny moduly IoT Edge, které určují vazby portů, se IP adresa přiřadí pomocí rozsahu IP adres externí služby Kubernetes, který byl zadán v místním uživatelském rozhraní zařízení. Neexistují žádné změny možností vytvoření kontejneru mezi IoT Edge v dockeru a IoT Edge v Kubernetes, jak je znázorněno v následujícím příkladu.

{
    "HostConfig": {
        "PortBindings": {
            "5000/tcp": [
                {
                    "HostPort": "5000"
                }
            ]
        }
    }
}

K dotazování IP adresy přiřazené k vašemu modulu ale můžete použít řídicí panel Kubernetes, jak je popsáno v části Získání IP adresy pro služby nebo moduly.

Případně se můžete připojit k rozhraní PowerShellu zařízení a pomocí iotedge příkazu list vypsat všechny moduly spuštěné na vašem zařízení. Výstup příkazu bude také indikovat externí IP adresy přidružené k modulu.

Využití prostředků

S nastavením IoT Edge založeným na Kubernetes na zařízeních s GPU se prostředky, jako je hardwarová akcelerace, paměť a požadavky na procesor, zadají jinak než na zařízeních FPGA.

Využití zrychlení výpočetních prostředků

Pokud chcete nasadit moduly na FPGA, použijte možnosti vytvoření kontejneru, jak je znázorněno v následující konfiguraci:

{
    "HostConfig": {
    "Privileged": true,
    "PortBindings": {
        "50051/tcp": [
        {
            "HostPort": "50051"
        }
        ]
    }
    },
    "k8s-experimental": {
    "resources": {
        "limits": {
        "microsoft.com/fpga_catapult": 2
        },
        "requests": {
        "microsoft.com/fpga_catapult": 2
        }
    }
    },
    "Env": [
    "WIRESERVER_ADDRESS=10.139.218.1"
    ]
}

V případě GPU místo vazeb zařízení použijte specifikace požadavků na prostředky, jak je znázorněno v následující minimální konfiguraci. Místo katapultu požadujete prostředky nvidia a nemusíte zadávat wireserver.

{
    "HostConfig": {
    "Privileged": true,
    "PortBindings": {
        "50051/tcp": [
        {
            "HostPort": "50051"
        }
        ]
    }
    },
    "k8s-experimental": {
    "resources": {
        "limits": {
        "nvidia.com/gpu": 2
        }    
    }
}

Využití paměti a procesoru

Pokud chcete nastavit využití paměti a procesoru, použijte omezení procesoru pro moduly v k8s-experimental této části.

    "k8s-experimental": {
    "resources": {
        "limits": {
            "memory": "128Mi",
            "cpu": "500m",
            "nvidia.com/gpu": 2
        },
        "requests": {
            "nvidia.com/gpu": 2
        }
}

Specifikace paměti a procesoru nejsou nezbytné, ale obecně se doporučuje. Pokud requests není zadáno, hodnoty nastavené v limitech se použijí jako minimální povinné.

Použití sdílené paměti pro moduly také vyžaduje jiný způsob. Můžete například použít režim IPC hostitele pro přístup ke sdílené paměti mezi řešeními Analýzy živého videa a odvozování, jak je popsáno v tématu Nasazení Analýzy živého videa ve službě Azure Stack Edge.

Webový proxy server

Při konfiguraci webového proxy serveru zvažte následující informace:

Pokud máte ve své síti nakonfigurovaný webový proxy server, nakonfigurujte pro nasazení na zařízeních FPGA následující proměnné prostředí pro edgeHub nasazení na zařízeních IoT Edge založené na Dockeru:

  • https_proxy : <proxy URL>
  • UpstreamProtocol : AmqpWs (pokud webový proxy server neumožňuje Amqp provoz)

Pro nastavení IoT Edge založené na Kubernetes na zařízeních s GPU budete muset během nasazení nakonfigurovat tuto další proměnnou:

  • no_proxy: localhost

  • Proxy server IoT Edge na platformě Kubernetes používá port 35000 a 35001. Ujistěte se, že se modul nespustí na těchto portech, nebo může způsobit konflikty portů.

Další rozdíly

  • Strategie nasazení: Možná budete muset změnit chování nasazení pro všechny aktualizace modulu. Výchozí chování modulů IoT Edge je kumulativní aktualizace. Toto chování brání restartování aktualizovaného modulu, pokud modul používá prostředky, jako je hardwarová akcelerace nebo síťové porty. Toto chování může mít neočekávané účinky, zejména při práci s trvalými svazky na platformě Kubernetes pro zařízení s GPU. Pokud chcete toto výchozí chování přepsat, můžete zadat Recreate v k8s-experimental části modulu.

    {
      "k8s-experimental": {
        "strategy": {
          "type": "Recreate"
        }
      }
    }
    
  • Názvy modulů: Názvy modulů by měly dodržovat zásady vytváření názvů Kubernetes. Když tyto moduly přesunete do IoT Edge s Kubernetes, budete možná muset přejmenovat moduly spuštěné na IoT Edge pomocí Dockeru. Další informace o pojmenování najdete v tématu Zásady vytváření názvů Kubernetes.

  • Další možnosti:

    • Některé možnosti vytváření Dockeru, které fungovaly na zařízeních FPGA, nebudou fungovat v prostředí Kubernetes na vašich zařízeních s GPU. Například: , například – EntryPoint.
    • Proměnné prostředí, jako : je třeba nahradit __.
    • Stav vytváření kontejneru pro pod Kubernetes vede ke stavu backoffu modulu pro prostředek IoT Hubu. I když existuje řada důvodů, proč se pod nachází v tomto stavu, je běžným důvodem, proč se načítá velká image kontejneru přes připojení s malou šířkou pásma sítě. Když je pod v tomto stavu, stav modulu se v IOT Hubu zobrazí jako backoff , i když se modul právě spouští.

Další kroky