
افزودن یک سرور خانگی دیگر معمولاً باید به معنای فضای بیشتر برای اجرای برنامهها باشد، اما در عمل بسیاری از کاربران را به سمت یادگیری Kubernetes و صرف وقت برای تنظیم ارتباط میان سرویسها سوق میدهد. Uncloud تلاش میکند این مسیر را سادهتر کند؛ این ابزار متنباز فایلهای Docker Compose موجود را میپذیرد و امکان استقرار سرویسها روی چند سرور را فراهم میکند.
استفاده از فایلهای Compose موجود
Uncloud بخش قابلتوجهی از مشخصات Compose را پشتیبانی میکند تا کاربران مجبور نباشند تنظیمات فعلی خود را از ابتدا بازنویسی کنند. کافی است ماشینهای لینوکسی را از طریق SSH اضافه کنید و فرمان uc deploy را در پوشهای که فایل Compose قرار دارد اجرا کنید. این ابزار با ایمیجهای کانتینری موجود کار میکند و بخش build را نیز برای برنامههایی که خودتان ساختهاید پشتیبانی میکند.
پیش از اعمال تغییرات، Uncloud یک برنامه استقرار (Deployment Plan) نمایش میدهد تا مشخص شود کدام کانتینرها و والیومها ایجاد یا تغییر میکنند و روی کدام ماشینها اجرا خواهند شد. برای برنامههای محلی نیز Uncloud از Unregistry استفاده میکند تا ایمیجها را مستقیماً به ماشینهای مقصد منتقل کند و تنها لایههایی را ارسال کند که از قبل وجود ندارند؛ بنابراین نیازی به راهاندازی و نگهداری یک رجیستری کانتینری جداگانه نیست.
شبکهسازی و توزیع سرویسها بین سرورها
Uncloud ماشینها را از طریق یک شبکه رمزنگاریشده WireGuard به هم متصل میکند و کشف سرویس (Service Discovery) را نیز مدیریت میکند. به این ترتیب کانتینرها میتوانند حتی هنگام اجرا روی سرورهای مختلف، با نام سرویس با یکدیگر ارتباط برقرار کنند. با فیلد x-machines میتوان تعیین کرد هر برنامه روی کدام ماشین اجرا شود؛ مثلاً سرور رسانه روی ماشینی بماند که به کتابخانه رسانه دسترسی دارد و برنامههای وب کوچکتر به سرور دیگری منتقل شوند.
این قابلیت هنگام استفاده از سختافزارهای متفاوت نیز کاربرد دارد؛ اگر برنامهای به GPU نیاز داشته باشد، میتوان آن را روی ماشینی اجرا کرد که واقعاً GPU دارد. برای برنامههایی که از چند نمونه (Replica) پشتیبانی میکنند، Uncloud امکان توزیع نمونهها روی ماشینهای مختلف و تقسیم ترافیک میان آنها را فراهم میکند. این ابزار یک پروکسی Caddy یکپارچه نیز دارد که مسیریابی و HTTPS خودکار را برای سرویسهای وب مدیریت میکند.
مدیریت سبکتر خوشه و محدودیتها
Uncloud جایگزینی برای Kubernetes، Docker Swarm، Nomad و Kamal معرفی شده است. این ابزار برخلاف Kubernetes کنترلپذیری گستردهای ارائه نمیدهد، اما نگهداری خوشه (Cluster) را نیز به یک وظیفه سنگین تبدیل نمیکند. ماشینها وضعیت خوشه را مستقیماً با هم به اشتراک میگذارند و نیازی به یک کنترلپلن مرکزی یا حدنصاب مدیران برای حفظ وضعیت خوشه نیست.
Uncloud از استقرار مرحلهای (Rolling Deployment) همراه با بررسی سلامت (Health Check) پشتیبانی میکند تا برنامههای مناسب هنگام روشنشدن کانتینرهای جدید همچنان به درخواستها پاسخ دهند. در صورت بروز مشکل، میتوان سرویسها را از طریق uc CLI بررسی کرد و لاگها را خواند یا با اتصال به ماشین از ابزارهای آشنای Docker استفاده کرد.
محدودیتهای مهم
- Uncloud تنها زیرمجموعهای از مشخصات Compose را پشتیبانی میکند و شبکههای سفارشی (Custom Networks) پشتیبانی نمیشوند.
- برای انتشار سرویسهای وب از طریق پروکسی یکپارچه، باید از افزونه x-ports استفاده کرد.
- نام سرویسها باید در کل خوشه یکتا باشد؛ بنابراین اگر چند استک سرویسی با نام db دارند، باید نام برخی را تغییر داد.
- ذخیرهسازی بهصورت خودکار بین سرورها به اشتراک گذاشته نمیشود. باید برنامه را روی ماشینی نگه داشت که دادههایش را دارد یا ذخیرهسازی اشتراکی را تنظیم کرد.
- Uncloud از گزینههایی مانند NFS و SMB از طریق درایور والیوم محلی Docker پشتیبانی میکند، اما پیکربندی ذخیرهسازی و پشتیبانگیری همچنان بر عهده کاربر است.
در صورت خرابی یک سرور، نمونههای سالم روی ماشینهای دیگر میتوانند به پاسخدهی ادامه دهند، اما Uncloud کانتینرهای ازدسترفته را بهطور خودکار روی ماشین دیگری بازسازی نمیکند و سرویسها را بر اساس تقاضا مقیاسپذیر نمیکند. در چنین شرایطی کاربر باید خودش زمان جایگزینی ماشین و استقرار مجدد را تعیین کند.
جمعبندی
Uncloud برای محیطهای خانگی مبتنی بر Docker Compose گزینهای عملی فراهم میکند تا سختافزار بلااستفاده به کار گرفته شود، بدون آنکه مدیریت خوشه به سرگرمی اصلی کاربر تبدیل شود. با این حال، پشتیبانی محدود از Compose، نبود شبکههای سفارشی و نیاز به مدیریت دستی ذخیرهسازی و بازسازی سرویسها از نکاتی است که باید پیش از استفاده در نظر گرفته شوند.