مدیریت زیرساخت رو به مجیک وی ام بسپار؛ از استقرار تا مانیتورینگ، سریع، هوشمند، و بهینه.

مدیریت زیرساخت رو به مجیک وی ام بسپار؛ از استقرار تا مانیتورینگ، سریع، هوشمند، و بهینه.

تفاوت StatefulSets و DaemonSets در Kubernetes

🍥 تفاوت StatefulSets و DaemonSets در Kubernetes — راهنمای کامل برای درک بهتر این مفاهیم مهم

در چند مقاله ی قبلی به بررسی این که Kubernetes چیست و چه کاربردی دارد پرداختیم. در این مقاله می خوایم خیلی ساده به تفاوت StatefulSets و DaemonSets در Kubernetes بپردازیم. در دنیای Kubernetes، وقتی صحبت از اجرای پادها (Pods) می‌شه، اکثر افراد اول با Deployments آشنا می‌شن؛ ابزاری برای اجرای چندین پاد یکسان در کلاستر. ولی وقتی نیاز به رفتارهای خاص‌تری داریم—مثل اجرای یک پاد روی هر نود یا مدیریت پادهایی با هویت پایدار—اینجاست که دو ابزار قدرتمند دیگه وارد صحنه می‌شن: StatefulSets و DaemonSets. در این مقاله، با زبانی ساده و کاربردی بهت توضیح می‌دم که این دو نوع Controller چی هستن، چه تفاوت‌هایی با هم دارن، و کی باید از هرکدوم استفاده کنید.

🟨 StatefulSet چیست؟

StatefulSet یکی از کنترلرهای Kubernetes است که برای اجرای برنامه‌هایی با حالت (stateful) به کار می‌رود. به عبارت دیگر، اگر برنامه شما نیاز دارد که شناسه یکتا، داده‌های پایدار و ترتیب راه‌اندازی یا حذف خاص داشته باشد، باید از StatefulSet استفاده کنید.

Stateful Sets: اجرای پادهای Stateful با هویت پایدار

به طور پیش‌فرض، پادهایی که با Deployment اجرا می‌شن، هویتی ندارن. یعنی اسمشون داینامیکه و اگر پاد ری‌استارت بشه، ممکنه با اسم و وضعیت جدیدی بیاد بالا. این برای اپلیکیشن‌هایی که نیاز به حفظ حالت (state) یا داده دارن، مناسب نیست.

✅ اینجاست که StatefulSets به کمک میان.

StatefulSet نوع خاصی از workload controller هست که برای اجرای اپلیکیشن‌هایی طراحی شده که:

  • نیاز به ذخیره‌سازی پایدار دارن (مثل دیتابیس‌ها)
  • ترتیب اجرا و توقفشون اهمیت داره
  • هر پاد باید یک هویت خاص داشته باشه (مثل اسم ثابت یا hostname خاص)
📦 ویژگی‌های کلیدی StatefulSet:
  • هر پاد یک نام ثابت داره (مثلاً mysql-0, mysql-1, mysql-2)

  • به هر پاد یک Persistent Volume خاص متصل می‌شه که حتی بعد از حذف پاد هم باقی می‌مونه
  • پادها به ترتیب اجرا و ترتیب حذف می‌شن
  • برای دیتابیس‌هایی مثل MySQL, PostgreSQL, MongoDB و اپلیکیشن‌های Stateful عالیه

🧪 مثال کاربردی:

اگر بخوای یک کلاستر MongoDB با ۳ نود راه‌اندازی کنی که هرکدوم نقش خاصی دارن و باید دیتاهاشون حفظ بشه، باید از StatefulSet استفاده کنی.

 


🟩 DaemonSet چیست؟

DaemonSet نیز یکی از کنترلرهای Kubernetes است که برای اجرای یک پاد روی همه نودها (یا روی نودهای خاص) به‌کار می‌رود. این ابزار برای برنامه‌هایی طراحی شده که باید روی هر نود در کلاستر اجرا شوند، مثل مانیتورینگ، لاگ‌گیری یا مدیریت شبکه.

🔁 DaemonSets: اجرای یک پاد روی همه نودها

تصور کن می‌خوای روی تمام نودهای کلاستر یک ابزار لاگ‌گیری یا مانیتورینگ نصب کنی. مثلاً بخوای روی همه نودها Prometheus Node Exporter یا یک Log Collector مثل Fluentd اجرا بشه.

✅ اینجاست که DaemonSet وارد عمل می‌شه.

DaemonSet تضمین می‌کنه که یک نسخه از یک پاد مشخص، روی هر نود (Node) کلاستر اجرا بشه. اگر نود جدیدی به کلاستر اضافه بشه، پاد مربوطه به‌طور خودکار روی اون هم اجرا می‌شه.

⚙️ ویژگی‌های کلیدی DaemonSet:
  • اجرای یک پاد در هر نود (به‌صورت خودکار)
  • مفید برای ابزارهای مانیتورینگ، لاگ‌گیری، امنیت و شبکه
  • به محض حذف یک نود، پاد اون هم از بین می‌ره
  • به محض اضافه شدن نود جدید، پاد روی اون دیپلوی می‌شه

🧪 مثال کاربردی:

فرض کن روی همه نودها می‌خوای Filebeat برای جمع‌آوری لاگ‌ها نصب کنی. فقط کافیه یک DaemonSet بسازی و Kubernetes خودش روی هر نود یک نسخه از Filebeat اجرا می‌کنه.


🆚 تفاوت DaemonSet و StatefulSet در یک نگاه

ویژگیStatefulSetDaemonSet
نوع اپلیکیشنStateful (با داده پایدار)Agentها و سرویس‌های سیستمی
هویت پادثابت (مثلاً pod-0, pod-1)نه، فقط یک پاد روی هر نود
حجم ذخیره‌سازیPersistent Volume اختصاصی برای هر پادمعمولاً نیاز به Volume نداره
ترتیب اجرادارهنداره
تعداد پادهامشخص و قابل افزایش با اسکیلهمیشه یکی در هر نود
موارد استفادهدیتابیس‌ها، اپ‌های حساس به ترتیبمانیتورینگ، لاگ‌گیری، آنتی‌ویروس

🧠 جمع‌بندی

  • از StatefulSet استفاده کن وقتی به پادهایی با هویت خاص، حجم دائمی و ترتیب اجرا نیاز داری.
  • از DaemonSet استفاده کن وقتی می‌خوای روی همه نودها یک ابزار یا سرویس خاص رو اجرا کنی.

اگر در حال طراحی یک سیستم حرفه‌ای با Kubernetes هستی، بدون درک درست از این دو Controller نمی‌تونی زیرساخت پایداری بسازی.

منابع

https://semaphore.io/blog/replicaset-statefulset-daemonset-deployments

https://medium.com/@saeedsaleem.04/deployments-statefulsets-and-daemonsets

نوشته های مرتبط

دیدگاه خود را بنویسید