زمان بندی و هماهنگی (Orchestration) در اکوسیستم داکر – راهنمای جامع
ابزار داکر (Docker) همه کارکردهای مورد نیاز برای ساخت، آپلود، دانلود، آغاز و توقف کانتینرها را ارائه کرده است. این کارکردها شامل زمانبندی و هماهنگی (Orchestration) کانتینرها هستند. این اکوسیستم برای مدیریت همه این پردازشها در محیطهای تک میزبانی با چند کانتینر محدود مناسب است.
با این وجود، بسیاری از کاربران داکر از این پلتفرم به عنوان ابزاری برای مقیاسپذیری آسان تعداد بالایی از کانتینرها روی میزبانهای مختلف استفاده میکنند. داکر کلاستر شده، چالشهای مدیریتی خاصی را پدید میآورد که نیازمند مجموعه ابزارهای متفاوتی است.
در این راهنما، به بررسی ابزارهای زمانبندی و هماهنگی داکر میپردازیم. این ابزارها رابط مدیریت اولیه کانتینر را برای مدیران انتشارهای توزیع یافته فراهم میسازند.
زمانبندی کانتینرها، هماهنگی و مدیریت کلاستر
هنگامی که اپلیکیشنها روی چند سیستم میزبانی مقیاس مییابند، توانایی مدیریت هر سیستمِ میزبان و انتزاع پیچیدگی پلتفرم زیربنایی، گزینهای جذاب به نظر میرسد. هماهنگی (Orchestration) اصطلاحی کلی است که به زمانبندی کانتینر، مدیریت کلاستر و احتمالاً تدارک میزبانهای بیشتر اشاره دارد. در این محیط، منظور از زمانبندی (scheduling) توانایی یک مدیر برای بارگذاری یک فایل سرویس روی یک سیستم میزبان و تعیین شیوه اجرای کانتینر خاص است. با این که زمانبندی به عمل خاص بارگذاری تعریف سرویس اشاره دارد؛ اما در یک معنای کلیتر ابزارهای زمانبندی مسئول قلاب شدن به سیستم init میزبان و مدیریت سرویسها در هر ظرفیتی که لازم باشد هستند.
مدیریت کلاستر به فرایند کنترل کردن گروهی از میزبانها گفته میشود. این مدیریت میتواند شامل افزودن و حذف میزبانها از یک کلاستر، دریافت اطلاعات در مورد وضعیت کنونی میزبانها و کانتینرها، و آغاز یا توقف پردازشها باشند. مدیریت کلاستر ارتباط نزدیکی با زمانبندی دارد، زیرا ابزارهای زمانبندی باید به همه میزبانها در کلاستر دسترسی داشته باشند تا بتوانند سرویسها را زمانبندی کنند. به این منظور در اغلب موارد از ابزار یکسانی استفاده میشود.
برای اجرا و مدیریت کانتینرها روی میزبانهای داخل کلاستر، ابزار زمانبندی باید با سیستم init هر میزبان تعامل داشته باشد. به طور همزمان برای سهولت مدیریت، ابزار زمانبندی، دیدی یکتا از وضعیت سرویسها در سراسر کلاستر ارائه میکند. این وضعیت منجر به کارکردی مانند سیستم init در گستره کلاستر میشود. به همین دلیل بسیاری از ابزارهای زمانبندی از ساختار دستور سیستم init که از آن تجرید یافتهاند، بهره میگیرند.
یکی از بزرگترین مسئولیتهای ابزار زمانبندی، انتخاب میزبان است. اگر یک مدیر تصمیم بگیرد که یک سرویس (کانتینر) را روی یک کلاستر اجرا کند، ابزار زمانبندی در اغلب موارد مسئول انتخاب خودکار یک میزبان میشود. مدیر میتواند به طور اختصاصی بر اساس نیازها یا علاقهمندی، کانتینرهایی را به ابزار زمانبندی پیشنهاد کند؛ اما ابزار زمانبندی در نهایت مسئول اجرای این الزامات خواهد بود.
یک ابزار زمانبندی، تصمیمهای زمانبندی را چگونه اتخاذ میکند؟
ابزارهای زمانبندی در اغلب موارد از یک سیاست زمانبندی پیشفرض بهره میجویند. این سیاست تعیین میکند که در صورت عدم ارائه اطلاعاتی از سوی مدیر ابزار زمانبندی چگونه باید به زمانبندی سرویسها بپردازد. برای نمونه یک ابزار زمانبندی باید جایی برای قرار دادن سرویسهای جدید روی میزبانهایی که هماینک سرویسهای فعالی دارند تعیین نماید.
ابزارهای زمانبندی معمولاً از سازوکار override استفاده میکنند که مدیران سیستم میتوانند از آن برای تنظیم دقیق فرایندهای انتخاب جهت رفع الزامات خاص بهره بگیرند. برای مثال، اگر دو کانتینر به دلیل این که یک واحد هستند، همواره روی میزبان یکسانی اجرا میشوند، این اتحاد را میتوان در اغلب موارد در طی زمانبندی اعلان کرد. به طور مشابه اگر دو کانتینر نمیبایست روی میزبان واحدی قرار بگیرند، (برای مثال به دلیل تضمین بحث high availability برای دو وهله از سرویس یکسان) این مسئله را نیز میتوان در طی زمانبندی تعیین کرد.
قیدهای دیگری که ابزار زمانبندی باید به آنها توجه داشته باشد را میتوان به صورت فراداده دلخواه نمایش داد. میزبانهای منفرد را میتوان به وسیله ابزارهای زمانبندی، برچسبگذاری و هدفگیری کرد. این وضعیت برای مثال در مواردی که یک میزبان شامل دادههای مورد نیاز یک اپلیکیشن است، ضروری خواهد بود. برخی سرویسها ممکن است نیاز داشته باند که روی همه میزبانهای موجود در کلاستر توزیع شوند. اغلب ابزارهای زمانبندی اجاره چنین تنظیمی را میدهند.
ابزارهای زمانبندی چه کارکردهای مدیریت کلاستری را ارائه میکنند؟
زمانبندی در اغلب موارد با کارکردهای مدیریت کلاستر مرتبط است، زیرا هر دو مورد نیازمند توانایی عملیات روی میزبانهای خاص و روی کلاستر به صورت یک کلیت هستند.
میتوان از نرمافزار مدیریت کلاستر برای کوئری زدن اطلاعاتی در مورد اعضای کلاستر و افزودن/حذف اعضا، یا حتی اتصال به میزبانهای خاص برای مدیریت متمرکزتر استفاده کرد. این کارکردها میتوانند در ابزار زمانبندی نیز وجود داشته باشند و یا ممکن است در حیطه مسئولیت یک پردازش دیگر باشند.
مدیریت کلاستر غالباً با ابزار کشف سرویس یا انباره کلید-مقدار توزیع یافته مرتبط است. این موارد به طور خاص برای ذخیرهسازی این نوع از اطلاعات مناسبسازی شدهاند، زیرا این اطلاعات در سراسر کلاستر توزیع یافتهاند و پلتفرمی از قبل بدین منظور وجود دارد.
به همین دلیل اگر خود ابزار زمانبندی روشهایی برای مدیریت کلاستر نداشته باشد، مواردی از عملیات مدیریت کلاستر را میتوان با اصلاح مقادیر در انبارههای پیکربندی با استفاده از API های ارائه شده صورت داد. برای نمونه، تغییرات عضویت کلاستر ممکن است نیازمند مدیریت از طریق تغییر دادههای خام در سرویس کشف باشند.
انبارههای کلید-مقدار نیز به طور معمول مکانهایی هستند که فرادادههایی در مورد میزبان خاص را میتوان در آنها ذخیره کرد و همان طور که پیشتر اشاره کردیم، برچسبگذاری میزبانها، امکان هدفگیری میزبانهای منفرد یا گروهی از آنها برای تصمیمهای زمانبندی را فراهم میسازد.
توزیعهای چند کانتینری چگونه در زمانبندی جای میگیرند؟
برخی اوقات علیرغم این که هر کامپوننت برای یک اپلیکیشن به صورت سرویسهای گسستهای تقسیم میشود، بهتر است که آن را به صورت یک واحد منفرد مدیریت کنیم. مواردی نیز وجود دارند که توزیع یک سرویس بدون وجود سرویس دیگر کاملاً بیمعنی است، زیرا کارکردهای آنها به هم مربوط هستند.
زمانبندی پیشرفتهای که در آن گروهبندی کانتینرها لحاظ شده است، از طریق چند پروژه متفاوت ممکن است. کاربران با دسترسی به چنین کارکردی، چند مزیت عمده به دست میآورند.
مدیریت کانتینرهای گروهی به مدیر این امکان را میدهد که با مجموعهای از کانتینرها به صورت یک اپلیکیشن منفرد برخورد کند. اجرای کامپوننتهای کاملاً به هم مرتبط به صورت یک کلیت واحد موجب سادهتر شدن مدیریت اپلیکیشن بدون از دست رفتن مزیتهای جداسازی کارکردهای منفرد میشود. در واقع بدین ترتیب مدیران میتوانند از مزیتهای کانتینری شدن و همزمان معماری سرویس-گرا بهرهمند شوند و همزمان سربار مدیریت اضافی را کاهش دهند.گروهبندی اپلیکیشنها با همدیگر میتواند صرفاً به معنی زمانبندی ساده آنها با هم و ارائه قابلیت آغاز و توقف آنها به طور همزمان باشد. این فرایند همچنین میتواند امکان تعریف سناریوهای پیچیدهتری مانند پیکربندی subnet های مجزا برای هر گروه از اپلیکیشنها یا مقیاسبندی کل مجموعه کانتینرها را ایجاد میکند در حالی که در سناریوی قبلی تنها امکان مقیاسبندی روی مقیاس کانتینر وجود داشت.
تدارک (Provisioning) به چه معنی است؟
یک مفهوم مرتبط با مدیریت کلاستر بحث تدارک است. منظور از تدارک فرایندهایی هستند که به آغاز میزبانهای آنلاین جدید و پیکربندی آنها به روشی ابتدایی برای آمادهسازی جهت کار گفته میشود. در توزیعهای داکری این امر غالباً به معنی پیکربندی داکر و راهاندازی میزبان جدید برای اتصال به کلاستر موجود است.
با این که نتیجه نهایی تدارک یک میزبان، همواره آمادهسازی یک سیستم جدید برای کار خواهد بود، اما روش این کار بسته به ابزارهای مورد استفاده و نوع میزبان میتواند کاملاً متفاوت باشد. برای نمونه، اگر میزبان ما یک ماشین مجازی باشد، ابزارهایی مانند Vagrant میتوانند برای راهاندازی یک میزبان جدید مورد استفاده قرار گیرند. اغلب ارائهدهندگان خدمات ابری، امکان ایجاد میزبانهای جدید با استفاده از API ها را میدهند. به طور عکس تدارک یک میزبان سختافزاری جدید احتمالاً نیازمند نوعی از مراحل دخالت دستی خواهد بود. ابزارهای مدیریت پیکربندی مانند Chef, Puppet, Ansible یا Salt ممکن است جهت مدیریت پیکربندی اولیه میزبان و ارائه اطلاعات مورد نیاز برای اتصال به کلاستر موجود ضروری باشد.
فرایند «تدارک» را میتوان به عنوان یک فرایند که باید مدیر آغاز کند دانست، همچنین میتوان آن را به ابزارهای مدیریت کلاستر وصل کرد تا مقیاسبندی خودکار صورت بگیرد. این روش دوم شامل تعریف کردن فرایندهایی برای درخواست کردن میزبانهای اضافی و همچنین شرایطی است که تحت آن باید این فرایند به طور خودکار آغاز شود. برای نمونه اگر اپلیکیشن شما از بار سنگینی رنج میبرد، ممکن است سیستم شما میزبانهای اضافی راهاندازی کرده و کانتینرها را روی زیرساختهای جدید به صورت افقی مقیاسبندی کند تا این فشار را کاهش دهد.
ابزارهای زمانبندی رایج کدام هستند؟
به منظور وظایف زمانبندی و مدیریت ابتدایی کلاستر برخی از پروژههای محبوب شامل موارد زیر هستند:
- fleet – فلیت یک کامپوننت زمانبندی و مدیریت کلاستر برای CoreOS است. این ابزار اطلاعات اتصال را برای هر میزبان در کلاستر از etcd میخواند و مدیریت سرویس شبیه به systemd ارائه میکند.
- marathon – ماراتن، کامپوننت زمانبندی و مدیریت سرویس برای نصب Mesosphere است. این ابزار به همراه mesos برای کنترل سرویسهای با اجرای طولانی استفاده میشود و یک UI وب برای مدیریت پردازش و کانتینر ارائه میکند.
- Swarm – سوارمِ داکر یک ابزار زمانبندی است که پروژه داکر در دسامبر 2014 آن را تعریف کرده است. امید میرود که این ابزار یک زمانبندی قوی ارائه کند که راهاندازی کانتینرها روی میزبانهای تدارک دیده شده با داکر و با استفاده از ساختار بومی داکر را تسهیل کند.
Mesosphere به عنوان بخشی از راهبرد مدیریت کلاستر روی کامپوننتهای تکیه دارد:
- mesos - آپاچی mesos ابزاری است که منابع همه میزبانها در یک کلاستر را انتزاع کرده و مدیریت میکند. این ابزار مجموعهای از منابع موجود در سراسر کلاستر را به کامپوننتهای ساخته شده روی آن (مانند marathon) ارائه میکند. این ابزار خودش را به مثابه یک «کرنل» برای یک پیکربندی کلاستر شده توصیف کرده است.
در خصوص وظایف پیشرفته زمانبندی و رویههای کنترلکننده کانتینرها به صورت یک کلیت واحد، پروژههای زیر وجود دارد:
- kubernetes - kubernetes به عنوان ابزار زمانبندی پیشرفته گوگل کنترل بسیار بیشتری روی کانتینرها روی یک زیرساخت ارائه میکند. کانتینرها میتوانند برچسبگذاری و گروهبندی شوند و subnet خاص خودشان را برای ارتباط داشته باشند.
- compose – پروژه compose داکر به منظور ایجاد امکان مدیریت گروهی کانتینرها با استفاده از فایلهای پیکربندی اعلانی ارائه شده است. این ابزار از لینکهای داکر برای دریافت اطلاعاتی در مورد رابطه وابستگی بین کانتینرها استفاده میکند.
سخن پایانی
مدیریت کلاستر و ابزارهای زمانبندی کار بخشی کلیدی از پیادهسازی سرویسهای کانتینر شده روی مجموعههای توزیع یافتهای از میزبانها محسوب میشوند. این ابزارها بخش اصلی مدیریت را برای آغاز عملی و کنترل سرویسهای ارائهدهنده اپلیکیشن تشکیل میدهند. با بهرهگیری مؤثر از ابزارهای زمانبندی میتوان با تلاشی ناچیز، تغییرات چشمگیری در اپلیکیشن ایجاد کرد.
اگر این مطلب برایتان مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای شبکههای کامپیوتری
- آموزش داکر (Docker) برای توسعه دهندگان
- مجموعه آموزشهای ابزارها و راهکارهای مدیریت وبسایتها
- اکوسیستم داکر (Docker) — کامپوننت های رایج
- شبکه بندی و ارتباط ها در اکوسیستم داکر — راهنمای جامع
==