Konfigurieren von Erstellungsoptionen für Container für IoT Edge-Module
Gilt für: IoT Edge 1.5 IoT Edge 1.4
Wichtig
IoT Edge 1.5 LTS und IoT Edge 1.4 LTS sind unterstützte Releases. Das Dienstende von IoT Edge 1.4 LTS wird am 12. November 2024 erreicht. 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 Ihre Kontrolle über die Module und ermöglicht Aufgaben wie das Gewähren oder Einschränken des Zugriffs auf die Ressourcen des Hostgeräts durch das Modul oder das Konfigurieren des Netzwerks.
IoT Edge-Module werden als Docker-kompatible Container auf Ihrem IoT Edge-Gerät implementiert. Docker bietet viele Optionen zum Erstellen von Containern, und diese Optionen treffen auch für IoT Edge-Module zu. 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, können Sie die Erstellungsoptionen im JSON-Format in die Datei deployment.template.json schreiben. 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.
Ein Tipp zum Schreiben von Erstellungsoptionen ist die Verwendung des Befehls docker inspect
. Führen Sie das Modul im Rahmen Ihres Entwicklungsprozesses lokal mithilfe von docker run <container name>
aus. 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 konfigurierten Parameter, und kopieren Sie den JSON-Code. Zum Beispiel:
Gängige Szenarios
Containererstellungsoptionen ermöglichen viele Szenarien, im Folgenden finden Sie nur einige der häufigsten beim Erstellen von IoT Edge-Lösungen:
- Gewähren des Zugriffs auf den Hostspeicher für Module
- Zuordnen eines Hostports zu einem Modulport
- Einschränken des Modularbeitsspeichers und der CPU-Nutzung
- GPU-Optimieren eines IoT Edge-Moduls
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
Diese Portzuordnung ist für die Kommunikation zwischen Modulen 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 seinem Dockerfile verfügbar machen, z. B. EXPOSE 8080
. Anschließend kann Modul A die API über den Namen von Modul B abfragen, z. B. http://ModuleB:8080/api
.
Stellen Sie zunächst sicher, dass im Modul ein Port verfügbar ist, um auf Verbindungen zu lauschen. 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"
}
]
}
}
}
In Form von Zeichenfolgen für das Bereitstellungsmanifest sieht die gleiche Konfiguration wie das folgende Beispiel aus:
"createOptions": "{\"HostConfig\":{\"PortBindings\":{\"8080/tcp\":[{\"HostPort\":\"80\"}]}}}"
Einschränken von Modularbeitsspeicher und CPU-Nutzung
Sie können deklarieren, welchen Anteil der Hostressourcen ein Modul verwenden kann. Diese Kontrolle ist hilfreich, um sicherzustellen, dass ein Modul nicht zu viel Arbeitsspeicher oder CPU-Nutzung beanspruchen und die Ausführung anderer Prozesse auf dem Gerät verhindern kann. 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"]]}]}}
Verwenden Sie zur Bestätigung, dass diese Einstellungen erfolgreich hinzugefügt wurden, den Docker-Prüfbefehl, 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 angewandte Erstellungsoptionen finden Sie in den folgenden IoT Edge-Beispielen: