منح وحدات Azure IoT Edge إمكانية الوصول إلى التخزين المحلي للجهاز
ينطبق على: IoT Edge 1.5 IoT Edge 1.4
هام
IoT Edge 1.5 LTS وIoT Edge 1.4 LTS هي إصدارات مدعومة. IoT Edge 1.4 LTS هو نهاية العمر الافتراضي في 12 نوفمبر 2024. إذا كنت تستخدم إصدارا سابقا، فشاهد تحديث IoT Edge.
يمكن لوحدات IoT Edge استخدام التخزين على جهاز IoT Edge المضيف نفسه لتحسين الموثوقية، خاصة عند العمل دون اتصال.
تكوين وحدات النظام لاستخدام التخزين المستمر
بشكل افتراضي، تقوم وحدات نظام IoT Edge وعامل IoT Edge ومركز IoT Edge بتخزين الحالة في نظام الملفات المؤقت لمثيل الحاوية الخاص بهم. يتم فقدان هذه الحالة عند إعادة تدوير مثيل الحاوية، على سبيل المثال، عند تحديث إصدار صورة الوحدة النمطية أو createOptions.
بالنسبة لسيناريوهات الإنتاج، استخدم موقع تخزين دائم على نظام ملفات المضيف لتخزين حالة وحدة النظام. يؤدي القيام بذلك إلى تحسين قوة الحل وضمانات تسليم الرسائل السحابية.
لإعداد وحدات النظام لاستخدام التخزين المستمر:
لكل من مركز IoT Edge وعامل IoT Edge، أضف متغير بيئة يسمى StorageFolder يشير إلى دليل في الوحدة النمطية.
لكل من مركز IoT Edge وعامل IoT Edge، قم بإضافة ربط لتوصيل دليل محلي على الجهاز المضيف إلى دليل في الوحدة النمطية. على سبيل المثال:
استبدل
<HostStoragePath>
و<ModuleStoragePath>
بمسار تخزين المضيف والوحدة النمطية. يجب أن تكون كلتا القيمتين مسارا مطلقا ويجب أن تكونا موجودتين<HostStoragePath>
.
يمكنك تكوين التخزين المحلي مباشرة في بيان النشر. على سبيل المثال، إذا كنت تريد تعيين مسارات التخزين التالية:
الوحدة النمطية | مسار تخزين المضيف | مسار تخزين الوحدة النمطية |
---|---|---|
edgeAgent | /srv/edgeAgent | /tmp/edgeAgent |
edgeHub | /srv/edgeHub | /tmp/edgeHub |
سيكون بيان التوزيع مشابها لما يلي:
"systemModules": {
"edgeAgent": {
"env": {
"StorageFolder": {
"value": "/tmp/edgeAgent"
}
},
"settings": {
"image": "mcr.microsoft.com/azureiotedge-agent:1.5",
"createOptions": "{\"HostConfig\":{\"Binds\":[\"/srv/edgeAgent:/tmp/edgeAgent\"]}}"
},
"type": "docker"
},
"edgeHub": {
"env": {
"StorageFolder": {
"value": "/tmp/edgeHub"
}
},
"restartPolicy": "always",
"settings": {
"image": "mcr.microsoft.com/azureiotedge-hub:1.5",
"createOptions": "{\"HostConfig\":{\"Binds\":[\"/srv/edgeHub:/tmp/edgeHub\"],\"PortBindings\":{\"443/tcp\":[{\"HostPort\":\"443\"}],\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}]}}}"
},
"status": "running",
"type": "docker"
}
}
إشعار
إذا كنت تستخدم تثبيتا انطباقا، فتأكد من اختيار مسار تخزين مضيف يمكن الوصول إليه من خلال المحاذاة. على سبيل المثال، $HOME/snap/azure-iot-edge/current/modules/
إدارة أذونات نظام المضيف التلقائي
في الإصدار 1.4 والأحدث، ليست هناك حاجة لإعداد الملكية أو الأذونات يدويا لتخزين المضيف الذي StorageFolder
يدعم . تتم إدارة الأذونات والملكية تلقائيا بواسطة وحدات النظام أثناء بدء التشغيل.
إشعار
تنطبق إدارة الأذونات التلقائية للتخزين المرتبط بالمضيف فقط على وحدات النظام وعامل IoT Edge ومركز Edge. بالنسبة للوحدات النمطية المخصصة، يلزم الإدارة اليدوية للأذونات وملكية التخزين المضيف المرتبط إذا لم يتم تشغيل حاوية الوحدة النمطية المخصصة كمستخدم root
.
ربط تخزين الوحدة النمطية إلى تخزين الجهاز للوحدات النمطية المخصصة
إذا كانت الوحدة النمطية المخصصة تتطلب الوصول إلى التخزين المستمر على نظام الملفات المضيف، فاستخدم خيارات إنشاء الوحدة النمطية لربط مجلد تخزين في حاوية الوحدة النمطية بمجلد على الجهاز المضيف. على سبيل المثال:
{
"HostConfig": {
"Mounts": [
{
"Target": "<ModuleStoragePath>",
"Source": "<HostStoragePath>",
"Type": "bind",
"ReadOnly": false
}
]
}
}
قم باستبدال <HostStoragePath>
و<ModuleStoragePath>
مع مسار تخزين المضيف والوحدة النمطية؛ يجب أن يكون لكلا القيمتين مسارا مطلقا. راجع مواصفات Docker Engine Mount للحصول على تفاصيل الخيار.
أذونات نظام المضيف
تأكد من أن ملف تعريف المستخدم الذي تستخدمه الوحدة النمطية لديه أذونات القراءة والكتابة والتنفيذ المطلوبة لدليل النظام المضيف. بشكل افتراضي، يتم تشغيل الحاويات كمستخدم root
لديه بالفعل الأذونات المطلوبة. ولكن قد يحدد Dockerfile الخاص بالوحدة النمطية استخدام مستخدم غير جذر في هذه الحالة يجب تكوين أذونات تخزين المضيف يدويا.
هناك عدة طرق لإدارة أذونات الدليل على أنظمة Linux، بما في ذلك استخدام chown
لتغيير مالك الدليل ثم chmod
تغيير الأذونات. على سبيل المثال للسماح بوصول تخزين المضيف إلى وحدة نمطية تعمل كمعرف مستخدم غير جذر 1000، استخدم الأوامر التالية:
sudo chown 1000 <HostStoragePath>
sudo chmod 700 <HostStoragePath>
البيانات المشفرة في تخزين الوحدة النمطية
عندما تستدعي الوحدات النمطية واجهة برمجة تطبيقات حمل العمل الخفي ل IoT Edge لتشفير البيانات، يتم اشتقاق مفتاح التشفير باستخدام معرف الوحدة ومعرف إنشاء الوحدة النمطية. يتم استخدام معرف الجيل لحماية الأسرار إذا تمت إزالة وحدة نمطية من النشر ثم يتم نشر وحدة نمطية أخرى بنفس معرف الوحدة النمطية لاحقا على نفس الجهاز. يمكنك عرض معرف جيل الوحدة النمطية باستخدام الأمر Azure CLI az iot hub module-identity show.
إذا كنت ترغب في مشاركة الملفات بين الوحدات النمطية عبر الأجيال، يجب ألا تحتوي على أي أسرار وإلا سيفشل فك تشفيرها.
الخطوات التالية
للحصول على مثال إضافي للوصول إلى تخزين المضيف من وحدة نمطية، راجع تخزين البيانات على الحافة باستخدام Azure Blob Storage على IoT Edge.