کنترلر کوبرنتیز یکی از مفاهیم کلیدی در مدیریت کلاسترهاست که به شما کمک میکند وضعیت منابع و پادها همواره پایدار و مطابق با وضعیت مطلوب (Desired State) باقی بماند. با استفاده از کنترلرها، بسیاری از وظایف تکراری و مدیریتی بهصورت خودکار انجام میشود و نیاز به دخالت دستی کاهش مییابد. علاوه بر کنترلرها، اپراتور کوبرنتیز لایهای پیشرفتهتر فراهم میکند تا مدیریت اپلیکیشنهای پیچیده و stateful را نیز خودکار کرده و فرایندهایی مانند نصب، بهروزرسانی، مقیاسدهی و بازیابی را بهبود بخشد. در این مطلب بررسی میکنیم که کنترلر کوبرنتیز چیست، چگونه کار میکند و چه تفاوتی با اپراتور کوبرنتیز دارد.
کنترلر کوبرنتیز چیست؟
کنترلرها اجزای بنیادی کوبرنتیز هستند که برای مدیریت و نگهداری وضعیت منابع طراحی شدهاند. این اجزا با بررسی مداوم وضعیت فعلی منابع و مقایسه آن با وضعیت مطلوب (Desired State)، اطمینان حاصل میکنند که کلاستر همیشه در شرایط پایدار باقی بماند. به عبارت دیگر، کنترلرها به صورت حلقههای کنترلی (Control Loops) عمل میکنند تا به صورت خودکار وضعیت منابع را اصلاح و هماهنگ کنند.
کنترلر کوبرنتیز چگونه کار میکنند؟
عملکرد کنترلرها را میتوان با مثال یک ترموستات ساده توضیح داد. فرض کنید ترموستات برای حفظ دمای اتاق روی یک مقدار مشخص تنظیم شده است. در این حالت دمای تنظیمشده همان وضعیت مطلوب و دمای فعلی اتاق همان وضعیت فعلی است. ترموستات بهصورت مداوم دما را بررسی میکند و اگر دما از مقدار مطلوب کمتر باشد، سیستم گرمایشی را روشن و در صورت بیشتر بودن خاموش میکند.

کنترلرهای کوبرنتیز نیز دقیقاً به همین شکل عمل میکنند؛ آنها وضعیت منابع را از طریق Kubernetes API پایش کرده و هرگونه اختلاف با وضعیت مطلوب را اصلاح میکنند. این حلقه کنترلی به صورت پیوسته اجرا میشود تا منابع و پادها همیشه در وضعیت پایدار باقی بمانند.
کنترلر کوبرنتیز چه منابعی را مدیریت میکند؟
در کوبرنتیز، هر کنترلر مسئول مدیریت یک نوع مشخص از منابع است. این منابع بهصورت آبجکتهایی در Kubernetes API تعریف میشوند و کنترلرها وضعیت آنها را بهصورت مداوم بررسی و اصلاح میکنند.
برای مثال، برخی کنترلرها مانند ReplicaSet مسئول حفظ تعداد مشخصی پاد در کوبرنتیز هستند، در حالی که کنترلرهایی مانند Job وظیفه اجرای تسکهای مشخص را برعهده دارند. هر کنترلر تنها روی مجموعهای از منابع مشخص تمرکز دارد و تلاش میکند وضعیت آنها را با وضعیت مطلوب تعریفشده توسط کاربر همگام نگه دارد.
نکته مهم این است که در کوبرنتیز، این منابع از طریق API تعریف و ذخیره میشوند و کنترلرها نیز از همین طریق وضعیت آنها را مشاهده کرده (Watch) و در صورت نیاز تغییرات لازم را اعمال میکنند (Update). به همین دلیل، تعامل بین کنترلر کوبرنتیز و Kubernetes API نقش کلیدی در مدیریت کلاستر دارد.

انواع کنترلر کوبرنتیز
در کوبرنتیز، کنترلرهای مختلفی برای مدیریت سناریوهای متفاوت وجود دارند. هر یک از این کنترلرها برای مدیریت نوع خاصی از workload طراحی شدهاند. نکته مهم این است که این کنترلرها معمولاً بهصورت مستقل از یکدیگر عمل نمیکنند، بلکه در بسیاری از موارد بهصورت زنجیرهای با هم در ارتباط هستند. برای مثال، زمانی که یک Deployment ایجاد میشود، این کنترلر بهطور مستقیم پادها را مدیریت نمیکند، بلکه یک ReplicaSet ایجاد میکند و این ReplicaSet است که مسئول ایجاد و نگهداری پادها است. این ارتباط بین کنترلرها باعث میشود مدیریت وضعیت مطلوب سیستم بهصورت دقیقتر و قابلکنترلتری انجام شود.
در ادامه با مهمترین انواع کنترلر کوبرنتیز آشنا میشویم.
ReplicaSet
کنترلر ReplicaSet مسئول اطمینان از اجرای تعداد مشخصی از پادهای یکسان در هر لحظه است و نقش مهمی در حفظ پایداری اپلیکیشنها در کوبرنتیز دارد. این کنترلر بهصورت مداوم وضعیت پادها را بررسی میکند و اگر تعداد پادهای در حال اجرا کمتر از مقدار تعریفشده باشد، پادهای جدیدی ایجاد میکند. در مقابل، اگر تعداد پادها بیشتر از مقدار موردنظر باشد، برخی از آنها را حذف میکند.
Deployment
کنترلر دیپلویمنت در کوبرنتیز یکی از رایجترین راهکارها برای استقرار اپلیکیشنها در کوبرنتیز است. این کنترلر مدیریت ReplicaSetها را برعهده دارد و امکان بهروزرسانی تدریجی (rolling update) و بازگشت به نسخههای قبلی (rollback) را فراهم میکند. به بیان دیگر، Deployment یک لایه بالاتر از ReplicaSet است و فرایند بهروزرسانی و مدیریت نسخههای مختلف اپلیکیشن را سادهتر میکند.
StatefulSet
کنترلر StatefulSet برای مدیریت اپلیکیشنهایی استفاده میشود که به هویت پایدار و ذخیرهسازی دائمی نیاز دارند (برای مثال سرویسهای دادههای احراز هویت کاربران). در این نوع از workloadها، هر پاد دارای یک شناسه منحصربهفرد است و این شناسه حتی در صورت جابهجایی یا راهاندازی مجدد پاد نیز حفظ میشود. برخلاف سایر workloadها، این پادها قابل جایگزینی ساده با یکدیگر نیستند و هر کدام هویت مستقل خود را دارند. این ویژگی باعث میشود StatefulSet گزینه مناسبی برای اجرای سیستمهایی باشد که به ذخیرهسازی پایدار وابسته هستند.
زمانی که از دیتابیسهای PostgreSQL ،MySQL ،MongoDB ،Cassandra و بهصورت کلی از هر حالت Persistent Storage استفاده میشود، StatefulSets راهکار مناسبی است.
Job
کنترلر Job برای اجرای تسکهای کوتاهمدت طراحی شده است. این کنترلر یک یا چند پاد ایجاد میکند و تا زمانی که این پادها با موفقیت کار خود را به پایان برسانند، آنها را مدیریت میکند. پس از تکمیل موفقیتآمیز تسک، Job، دیگر پاد جدیدی ایجاد نمیکند.
CronJob
کنترلر CronJob برای اجرای Jobها در زمانبندیهای مشخص استفاده میشود. کاربران میتوانند با استفاده از الگوی زمانبندی (cron)، مشخص کنند که یک Job در چه زمانهایی اجرا شود و CronJob بهصورت خودکار در همان زمانها Jobهای موردنظر را ایجاد میکند.
DaemonSet
کنترلر DaemonSet اطمینان حاصل میکند که یک نسخه از یک پاد مشخص روی همه (یا برخی) از نودهای کلاستر اجرا شود. با اضافه شدن نودهای جدید به کلاستر، پادهای مربوط به DaemonSet نیز بهصورت خودکار روی آنها اجرا میشوند و در صورت حذف نود، این پادها نیز حذف میشوند.
تفاوت کنترلر کوبرنتیز و اپراتور کوبرنتیز
در کوبرنتیز، کنترلرها و اپراتورها هر دو مسئول مدیریت وضعیت منابع هستند، اما از نظر دامنه و سطح پیچیدگی تفاوت دارند.
- کنترلر کوبرنتیز: وظیفه اصلی آن حفظ وضعیت مطلوب (Desired State) برای یک یا چند نوع مشخص از منابع است. این کنترلرها معمولاً برای workloadهای استاندارد و عمومی مثل پادها، ReplicaSetها، Deploymentها و Jobها استفاده میشوند. همانطور که در بخش قبل توضیح دادیم، کنترلرها از حلقههای کنترلی (Control Loops) استفاده میکنند تا وضعیت فعلی را با وضعیت مطلوب مقایسه کرده و در صورت نیاز اصلاح کنند.
- اپراتور کوبرنتیز: اپراتورها لایهای بالاتر از کنترلرها هستند و برای مدیریت اپلیکیشنهای stateful یا پیچیده طراحی شدهاند. یک اپراتور علاوه بر حفظ وضعیت مطلوب منابع، میتواند منطق اختصاصی برنامه را نیز پیادهسازی کند؛ مثلاً مدیریت نصب، پیکربندی، بهروزرسانی، بکاپ و بازیابی یک دیتابیس. بهعبارتی اپراتورها کنترلرهایی هستند که با دانش برنامه (application-specific logic) ترکیب شدهاند تا مدیریت خودکار اپلیکیشنهای پیچیده را ممکن سازند.
به طور خلاصه کنترلرها برای منابع استاندارد و عمومی هستند و فقط وضعیت کلاستر را پایش و اصلاح میکنند. اپراتورها از کنترلرها استفاده میکنند اما شامل منطق اختصاصی اپلیکیشن هم هستند و قادرند عملیات پیچیده و خودکار اپلیکیشن را مدیریت کنند.
مزایای کنترلر کوبرنتیز
کنترلرهای کوبرنتیز از مزایای زیر برخوردارند:
- پایداری وضعیت منابع: کنترلرها تضمین میکنند که وضعیت فعلی منابع همواره با وضعیت مطلوب (Desired State) هماهنگ باشد.
- خودکارسازی وظایف ساده و تکراری: کنترلرها وظایف مدیریت تعداد پادها، راهاندازی مجدد آنها و نگهداری وضعیت را بدون دخالت دستی انجام میدهند.
- حلقه کنترل مستمر: کنترلرها به صورت مداوم منابع را پایش میکنند و در صورت اختلاف با وضعیت مطلوب، تغییرات لازم را اعمال میکنند.
مزایای اپراتور کوبرنتیز
مزایای اپراتور کوبرنتیز شامل موارد زیر است:
- مدیریت خودکار اپلیکیشنهای پیچیده: اپراتورها قادرند علاوه بر حفظ وضعیت مطلوب منابع، منطق اختصاصی برنامهها را نیز مدیریت کنند.
- خودکارسازی عملیات پیشرفته: نصب، بهروزرسانی، مقیاسدهی، پشتیبانگیری و بازیابی اپلیکیشنها توسط اپراتور کوبرنتیز به صورت خودکار انجام میشود.
- پشتیبانی از اپلیکیشنهای stateful: اپراتورها برای اپلیکیشنهایی که به ذخیرهسازی پایدار و هویت ثابت نیاز دارند، گزینه مناسب هستند.
در پایان
کنترلرها بخش اصلی کوبرنتیز هستند که بهصورت مداوم وضعیت منابع را پایش میکنند و با اعمال تغییرات لازم، آنها را با وضعیت مطلوب هماهنگ نگه میدارند. این کار باعث پایداری پادها و کاهش دخالت دستی میشود. اپراتورها لایهای بالاتر هستند و علاوه بر مدیریت منابع، منطق اپلیکیشنهای پیچیده و stateful را خودکار میکنند؛ مانند فرایندهای نصب، مقیاسدهی و بازیابی. درک کنترلرها و نقش اپراتورها برای مدیریت مؤثر کلاستر و استفاده بهینه از منابع ضروری است.
پلتفرم ابری دارکوب همروش تجربه زیرساختی مبتنی بر کوبرنتیز را به سادهترین شکل ممکن در اختیارتان قرار میدهد. با کمک دارکوب میتوانید به سرعت برنامههای خود را بر بستر کوبرنتیز اجرا کنید و اپلیکیشنهای پرکاربرد را با تنظیمانت دلخواه بسازید.