Freigeben über


Konfigurieren von Erstellungsoptionen für Container für IoT Edge-Module

Gilt für:Häkchen für IoT Edge 1.5 IoT Edge 1.5

Wichtig

IoT Edge 1.5 LTS ist das unterstützte Release. IoT Edge 1.4 LTS wurde am 12. November 2024 eingestellt. Wenn Sie ein früheres Release verwenden, finden Sie weitere Informationen unter Aktualisieren von IoT Edge.

Mit dem Parameter createOptions im Bereitstellungsmanifest können Sie die Modulcontainer zur Laufzeit konfigurieren. Dieser Parameter erweitert die Kontrolle über die Module und ermöglicht Es Ihnen, Aufgaben auszuführen, z. B. das Einschränken des Zugriffs auf die Ressourcen des Hostgeräts oder das Konfigurieren von Netzwerken.

IoT Edge-Module werden als Docker-kompatible Container auf Ihrem IoT Edge-Gerät ausgeführt. Docker bietet viele Optionen zum Erstellen von Containern, und diese Optionen gelten auch für IoT Edge-Module. Weitere Informationen finden Sie unter Optionen für die Docker-Containererstellung.

Formatieren der Erstellungsoptionen

Das IoT Edge-Bereitstellungsmanifest akzeptiert Erstellungsoptionen, die als JSON formatiert sind. Beispiel: die Erstellungsoptionen, die für jedes edgeHub-Modul automatisch enthalten sind:

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

In diesem edgeHub-Beispiel wird der Parameter HostConfig.PortBindings verwendet, um verfügbar gemachte Ports im Container einem Port auf dem Hostgerät zuzuordnen.

Wenn Sie die Azure IoT Edge-Erweiterung für Visual Studio oder Visual Studio Code verwenden, schreiben Sie die Erstellungsoptionen im JSON-Format in der dateideployment.template.json . Wenn Sie dann mithilfe der Erweiterung die IoT Edge-Lösung erstellen oder das Bereitstellungsmanifest generieren, wird der JSON-Code als Zeichenfolgen in dem von der IoT Edge-Runtime erwarteten Format ausgegeben. Beispiel:

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

Wichtig

Die Azure IoT Edge-Erweiterung für Visual Studio Code befindet sich im Wartungsmodus. Das Tool iotedgedev ist das empfohlene Tool für die Entwicklung von IoT Edge-Modulen.

Verwenden Sie den docker inspect Befehl zum Schreiben von Erstellungsoptionen. Führen Sie das Modul lokal aus, indem Sie docker run <container name> als Teil des Entwicklungsprozesses verwenden. Wenn das Modul auf die gewünschte Weise funktioniert, führen Sie docker inspect <container name> aus. Dieser Befehl gibt die Moduldetails im JSON-Format aus. Suchen Sie die Parameter, die Sie konfiguriert haben, und kopieren Sie den JSON-Code. Beispiel:

Screenshot der Ergebnisse des Befehls

Gängige Szenarios

Containererstellungsoptionen unterstützen verschiedene Szenarien. Im Folgenden finden Sie die am häufigsten verwendeten Lösungen zum Erstellen von IoT Edge-Lösungen:

Zuordnen eines Hostports zu einem Modulport

Wenn Ihr Modul mit einem Dienst außerhalb der IoT Edge-Lösung kommunizieren muss und dazu kein Nachrichtenrouting verwendet, müssen Sie einem Modulport einen Hostport zuordnen.

Tipp

Die Portzuordnung ist für die Kommunikation zwischen Modul-zu-Modul auf demselben Gerät nicht erforderlich. Wenn Modul A eine API abfragen muss, die in Modul B gehostet wird, kann dies ohne Portzuordnung erfolgen. Modul B muss einen Port in der Dockerfile-Datei verfügbar machen. Beispielsweise EXPOSE 8080. Anschließend kann Modul A die API mithilfe des Modulnamens B abfragen. Beispielsweise http://ModuleB:8080/api.

Stellen Sie zunächst sicher, dass ein Port innerhalb des Moduls für die Überwachung von Verbindungen verfügbar gemacht wird. Hierzu können Sie eine EXPOSE-Anweisung im Dockerfile verwenden. Beispielsweise EXPOSE 8080. Die EXPOSE-Anweisung verwendet standardmäßig das TCP-Protokoll, wenn keines angegeben ist, oder Sie können UDP angeben.

Verwenden Sie dann die Einstellung PortBindings in der Gruppe HostConfig der Erstellungsoptionen für Docker-Container, um den verfügbar gemachten Port im Modul einem Port auf dem Hostgerät zuzuordnen. Wenn Sie z. B. Port 8080 im Modul verfügbar gemacht haben und diesen Port 80 des Hostgeräts zuordnen möchten, ähneln die Erstellungsoptionen in der Datei „template.json“ dem folgenden Beispiel:

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

Wenn die Konfiguration für das Bereitstellungsmanifest in eine Zeichenfolge umgewandelt wird, sieht sie wie folgt aus:

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

Einschränken von Modularbeitsspeicher und CPU-Nutzung

Deklarieren Sie, wie viel der Hostressourcen ein Modul verwenden kann. Dieses Steuerelement stellt sicher, dass ein Modul nicht zu viel Arbeitsspeicher oder CPU verbraucht, sodass andere Prozesse nicht auf dem Gerät ausgeführt werden. Sie können diese Einstellungen mit den Erstellungsoptionen für Docker-Container in der Gruppe HostConfig verwalten, einschließlich:

  • Arbeitsspeicher: Arbeitsspeicherlimit in Byte. Beispiel: 268.435.456 Byte = 256 MB
  • MemorySwap: Gesamtspeicherlimit (Arbeitsspeicher + Swap). Beispiel: 536.870.912 Byte = 512 MB.
  • NanoCpus: CPU-Kontingent in Einheiten von 10-9 (1 Milliarden) CPUs. Beispiel: 250.000.000 nanocpus = 0,25 CPU.

Im Format für „template.json“ sehen diese Werte wie im folgenden Beispiel aus:

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

In Form von Zeichenfolgen für das abschließende Bereitstellungsmanifest sehen diese Werte wie das folgende Beispiel aus:

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

GPU-Optimieren eines IoT Edge-Moduls

Wenn Sie Ihr IoT Edge-Modul auf einem GPU-optimierten virtuellen Computer ausführen, können Sie ein IoT Edge-Modul aktivieren, um auch eine Verbindung mit Ihrer GPU herzustellen. Um dies bei einem vorhandenen Modul zu erledigen, fügen Sie Ihrem createOptions einige Spezifikationen hinzu:

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

Bestätigen Sie diese Einstellungen mithilfe des Docker Inspect-Befehls, um die neue Einstellung in einem JSON-Ausdruck anzuzeigen.

sudo docker inspect <YOUR-MODULE-NAME>

Weitere Informationen dazu, wie Ihr Gerät und der virtuelle Computer eine Verbindung mit einer GPU herstellen, finden Sie unter Konfigurieren, Verbinden und Überprüfen eines IoT Edge-Moduls für eine GPU.

Nächste Schritte

Weitere Beispiele für das Erstellen von Optionen in Aktion finden Sie in den folgenden IoT Edge-Beispielen: