Jak skonfigurować opcje tworzenia kontenerów dla modułów usługi IoT Edge

Dotyczy:Znacznik wyboru usługi IoT Edge 1.5 IoT Edge 1.5 Znacznik wyboru usługi IoT Edge 1.4 IoT Edge 1.4

Ważne

Obsługiwane są wersje usługi IoT Edge 1.5 LTS i IoT Edge 1.4 LTS. Usługa IoT Edge 1.4 LTS kończy się 12 listopada 2024 r. Jeśli korzystasz z wcześniejszej wersji, zobacz aktualizację Azure IoT Edge.

Parametr createOptions w manifeście wdrożenia umożliwia skonfigurowanie kontenerów modułów w czasie wykonywania. Ten parametr rozszerza kontrolę nad modułami i umożliwia wykonywanie zadań, takich jak zezwolenie lub ograniczenie dostępu modułu do zasobów urządzenia hosta lub konfigurowanie sieci.

Moduły usługi IoT Edge są implementowane jako kontenery zgodne z platformą Docker na urządzeniu usługi IoT Edge. Platforma Docker oferuje wiele opcji tworzenia kontenerów, a te opcje mają zastosowanie również do modułów usługi IoT Edge. Aby uzyskać więcej informacji, zobacz Opcje tworzenia kontenera platformy Docker.

Opcje tworzenia formatu

Manifest wdrożenia usługi IoT Edge akceptuje opcje tworzenia sformatowane jako JSON. Na przykład użyj opcji tworzenia, które są automatycznie uwzględniane dla każdego modułu edgeHub:

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

W tym przykładzie edgeHub użyto parametru HostConfig.PortBindings do mapowania uwidocznionych portów w kontenerze na port na urządzeniu hosta.

Jeśli używasz rozszerzenia usługi Azure IoT Edge dla programu Visual Studio lub Visual Studio Code, możesz napisać opcje tworzenia w formacie JSON w pliku deployment.template.json . Następnie, gdy używasz rozszerzenia do skompilowania rozwiązania usługi IoT Edge lub wygenerowania manifestu wdrożenia, ciągnie kod JSON dla Użytkownika w formacie oczekiwanym przez środowisko uruchomieniowe usługi IoT Edge. Na przykład:

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

Ważne

Rozszerzenie programu Visual Studio Code usługi Azure IoT Edge jest w trybie konserwacji. Narzędzie iotedgedev jest zalecanym narzędziem do tworzenia modułów usługi IoT Edge.

Jedną z porad dotyczących pisania opcji tworzenia jest użycie docker inspect polecenia . W ramach procesu programowania uruchom moduł lokalnie przy użyciu polecenia docker run <container name>. Gdy moduł będzie działać w odpowiedni sposób, uruchom polecenie docker inspect <container name>. To polecenie zwraca szczegóły modułu w formacie JSON. Znajdź skonfigurowane parametry i skopiuj kod JSON. Na przykład:

Zrzut ekranu przedstawiający wyniki polecenia docker inspect edgeHub.

Typowe scenariusze

Opcje tworzenia kontenera umożliwiają korzystanie z wielu scenariuszy, ale poniżej przedstawiono niektóre, które są najczęściej tworzone podczas tworzenia rozwiązań usługi IoT Edge:

Mapowanie portu hosta na port modułu

Jeśli moduł musi komunikować się z usługą poza rozwiązaniem usługi IoT Edge i nie korzysta z routingu komunikatów, aby to zrobić, musisz zamapować port hosta na port modułu.

Napiwek

To mapowanie portów nie jest wymagane do komunikacji między modułami na tym samym urządzeniu. Jeśli moduł A musi wykonać zapytanie dotyczące interfejsu API hostowanego w module B, może to zrobić bez żadnego mapowania portów. Moduł B musi uwidocznić port w pliku dockerfile, na przykład: EXPOSE 8080. Następnie moduł A może wykonywać zapytania dotyczące interfejsu API przy użyciu nazwy modułu B, na przykład: http://ModuleB:8080/api.

Najpierw upewnij się, że port wewnątrz modułu jest uwidoczniony w celu nasłuchiwania połączeń. Można to zrobić przy użyciu instrukcji EXPOSE w pliku dockerfile. Na przykład EXPOSE 8080. Instrukcja uwidacznia domyślne dla protokołu TCP, jeśli nie zostanie określona, lub można określić UDP.

Następnie użyj ustawienia PortBindings w grupie HostConfig kontenera platformy Docker, aby zamapować uwidoczniony port w module na port na urządzeniu hosta. Jeśli na przykład uwidoczniliśmy port 8080 w module i chcesz zamapować go na port 80 urządzenia hosta, opcje tworzenia w pliku template.json będą wyglądać podobnie do następującego przykładu:

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

Po utworzeniu ciągu manifestu wdrożenia ta sama konfiguracja będzie wyglądać podobnie do następującego przykładu:

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

Ograniczanie użycia pamięci modułu i procesora CPU

Możesz zadeklarować, ile zasobów hosta moduł może użyć. Ta kontrola jest przydatna do zapewniania, że jeden moduł nie może zużywać zbyt dużej ilości pamięci ani czasu procesora CPU, i zapobiega uruchamianiu innych procesów na urządzeniu. Te ustawienia można zarządzać za pomocą opcji tworzenia kontenera platformy Docker w grupie HostConfig , w tym:

  • Pamięć: limit pamięci w bajtach. Na przykład 268435456 bajty = 256 MB.
  • MemorySwap: łączny limit pamięci (pamięć i zamiana). Na przykład 536870912 bajty = 512 MB.
  • NanoCpus: limit przydziału procesora CPU w jednostkach 10-9 (1 miliardowych) procesorów CPU. Na przykład 2500000000 nanocpus = 0,25 CPU.

W formacie template.json te wartości będą wyglądać jak w poniższym przykładzie:

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

Po utworzeniu ciągu końcowego manifestu wdrożenia te wartości będą wyglądać podobnie do następującego przykładu:

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

Optymalizacja procesora GPU modułu usługi IoT Edge

Jeśli używasz modułu usługi IoT Edge na maszynie wirtualnej zoptymalizowanej pod kątem procesora GPU, możesz również włączyć moduł usługi IoT Edge w celu nawiązania połączenia z procesorem GPU. Aby to zrobić przy użyciu istniejącego modułu, dodaj kilka specyfikacji do elementu createOptions:

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

Aby potwierdzić, że te ustawienia zostały pomyślnie dodane, użyj polecenia Docker inspect, aby wyświetlić nowe ustawienie w wydruku JSON.

sudo docker inspect <YOUR-MODULE-NAME>

Aby dowiedzieć się więcej o tym, jak urządzenie i maszyna wirtualna łączą się z procesorem GPU, zobacz Konfigurowanie, łączenie i weryfikowanie modułu usługi IoT Edge dla procesora GPU.

Następne kroki

Aby uzyskać więcej przykładów opcji tworzenia w akcji, zobacz następujące przykłady usługi IoT Edge: