Jak skonfigurować opcje tworzenia kontenerów dla modułów usługi IoT Edge
Dotyczy: IoT Edge 1.5 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:
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:
- Przyznawanie modułom dostępu do magazynu hostów
- Mapowanie portu hosta na port modułu
- Ograniczanie użycia pamięci modułu i procesora CPU
- Optymalizacja procesora GPU modułu 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: