Cara mengonfigurasi opsi buat kontainer untuk modul IoT Edge
Berlaku untuk: IoT Edge 1.5 IoT Edge 1.4
Penting
IoT Edge 1.5 LTS dan IoT Edge 1.4 LTS adalah rilis yang didukung. IoT Edge 1.4 LTS adalah akhir masa pakai pada 12 November 2024. Jika Anda menggunakan rilis sebelumnya, lihat Memperbarui IoT Edge.
Parameter createOptions dalam manifes penyebaran memungkinkan Anda mengonfigurasi kontainer modul pada runtime bahasa umum. Parameter ini memperluas kontrol Anda atas modul dan memungkinkan tugas seperti mengizinkan atau membatasi akses modul ke sumber daya perangkat host, atau mengonfigurasi jaringan.
Modul IoT Edge diimplementasikan sebagai kontainer yang kompatibel dengan Docker pada perangkat IoT Edge Anda. Docker menawarkan banyak opsi untuk membuat kontainer, dan opsi tersebut juga berlaku untuk modul IoT Edge. Untuk informasi selengkapnya, lihat Opsi membuat kontainer Docker.
Opsi buat format
Manifes penyebaran IoT Edge menerima opsi buat yang diformat sebagai JSON. Misalnya, ambil opsi buat yang disertakan secara otomatis untuk setiap modul edgeHub:
"createOptions": {
"HostConfig": {
"PortBindings": {
"5671/tcp": [
{
"HostPort": "5671"
}
],
"8883/tcp": [
{
"HostPort": "8883"
}
],
"443/tcp": [
{
"HostPort": "443"
}
]
}
}
}
Contoh edgeHub ini menggunakan parameter HostConfig.PortBindings untuk memetakan port yang diekspos pada kontainer ke port pada perangkat host.
Jika Anda menggunakan ekstensi Azure IoT Edge untuk Visual Studio atau Visual Studio Code, Anda dapat menulis opsi buat dalam format JSON dalam file deployment.template.json . Kemudian, ketika Anda menggunakan ekstensi untuk membangun solusi IoT Edge atau menghasilkan manifes penyebaran, itu akan merangkai JSON untuk Anda dalam format yang diharapkan runtime IoT Edge. Contohnya:
"createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
Penting
Ekstensi Azure IoT Edge Visual Studio Code berada dalam mode pemeliharaan. Alat iotedgedev adalah alat yang direkomendasikan untuk mengembangkan modul IoT Edge.
Salah satu tips untuk menulis opsi buat adalah menggunakan perintah docker inspect
. Sebagai bagian dari proses pengembangan Anda, jalankan modul secara lokal menggunakan docker run <container name>
. Setelah Anda memiliki modul bekerja seperti yang Anda inginkan, jalankan docker inspect <container name>
. Perintah ini menghasilkan detail modul dalam format JSON. Temukan parameter yang Anda konfigurasi, dan salin JSON. Contohnya:
Skenario umum
Opsi buat kontainer memungkinkan banyak skenario, tetapi berikut adalah beberapa yang paling sering muncul ketika membangun solusi IoT Edge:
- Berikan kepada modul akses ke penyimpanan host
- Petakan port host ke port modul
- Membatasi memori modul dan penggunaan CPU
- GPU-mengoptimalkan modul IoT Edge
Petakan port host ke port modul
Jika modul Anda perlu berkomunikasi dengan layanan di luar solusi IoT Edge, dan tidak menggunakan perutean pesan untuk melakukannya, maka Anda perlu memetakan port host ke port modul.
Tip
Pemetaan port ini tidak diperlukan untuk komunikasi modul-ke-modul pada perangkat yang sama. Jika modul A perlu mengkueri API yang dihosting pada modul B, modul tersebut dapat melakukannya tanpa pemetaan port apa pun. Modul B perlu mengekspos port dalam dockerfile-nya, misalnya: EXPOSE 8080
. Kemudian modul A dapat meminta API menggunakan nama modul B, misalnya: http://ModuleB:8080/api
.
Pertama, pastikan bahwa port di dalam modul terkena untuk mendengarkan koneksi. Anda dapat melakukan ini menggunakan instruksi EXPOSE di dockerfile. Contohnya,EXPOSE 8080
. Instruksi ekspose default ke protokol TCP jika tidak ditentukan, atau Anda dapat menentukan UDP.
Kemudian, gunakan pengaturan PortBindings di grup HostConfig dari opsi buat kontainer Docker untuk memetakan port yang terbuka dalam modul ke port pada perangkat host. Misalnya, jika Anda mengekspos port 8080 di dalam modul dan ingin memetakannya ke port 80 perangkat host, opsi buat di file template.json akan terlihat seperti contoh berikut:
"createOptions": {
"HostConfig": {
"PortBindings": {
"8080/tcp": [
{
"HostPort": "80"
}
]
}
}
}
Setelah dirangkai untuk manifes penyebaran, konfigurasi yang sama akan terlihat seperti contoh berikut:
"createOptions": "{\"HostConfig\":{\"PortBindings\":{\"8080/tcp\":[{\"HostPort\":\"80\"}]}}}"
Membatasi memori modul dan penggunaan CPU
Anda dapat mendeklarasikan berapa banyak sumber daya host yang dapat digunakan modul. Kontrol ini berguna untuk memastikan bahwa satu modul tidak dapat mengkonsumsi terlalu banyak memori atau penggunaan CPU dan mencegah proses lain berjalan pada perangkat. Anda dapat mengelola pengaturan ini dengan opsi buat kontainer Docker di grup HostConfig, termasuk:
- Memori: Batas memori dalam byte. Misalnya, 268435456 byte = 256 MB.
- MemorySwap: Total batas memori (memori + swap). Misalnya, byte 536870912 = 512 MB.
- NanoCpus: Kuota CPU dalam satuan CPU 10-9 (1 miliar). Misalnya, 250000000 nanocpus = 0,25 CPU.
Dalam format template.json, nilai-nilai ini akan terlihat seperti contoh berikut:
"createOptions": {
"HostConfig": {
"Memory": 268435456,
"MemorySwap": 536870912,
"NanoCpus": 250000000
}
}
Setelah dirangkai untuk manifes penyebaran terakhir, nilai ini akan terlihat seperti contoh berikut:
"createOptions":"{\"HostConfig\":{\"Memory\":268435456,\"MemorySwap\":536870912,\"CpuPeriod\":25000}}"
GPU-mengoptimalkan modul IoT Edge
Jika Anda menjalankan modul IoT Edge pada komputer virtual yang dioptimalkan GPU, Anda juga dapat mengaktifkan modul IoT Edge untuk terhubung ke GPU Anda. Untuk melakukan ini dengan modul yang ada, tambahkan beberapa spesifikasi ke :createOptions
{"HostConfig": {"DeviceRequests": [{"Count": -1,"Capabilities": [["gpu"]]}]}}
Untuk mengonfirmasi pengaturan ini berhasil ditambahkan, gunakan perintah Inspeksi Docker untuk melihat pengaturan baru dalam cetakan JSON.
sudo docker inspect <YOUR-MODULE-NAME>
Untuk mempelajari selengkapnya tentang cara perangkat dan komputer virtual Anda terhubung ke GPU, lihat Mengonfigurasi, menyambungkan, dan memverifikasi modul IoT Edge untuk GPU.
Langkah berikutnya
Untuk contoh selengkapnya tentang opsi buat dalam tindakan, lihat sampel IoT Edge berikut ini: