Sobes.tech
Middle

Чаро swap дар нодҳои Kubernetes ғайрифаъол карда мешавад?

sobes.tech AI

Ҷавоб аз AI

در Kubernetes، غیرفعال کردن swap در نودهای کاری/مستر توصیه می‌شود و در برخی موارد الزامی است.

دلایل اصلی:

  • رفتار غیرقابل پیش‌بینی در کمبود حافظه: زمانی که در نود با swap فعال، حافظه فیزیکی تمام می‌شود، سیستم‌عامل شروع به استفاده فعال از فایل/پارتیشن swap می‌کند. این منجر به کاهش شدید سرعت فرآیندها، از جمله اجزای سیستم Kubernetes (kubelet، kube-proxy) و خود کانتینرها می‌شود. kubelet ممکن است توانایی ارزیابی صحیح منابع در دسترس برای پادها را نداشته باشد، که می‌تواند منجر به «کشتن» آن‌ها (OOMKilled) به دلیل سیگنال‌های نادرست کمبود حافظه یا برعکس، توقف فرآیندها به جای راه‌اندازی مجدد آن‌ها شود.

  • سختی مدیریت منابع: Kubernetes به طور مؤثر منابع (CPU، حافظه) را در سطح پادها و کانتینرها با کمک cgroups مدیریت می‌کند. استفاده از swap لایه‌ای اضافی از انتزاع را وارد می‌کند و کار با cgroups و kubelet در پیگیری و محدود کردن مصرف حافظه توسط پادها را دشوارتر می‌سازد. kubelet تشخیص مصرف واقعی حافظه توسط پادها را سخت‌تر می‌کند، اگر بخشی از داده‌ها به swap منتقل شده باشد.

  • کاهش عملکرد: swap در دیسک (HDD/SSD) قرار دارد که دسترسی به آن بسیار کندتر از حافظه RAM است. استفاده فعال از swap به طور قابل توجهی عملکرد برنامه‌ها و اجزای کلاستر را کاهش می‌دهد. این می‌تواند منجر به تایم‌اوت‌ها، خطاها و ناپایداری کل کلاستر شود.

  • نیاز به رفتار قطعی: برای عملکرد پایدار کلاستر و رفتار قابل پیش‌بینی برنامه‌ها، مهم است که سیستم به صورت قطعی به کمبود حافظه واکنش نشان دهد. غیرفعال کردن swap تضمین می‌کند که در صورت اتمام حافظه، مکانیزم‌های OOMKiller فعال شوند که فرآیندهای کم‌اهمیت‌تر (پادها) را خاتمه دهند و منابع را برای فرآیندهای حیاتی‌تر آزاد کنند. با فعال بودن swap، رفتار سیستم کمتر قابل پیش‌بینی است.

  • پیشنهادات جامعه و مستندات: مستندات رسمی Kubernetes و بهترین شیوه‌های جامعه به شدت توصیه می‌کنند که در نودهایی که قرار است بار کاری Kubernetes اجرا شود، swap غیرفعال باشد. این یک رویه استاندارد برای حفظ پایداری و عملکرد کلاستر است.

# نمونه فرمان برای غیرفعال کردن swap
sudo swapoff -a

# نمونه حذف کردن ورودی swap از /etc/fstab، تا غیرفعال‌سازی پس از راه‌اندازی مجدد باقی بماند
# خط حاوی 'swap' یا مسیر دستگاه/فایل swap خود را پیدا کنید
# خط را کامنت یا حذف کنید
sudo vi /etc/fstab