این مقاله به بررسی ادغام Kairos با پلتفرم edge AI و استفاده از K3s برای مدیریت لبه‌های محاسباتی می‌پردازد.


چالش‌ها و رویکردهای معماری با K3s


کلیدواژه‌های مهم: K3s، edge AI platform، device tree، upgrade controller، NVIDIA Jetson، Jetson Orin، edge platform، Aurea Imaging، CNCF Sandbox، NVIDIA CUDA.

به گزارش از وبسایت cncf سنجش از دور در کشاورزی به سیستم‌های پیچیده‌ای نیاز دارد که بتوانند با دوربین‌ها و دستگاه‌های خارجی مانند AI برای بهره‌گیری از GPS و یادگیری ماشین ارتباط برقرار کنند و داده‌ها را تا سطح دقیق درخت و محصول مدیریت کنند. شرکت نوپای هلندی Aurea Imaging در این حوزه با استفاده از دستگاه‌های تعبیه‌شده مجهز به GPU قدرتمند NVIDIA Jetson فعالیت می‌کند.

به‌جای انتخاب پشته سنتی تعبیه‌شده بر پایه C و ROS، تیم ما رویکردی cloud-native را در لبه دنبال کرد و از توزیع سبک‌وزن Kubernetes یعنی K3s روی دستگاه‌ها استفاده کرد. چون تیم با مفاهیم بومی ابری آشنا بود، اساساً همان ابزارهای cloud-native را به لبه آوردیم؛ تصمیمی که با توجه به رشد سریع هوش مصنوعی در لبه و کاربردهای گسترده IoT، منطقی به‌نظر می‌رسید.

چالش اصلی این بود که بردهای Jetson تمام پردازش‌های GPU را با اکوسیستم NVIDIA انجام می‌دهند و مدل‌های ML ما باید دائماً مطابق استانداردهای صنعتی به‌روز شوند. چگونه می‌توان ناوگانی از دستگاه‌ها را نه فقط در سطح برنامه بلکه در سطح میزبان — شامل JetPack، CUDA، میان‌افزارها، درایورها یا توزیع سیستم‌عامل — به‌روز نگه داشت؟

پاسخ را در KubeCon + CloudNativeCon و در پروژه Kairos، یک پروژه CNCF Sandbox، یافتیم. Kairos امکان تبدیل توزیع‌های لینوکس به سیستم‌عامل‌های تغییرناپذیر (immutable) را می‌دهد و عملیات روز دوم را ساده می‌کند؛ بنابراین برای به‌روزرسانی‌های سطح میزبان، حتی در موارد مخاطره‌آمیز مثل درایورها یا بوت‌لودرها، دیگر نیازی به حضور فیزیکی تکنسین‌ها نیست و می‌توان به‌روزرسانی‌ها را از راه دور و امن اعمال کرد 🚜🔒.

ارتقاء سرورها در فضای ابری آسان است، اما وقتی دستگاه‌ها روی تراکتورهایی در مزارعی با اتصال شبکه نامطمئن نصب شده‌اند، روش‌های سنتی ناکارآمد می‌شوند. به‌خصوص زمانی که داریم یک ناوگان جهانی از دستگاه‌های سنجش از دور را مدیریت می‌کنیم، بدون تکنسین‌های IT محلی و در حالی که اکوسیستم NVIDIA Jetson مرتباً در حال تغییر است؛ لذا پیش از استقرار به یک راه‌حل پایدار نیاز داشتیم.

یکی دیگر از دغدغه‌ها طول عمر بالای محصولات کشاورزی است که گاهی تا یک دهه است. حفظ کنترل روی نرم‌افزار کاربردی و سطح میزبان این امکان را می‌دهد که دستگاه‌ها بدون نیاز به تعویض فیزیکی برای سال‌ها به‌روز و قابل اعتماد بمانند. گزینه‌های مختلفی را بررسی کردیم: نگهداری کامل سیستم‌عامل خودمان که نیازمند تلاش توسعه‌ای زیاد بود، و راه‌حل‌های مبتنی بر Yocto مثل Balena که با نیازهای پشته ما همخوانی نداشتند. در یک کارگاه اجرای Kairos روی Raspberry Pi با اعضای جامعه Kairos آشنا شدیم و چالش‌ها را مطرح کردیم؛ یکی از موانع اصلی، پشتیبانی ناقص از برد Jetson Orin NX بود که در اوایل 2023 هنوز در فهرست دستگاه‌های پشتیبانی نبود. توسعه و فلش کردن این برد مستلزم کار عمیق با بوت‌لودرها، پارتیشن‌بندی، NVMe و device tree بود، اما با انجام PoC موفق توانستیم به پیشرفت‌هایی برسیم که بعدها به جامعه بازگردانده شد 🛠️.

از نتایج مستقیم استفاده از Kairos حذف «دانه‌های برف» (snowflakes) در ناوگان بود. پیش از Kairos با بسته‌های مختلف و گاهی درایورهای سخت‌افزاری ناسازگار روبه‌رو بودیم که عیب‌یابی را پیچیده می‌کرد. مفهوم immutable OS و کانتینری کردن برنامه‌ها با هم همخوانی دارند و PoC ما نشان داد که ناوگان می‌تواند قابل‌اعتماد و تقریباً بدون نیاز به نگهداری مداوم باشد. داشتن ناوگانی همگن و اجرای برنامه‌ها در کانتینرها، پس از آماده‌سازی ابتدایی دستگاه‌ها، انعطاف‌پذیری عملیاتی لازم برای عملیات روز دوم را فراهم می‌آورد.

روش تامین نیز ساده شد: دیگر نصب بسته‌ها روی هاست مرحله‌ای از فرآیند نیست؛ اکنون تصویر سیستم‌عامل از طریق CI ساخته و در رجیستری خصوصی منتشر می‌شود و دستگاه‌هایی که قبلاً با Kairos فلش شده‌اند، با استفاده از Cloud-init و پیکربندی K3s و گواهی‌های لازم، تصویر جدید را دریافت و ارتقا می‌دهند. خوشه‌های تک‌گره K3s ما از به‌روزرسانی‌ها مراقبت می‌کنند و با اپراتور Kairos (یا upgrade controller) می‌توان تصویر ارائه‌شده را اعمال کرد. دستگاه راه‌اندازی مجدد می‌شود و سیستم‌عامل جدید را اجرا می‌کند؛ در صورت بروز مشکل، مکانیزم A/B rollback از بریک شدن دستگاه‌هایی که صدها کیلومتر دور هستند جلوگیری می‌کند. به‌بیان دیگر، ما سیستم‌عامل را پَچ نمی‌کنیم، بلکه آن را با یک تصویر جدید جایگزین می‌کنیم — ارتقاهای اتمیک مطابق با رویکرد سیستم‌های immutable ✅.

نگهداری سیستم‌عامل با Kairos ساده است؛ ما از یک Dockerfile شامل همه بسته‌ها (عمومی یا سفارشی) برای فلش استفاده می‌کنیم که می‌تواند شامل باینری‌های NVIDIA CUDA، میان‌افزار مودم LTE یا فریمور دوربین‌ها باشد. اعمال به‌روزرسانی‌های میان‌افزاری به صورت ترکیبی و از راه دور روی کل ناوگان ممکن است، به‌شرطی که اتصال شبکه کافی وجود داشته باشد. همکاری با جامعه Kairos به ما کمک کرد پشتیبانی از پلتفرم Jetson Orin NX و خانواده دستگاه‌های مجهز به NVMe را اضافه کنیم و هم‌زمان از مزایای منبع باز بهره‌مند شویم: حل یک مشکل واقعی تولید و عرضه بهبودهایی که دیگران هم بتوانند روی آن بسازند 🌱.