ارکستریشن چیست؟ آشنایی با کاربردها و عملکرد Container Orchestration
ارکستریشن (Orchestration) راهکاری برای خودکارسازی فرایندهای عملیاتی مورد نیاز برای اجرای کانتینرها و سرویسهای مبتنی بر کانتینر است. ارکستریشن، بخش قابل توجهی از وظایف تیم توسعه نرمافزار برای مدیریت چرخه عمر کانتینر را بهشکل خودکار انجام میدهد که بین آنها میتوان به آمادهسازی، استقرار، تغییر مقیاس، پیکربندی شبکه، تخصیص منابع و لود بالانسینگ اشاره کرد. در این مقاله میخواهیم بدانیم ارکستریشن چیست، چگونه کار میکند و چه مزایا و چالشهایی دارد.
ارکستریشن چیست؟
در زمانی نهچندان دور، بسیاری از بخشهای فرایند عرضه اپلیکیشنها بهشکل دستی انجام میشد. چرخه کار شامل کامپایل کردن کد، تحویل آن به سرور و پیکربندی تمام اجزا و فناوریهای مربوط به آن روی سرور (از جمله تنظیمات سختافزاری مانند پردازنده اصلی، حافظه رم، فضای ذخیرهسازی، تنظیمات شبکه و غیره) فرایندی پیچیده و خطاپذیر بود. در کنار پیکربندی زیرساخت، تغییر مقیاس نیز بهشکل دستی صورت میگرفت و تکرار این فرایند روی چند سرور نیز زمان زیادی را از تیم زیرساخت هدر میداد.
ابزارهای خودکارسازی (Automation) و پلتفرمهای مدیریت پیکربندی توانستند بخشی از این وظایف را سادهتر کنند اما هنوز با مشکل تکرار پیکربندی زیرساخت روی سرورهای مختلف روبرو بودیم. با بلوغ فناوریهای این حوزه، راهکارهای کانتینرسازی مانند داکر پدید آمدند تا بهسرعت بتوان اپلیکیشن را اجرا کرده و مدیریت بسیاری از اجزای زیرساختی را بهشکل سادهتری انجام داد. سازمانها با استفاده از راهکارهای کانتینرسازی توانستند تحویل اپلیکیشنها را سرعت ببخشند اما باز هم برای خودکارسازی سرویس کانتینر با چالش مواجه بودند. برای پاسخ به این چالش، پلتفرمهای ارکستریشن کانتینر عرضه شدند تا نهتنها اجرای کانتینرها، بلکه مدیریت آنها در زمان اجرا و مسائل مربوط به خودکارسازی و تغییر مقیاس را به شیوهای مدرن حل کنند.
ارکستریشن (Orchestration) کانتینر بهمعنای خودکارسازی انواع فرایندها برای اجرای کانتینرهاست. پرکاربردترین پلتفرم ارکستریشن کانتینر در دنیای کلاد، کوبرنتیز (Kubernetes) است اما پلتفرمهایی مانند آپاچی مزوس (Apache Mesos) و داکر سوارم (Docker Swarm) نیز راهکارهای خود را برای ارکستریشن ارائه کردهاند. سرویسهای پلتفرم کلاد عمومی مانند مایکروسافت اژور کانتینر سرویس (Microsoft Azure Container Service) و آمازون الاستیک کانتینر سرویس (Amazon Elastic Container Service) نیز راهکارهای متفاوتی برای پیادهسازی ارکستریشن هستند.
هنگام صحبت در مورد Orchestration معمولا به تجربه «اجرای اپلیکیشن» بیشتر توجه میشود اما یکی از مهمترین مزایای ارکستریشن کانتینر، خودکارسازی وابستگیهایی است که به زمان اجرا مربوط میشود. از میان این وابستگیها میتوان به موارد زیر اشاره کرد:
- پیکربندی شبکه و DNS
- تخصیص منابع (فضای ذخیرهسازی، پردازنده و حافظه رم)
- مدیریت نسخههای تکراری (اجرای چندین نسخه برای کاهش احتمال خطا)
در محیطهایی که کانتینر هنوز نقش چندانی ندارد، تمامی این وظایف بر اساس همکاری بین چند تیم فنی انجام میشوند. پلتفرمهای Orchestration بار این وظایف تکراری و قابل پیشبینی را از دوش مهندسین و نیروهای فنی زیرساخت برمیدارند. در کنار وابستگیهای فوق، Orchestration میتواند در ساخت مجدد، تغییر مقیاس و ارتقاء اپلیکیشنها (یا کانتینرها) نیز به کمک تیم شما بیاید.
سهولت استفاده از کانتینرها باعث شده تا بسیاری از سازمانها به استفاده از آنها روی بیاورند. از نظر فرایند اجرایی، ساخت و اجرای کانتینر بسیار ساده است و استفاده از Orchestration، هزینه زمانی مدیریت آنها را بهمراتب کاهش میدهد. فرایند ارکستریشن کانتینر زمانی ارزشمندتر میشود که تیمها از معماری مایکروسرویس (Microservice Architecture) برای ساخت پلتفرمهای اپلیکیشن خود استفاده کنند. حتی اپلیکیشنهای کوچک نیز ممکن است از چندین کانتینر تشکیل شده باشند. بنابراین پلتفرمهای ارکستریشن کانتینر با مدیریت چرخه عمر کانتینرها، کارهای تکراری را بر عهده گرفته و بهشکل هوشمندانه این فرایند را انجام میدهند. اگر با مفهوم مایکروسرویس آشنایی ندارید به طور خلاصه باید بگوییم که معماری مایکروسرویس راهکاری برای تقسیمبندی یک اپلیکیشن به بخشها یا سرویسهای کوچکتر و سبکتر و البته مستقل از هم است که قابل مدیریت هستند.
تاریخچه ارکستریشن چیست؟
Orchestration بهشکل امروزی سابقه زیادی ندارد. از سالها قبل کانتینرهای لینوکس در دسترس همه بودند اما کانتینری کردن اپلیکیشنها در سال ۲۰۱۳ میلادی به راهکاری عمومی و پرطرفدار تبدیل شد. دو راهکار اصلی ارکستریشن یعنی کوبرنتیز و داکر سوارم (Docker Swarm) نیز در سال ۲۰۱۴ معرفی شدند. با عرضه همزمان این دو ابزار ارکستریشن، جامعه کاربران فناوری کانتینرها باید تصمیم میگرفت که کدامیک را بهعنوان استاندارد این حوزه انتخاب کند. با نگاهی به وضعیت بازار میتوان فهمید که انتخاب اصلی کاربران، کوبرنتیز بوده و عمده شرکتها این ابزار را بهعنوان راهکار اصلی Orchestration برگزیدهاند.
حتی قبل از جا افتادن کانتینرها، مهندسین نرمافزار از ابزار DC/OS ساخت شرکت D2iQ برای ارکستریشن اپلیکیشنهای خود استفاده میکردند. با این حال این شرکت در سال ۲۰۱۵ پلتفرم خود را کنار گذاشت و بهطور کامل به کوبرنتیز روی آورد تا جایگاه این ابزار در حوزه کلاد بیش از پیش محکم شود. مهندسین گوگل در سال ۲۰۱۴ پلتفرم کوبرنتیز را طراحی کرده و یک سال بعد آن را در اختیار همگان قرار دادند. در سال ۲۰۱۸ دو شرکت بزرگ دیگر یعنی آمازون و مایکروسافت نیز راهکار کوبرنتیز خود را به نام الاستیک کوبرنتیز سرویس (EKS) و اژور کوبرنتیز سرویس (AKS) معرفی کردند. البته داکر سوارم همچنان بهعنوان ابزار Orchestration استفاده میشود اما کوبرنتیز انتخاب اول اکثر سازمانها و بهخصوص سازمانهای بزرگ است.
بیشتر بخوانید: کوبرنتیز چیست؟
کاربرد ارکستریشن چیست؟
تا اینجا احتمالا با کاربرد اصلی ارکستریشن کانتینر آشنا شدهاید، اما با نگاه دقیقتر به این راهکار میتوانیم کاربردهای زیر را برای آن مطرح کنیم:
- آمادهسازی و استقرار
- پیکربندی و زمانبندی
- تخصیص منابع
- دسترسپذیر کردن کانتینر
- تغییر مقیاس یا حذف کانتینرها بهمنظور ایجاد توازن بین بخشهای مختلف زیرساخت
- لود بالانسینگ و مسیردهی به ترافیک
- پایش سلامت کانتینر
- پیکربندی اپلیکیشنها بر اساس کانتینری که در آن اجرا میشوند
- حفظ امنیت در زمان تعامل و ارتباط بین کانتینرها
ارکستریشن چطور کار میکند؟
هنگام استفاده از ابزار Orchestration مانند کوبرنتیز، باید پیکربندی اپلیکیشن را از طریق فایلی با فرمت یمل (YAML) یا جیسون (JSON) تعریف کنید. فایل پیکربندی به ابزار مدیریت پیکربندی کمک میکند تا محل ایمیجهای کانتینر، نحوه برقراری ارتباط شبکه و نحوه ذخیرهسازی لاگها را درک کند. هنگام استقرار یک کانتینر جدید، ابزار Orchestration بهشکل خودکار عملیات استقرار روی یک کلاستر را زمانبندی کرده و محدودیتها و شرایط تعریف شده را روی آن اعمال میکند. پس از این کار، چرخه عمر کانتینر بر اساس اطلاعات تعریف شده توسط شما مدیریت میشود.
ابزارهای Orchestration معمولا از چند بخش تشکیل شدهاند که مهمترین آنها کلاستر، صفحه کنترل و نودهای ورکر هستند. در ادامه با این سه بخش بیشتر آشنا میشویم.
کلاستر در ارکستریشن چیست؟
کلاستر (cluster) شامل صفحه کنترل و یک یا چند کامپیوتر یا نود (node) است. نودها را میتوان به چند دسته تقسیم کرد که به هرکدام از این بخشها استخر نود (node pool) میگویند. استخر میتواند تعداد زیادی نود داشته باشد اما تمام آنها پیکربندی یکسانی خواهند داشت. هر استخر شامل حداقل دو نود است که یکی از آنها نود مستر (master node) و دیگری نود ورکر (worker node) نامیده میشود و هرکدام اجزای متفاوتی دارند.
صفحه کنترل
صفحه کنترل (control plane) از چند بخش تشکیل شده که بخشهای مختلف یک کلاستر را کنترل میکنند. بهعنوان مثال صفحه کنترل کوبرنتیز از چهار بخش تشکیل شده که یکی از آنها سرور API است. سرور API امکان ارتباط بین اجزای مختلف این پلتفرم و همچنین ارتباط بین کاربر و ابزار را فراهم میکند. دیگر بخش صفحه کنترل، اسکجولر (scheduler) است که زمانبندی و تخصیص کانتینرها به نودها را انجام میدهد. بخش بعدی کنترلر منیجر (controller manager) است که کنترلرهای مختلف داخل ابزار را مدیریت میکند. نهایتا بخش etcd وظیفه ذخیرهسازی پیکربندیها و وضعیت کلاستر را بر عهده دارد.
نودهای ورکر
ابزار ارکستریش از تعدادی نود ورکر (worker node) تشکیل شده که اپلیکیشنهای شما را اجرا میکنند. در کلاسترهای ساده با منابع محدود، صفحه کنترل و نود ورکر روی یک دستگاه فیزیکی قرار میگیرند اما در اکثر اوقات، صفحه کنترل روی نود اصلی قرار میگیرد و اپلیکیشنها روی نودهای ورکر اجرا میشوند. نودها معمولا دو بخش اساسی دارند تا بتوانند عملکرد درستی داشته باشند. اولین بخش، رانتایم کانتینر (container runtime) است. ابزارهای ارکستریشن از رانتایمهای مختلفی استفاده میکنند اما کوبرنتیز بهطور پیشفرض از رانتایم کانتینرد (containerd) بهره میگیرد. بخش دوم در نود ورکر، ابزار ارتباطی با صفحه کنترل است تا در صورت نیاز بتواند کانتینر جدیدی را اجرا کرده یا کانتینر در حال اجرا را متوقف کند. این ابزار در کوبرنیز، کوبلت (kubelet) نام دارد.
مزایای ارکستریشن چیست؟
تا اینجای مطلب «ارکستریشن چیست» با کاربردهای این ابزار مهم در دنیای کلاد آشنا شدهاید. سادهترین مزیت Orchestration، مدیریت کانتینرهای نیمه خراب یا خراب است. ابزار ارکستریشن وضعیت سلامت کانتینرها را بهشکل دورهای ارزیابی میکند و در صورت مواجهه با وضعیت غیرعادی معمولا کانتینر خراب را حذف کرده و نمونه جدیدی از آن را به اجرا درمیآورد.
دیگر مزیت Orchestration، پشتیبانی از اجرای نمونههای متعدد از یک اپلیکیشن است. این کار با هدف لود بالانسینگ (تقسیم بار) یا ایجاد افزونگی (redundancy) انجام میگیرد. ابزار Orchestration تعداد کانتینرهای در حال اجرا را چک کرده و در صورتی که از تعداد مشخص شده کمتر باشند، نمونههای جدیدی از کانتینرها را اجرا میکند.
حتی در شرایطی که همهچیز به درستی کار میکند، Orchestration باز هم مفید است. این ابزار میتواند چند کانتینر را بهشکل پشتیبان اجرا کند تا در صورت خرابی هرکدام از کانتینرها، درخواست کاربران به سمت کانتینرهای پشتیبان هدایت شود. مدیریت ساده شبکه نیز یکی دیگر از مزایای ارکستریشن محسوب میشود، چون بهسادگی میتوانید شبکههای سفارشی را داخل ابزار ارکستریشن تعریف کنید. هرکدام از سرویسها با یک نام هاست (hostname) تعریف میشوند و نیازی به استفاده از آدرس IP ندارید.
چالشهای ارکستریشن چیست؟
در کنار مزایای متعدد، Orchestration چالشهایی نیز دارد که مهمترین آنها نیاز به دانش فنی و تخصص بالاست. ابزاری مثل کوبرنتیز چهار سطح مختلف از دورهها و مدارک تخصصی دارد و دریافت آنها یکی از دشوارترین کارها در حوزه کلاد محسوب میشود. متخصصینی که این مدارک را دریافت کردهاند، حقوق و مزایای زیادی را نیز طلب میکنند. بنابراین در صورت استفاده از کوبرنتیز باید مهندسین جدیدی را برای زیرساخت آیتی سازمان خود استخدام کنید یا به طور کامل این حوزه را به سرویسهای مدیریتشده شرکت ارائهدهنده خدمات کلاد بسپارید. اگر سازمان شما در حوزه مایکروسرویسها فعالیت میکند، احتمالا مجبور به چنین کاری هستید چون در چنین شرایطی، اپلیکیشنهای متعددی باید بهشکل همزمان و در بهینهترین حالت ممکن اجرا شوند و مدیریت این سرویسها بهشکل جداگانه و دستی کار بسیار دشواری است.
در حالت کلی میتوان چالشهای زیر را برای Orchestration برشمرد:
- افزایش پیچیدگی زیرساخت برای سازمانهایی که سرویسهای معدودی ارائه میکنند
- دشواری مهاجرت سرویسها و اپلیکیشنها به ابزار ارکستریشن
- افزایش هزینه نیروی انسانی و منابع مورد نیاز برای اجرای ارکستریشن
محبوبترین ابزارهای ارکستریشن کداماند؟
در ادامه مطلب «ارکستریشن چیست» به محبوبترین ابزارهای Orchestration میپردازیم. با محبوبیت کانتینرها و ابزارهای ارکستریشن، شرکتها و سازمانها در ابعاد مختلف به استفاده از این راهکارها برای ارائه اپلیکیشنها و خدمات خود روی میآورند و پیشبینی میشود ارزش بازار Orchestration تا سال ۲۰۲۵ میلادی به حدود ۵.۳ میلیارد دلار برسد. تا به امروز ابزارهای مختلفی برای Orchestration ارائه شدهاند که بین آنها کوبرنتیز بیشترین سهم از بازار را در اختیار دارد. در ادامه فهرست چهار ابزار اصلی ارکستریشن و سهم بازار تقریبی هرکدام از آنها در سال ۲۰۲۲ میلادی را میبینید:
- کوبرنتیز (Kubernetes) حدود ۵۰ درصد
- داکر سوارم (Docker Swarm) حدود ۲۰ درصد
- آپاچی مزوس (Apache Mesos) حدود ۱۰ درصد
- اپنشیفت (OpenShift) حدود ۵ درصد
از آنجا که بیشترین سهم از این بازار در اختیار کوبرنتیز و داکر سوارم قرار دارد، بیایید مقایسه کوتاهی بین این دو پلتفرم انجام دهیم.
تفاوت کوبرنتیز با داکر سوارم؛ کدام ابزار ارکستریشن گزینه بهتری است؟
تفاوت اصلی کوبرنتیز و داکر سوارم به سطح پیچیدگی آنها برمیگردد. کوبرنتیز برای کاربردهای پیچیده طراحی شده اما در طراحی داکر سوارم به استفاده آسان برای کاربردهای ساده توجه شده است. تفاوتهای بین این دو پلتفرم را در ادامه میبینید.
نصب و راهاندازی
نصب دستی کوبرنتیز بسته به سیستمعامل مورد استفاده شما تفاوت میکند. البته اگر سرویس Orchestration را از ارائهدهنده سرویس ابری تهیه کردهاید، نیازی به نصب کوبرنتیز ندارید. در مقابل، نمونههای داکر روی انواع سیستمعامل تفاوت چندانی با یکدیگر ندارند و بهسادگی قابل نصب و اجرا هستند.
لود بالانسینگ
داکر سوارم بهطور پیشفرض به قابلیت لود بالانسینگ خودکار مجهز شده اما کوبرنتیز از چنین قابلیتی بیبهره است. با این حال میتوانید از ابزارهای ثالث برای لود بالانسینگ در کوبرنتیز استفاده کنید.
مانیتورینگ
کوبرنتیز ابزارهایی برای مانیتورینگ در اختیار شما میگذارد و ابزارهای ثالث نیز برای این کار وجود دارند، اما داکر سوارم فاقد مکانیسمها و ابزارهای داخلی برای مانیتورینگ است. البته میتوانید ابزارهای ثالث را برای مانیتورینگ به داکر اضافه کنید.
مقیاسپذیری
کوبرنتیز بر اساس ترافیک دریافتی اقدام به تغییر مقیاس میکند و از قابلیت تغییر مقیاس خودکار بهره میبرد. تغییر مقیاس در کوبرنتیز شامل ساخت مجموعه کانتینرهای جدید و تخصیص آنها به نودهای ورکر است. داکر سوارم امکان تغییر مقیاس خودکار با سرعت بالا را ممکن میسازد و بهخاطر استقرار سریع کانتینرها، تغییر مقیاس را سریعتر از کوبرنتیز انجام میدهد.
بیشتر بخوانید: مقایسه داکر سوارم و کوبرنتیز با جزئیات بیشتر
جمعبندی
طی سالهای گذشته کوبرنتیز فقط در فرایند تولید اپلیکیشنها و سرویسها استفاده میشد اما مدتیست که به فرایند توسعه نیز راه یافته است. در حال حاضر بسیاری از تیمهای توسعه از راهکارهای محلی کوبرنتیز برای تست اپلیکیشنها در زمان توسعه استفاده میکنند. ابزارهایی مانند مینیکوب (minikube) و اسکفولد (Skaffold) بهطور ویژه برای تسهیل فرایند توسعه و تست اپلیکیشنها طراحی شدهاند. این موارد نشان میدهند که Orchestration به یکی از اجزای اصلی زیرساخت کلاد در دنیای مدرن بدل شده و سازمانهای زیادی در ابعاد مختلف از این ابزارها بهره میگیرند.