كيفية تكوين خيارات إنشاء الحاوية لوحدات IoT Edge النمطية

ينطبق على:IoT Edge 1.4 checkmark IoT Edge 1.4

هام

IoT Edge 1.4 هو الإصدار المدعوم. إذا كنت تستخدم إصدارا سابقا، فشاهد تحديث IoT Edge.

تمكنك المعلمة createOptions في بيان النشر من تكوين حاويات الوحدة النمطية في وقت التشغيل. تقوم هذه المعلمة بتوسيع التحكم في الوحدات النمطية وتسمح بمهام مثل السماح أو تقييد وصول الوحدة النمطية إلى موارد الجهاز المضيف، أو تكوين الشبكات.

يتم تنفيذ وحدات IoT Edge كحاويات متوافقة مع Docker على جهاز IoT Edge. يقدم Docker العديد من الخيارات لإنشاء الحاويات، وتنطبق هذه الخيارات على وحدات IoT Edge أيضا. لمزيد من المعلومات، راجع خيارات إنشاء حاوية Docker.

تنسيق خيارات الإنشاء

يقبل بيان نشر IoT Edge خيارات الإنشاء المنسقة ك JSON. على سبيل المثال، خذ خيارات الإنشاء التي يتم تضمينها تلقائيا لكل وحدة edgeHub:

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

يستخدم مثال edgeHub هذا المعلمة HostConfig.PortBindings لتعيين المنافذ المكشوفة على الحاوية إلى منفذ على الجهاز المضيف.

إذا كنت تستخدم ملحق Azure IoT Edge ل Visual Studio أو Visual Studio Code، يمكنك كتابة خيارات الإنشاء بتنسيق JSON في ملف deployment.template.json . بعد ذلك، عند استخدام الملحق لإنشاء حل IoT Edge أو إنشاء بيان التوزيع، فإنه سيقوم بسلسلة JSON نيابة عنك بالتنسيق الذي يتوقعه وقت تشغيل IoT Edge. على سبيل المثال:

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

هام

ملحق Azure IoT Edge Visual Studio Code في وضع الصيانة. أداة iotedgedev هي الأداة الموصى بها لتطوير وحدات IoT Edge.

تلميح واحد لكتابة خيارات الإنشاء هو استخدام docker inspect الأمر . كجزء من عملية التطوير الخاصة بك، قم بتشغيل الوحدة النمطية محليا باستخدام docker run <container name>. بمجرد أن تعمل الوحدة بالطريقة التي تريدها، قم بتشغيل docker inspect <container name>. يقوم هذا الأمر إخراج تفاصيل الوحدة النمطية بتنسيق JSON. ابحث عن المعلمات التي قمت بتكوينها، وانسخ JSON. على سبيل المثال:

Screenshot of the results of the command docker inspect edgeHub.

السيناريوهات الشائعة

تتيح خيارات إنشاء الحاوية العديد من السيناريوهات، ولكن فيما يلي بعض السيناريوهات التي تظهر في معظم الأحيان عند إنشاء حلول IoT Edge:

تعيين منفذ المضيف إلى منفذ الوحدة

إذا كانت الوحدة النمطية الخاصة بك بحاجة إلى الاتصال بخدمة خارج حل IoT Edge، ولا تستخدم توجيه الرسائل للقيام بذلك، فأنت بحاجة إلى تعيين منفذ مضيف إلى منفذ وحدة نمطية.

تلميح

تعيين المنفذ هذا غير مطلوب للاتصال من وحدة إلى وحدة نمطية على نفس الجهاز. إذا كانت الوحدة A بحاجة إلى الاستعلام عن واجهة برمجة تطبيقات مستضافة على الوحدة النمطية B، فيمكنها القيام بذلك دون أي تعيين منفذ. تحتاج الوحدة B إلى عرض منفذ في dockerfile الخاص به، على سبيل المثال: EXPOSE 8080. ثم يمكن للوحدة النمطية A الاستعلام عن واجهة برمجة التطبيقات باستخدام اسم الوحدة النمطية B، على سبيل المثال: http://ModuleB:8080/api.

أولا، تأكد من تعرض منفذ داخل الوحدة النمطية للاستماع إلى الاتصالات. يمكنك القيام بذلك باستخدام إرشادات EXPOSE في dockerfile. على سبيل المثال، EXPOSE 8080 يتم عرض التعليمات افتراضيا لبروتوكول TCP إذا لم يتم تحديده، أو يمكنك تحديد UDP.

ثم استخدم إعداد PortBindings في مجموعة HostConfig لحاوية Docker لإنشاء خيارات لتعيين المنفذ المكشوف في الوحدة النمطية إلى منفذ على الجهاز المضيف. على سبيل المثال، إذا قمت بكشف المنفذ 8080 داخل الوحدة النمطية وتريد تعيين ذلك إلى المنفذ 80 للجهاز المضيف، فستبدو خيارات الإنشاء في ملف template.json مثل المثال التالي:

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

بمجرد إجراء سلسلة لبيان التوزيع، سيبدو نفس التكوين مثل المثال التالي:

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

تقييد ذاكرة الوحدة واستخدام المعالج

يمكنك الإعلان عن مقدار الموارد المضيفة التي يمكن أن تستخدمها الوحدة النمطية. عنصر التحكم هذا مفيد للتأكد من أن وحدة نمطية واحدة لا يمكنها استهلاك الكثير من الذاكرة أو استخدام وحدة المعالجة المركزية ومنع العمليات الأخرى من العمل على الجهاز. يمكنك إدارة هذه الإعدادات باستخدام خيارات إنشاء حاوية Docker في مجموعة HostConfig، بما في ذلك:

  • الذاكرة: حد الذاكرة بالبايت. على سبيل المثال، 268435456 بايت = 256 ميغابايت.
  • MemorySwap: إجمالي حد الذاكرة (الذاكرة + التبديل). على سبيل المثال، 536870912 بايت = 512 ميغابايت.
  • NanoCpus: حصة وحدة المعالجة المركزية في وحدات من 10-9 (مليار) وحدة معالجة مركزية. على سبيل المثال، 250000000 nanocpus = 0.25 CPU.

في تنسيق template.json، ستبدو هذه القيم مثل المثال التالي:

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

بمجرد تكوين سلسلة لبيان التوزيع النهائي، ستبدو هذه القيم مثل المثال التالي:

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

تحسين وحدة GPU لوحدة IoT Edge

إذا كنت تقوم بتشغيل وحدة IoT Edge على جهاز ظاهري محسن لوحدة معالجة الرسومات، يمكنك تمكين وحدة IoT Edge للاتصال ب GPU الخاص بك أيضا. للقيام بذلك باستخدام وحدة نمطية موجودة، أضف بعض المواصفات إلى createOptions:

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

لتأكيد إضافة هذه الإعدادات بنجاح، استخدم الأمر Docker inspect لمشاهدة الإعداد الجديد في نسخة JSON المطبوعة.

sudo docker inspect <YOUR-MODULE-NAME>

لمعرفة المزيد حول كيفية اتصال جهازك وجهازك الظاهري بوحدة معالجة الرسومات، راجع تكوين وحدة IoT Edge النمطية ل GPU والاتصال بها والتحقق منها.

الخطوات التالية

لمزيد من الأمثلة على خيارات الإنشاء أثناء العمل، راجع نماذج IoT Edge التالية: