این مقاله بیش از یک سال است. مقالات قدیمی ممکن است حاوی محتوای منسوخ شده باشد. بررسی کنید که اطلاعات موجود در صفحه از زمان انتشار آن نادرست نشده است.
جدید در Kubernetes v1. 22: پشتیبانی آلفا برای استفاده از حافظه مبادله
نویسنده: الانا هاشمن (کلاه قرمز)
نسخه 1. 22 پشتیبانی آلفا را برای پیکربندی استفاده از حافظه مبادله برای بارهای کاری Kubernetes به صورت هر گره معرفی کرد.
در نسخه های قبلی ، Kubernetes از استفاده از حافظه مبادله ای در لینوکس پشتیبانی نمی کند ، زیرا ارائه ضمانت ها و حساب برای استفاده از حافظه POD در هنگام تعویض دشوار است. به عنوان بخشی از طراحی قبلی Kubernetes ، پشتیبانی از مبادله خارج از محدوده در نظر گرفته می شد ، و در صورت تشخیص مبادله روی یک گره ، یک کوبل به طور پیش فرض نتوانست شروع کند.
با این حال ، تعدادی از موارد استفاده وجود دارد که از گره های Kubernetes که از مبادله پشتیبانی می کنند ، از جمله پایداری گره بهبود یافته ، پشتیبانی بهتر برای برنامه های با حافظه بالا اما مجموعه های کاری کوچکتر ، استفاده از دستگاه های محدود شده با حافظه و انعطاف پذیری حافظه وجود دارد.
از این رو ، در طول دو نسخه گذشته ، گره SIG در تلاش است تا موارد استفاده مناسب و بازخورد را جمع آوری کند و طرحی را برای اضافه کردن پشتیبانی مبادله به گره ها به صورت کنترل شده و قابل پیش بینی پیشنهاد کند تا کاربران Kubernetes بتوانند آزمایش را انجام دهند و داده هایی را برای ادامه ساختمان ارائه دهندقابلیت های خوشه ای در بالای مبادله. فارغ التحصیلی آلفا از پشتیبانی حافظه مبادله برای گره ها ، اولین نقطه عطف ما به سمت این هدف است!
چگونه کار می کند؟
چندین روش ممکن وجود دارد که فرد می تواند استفاده از مبادله را روی یک گره تصور کند. برای کنترل دامنه برای این اجرای اولیه ، هنگامی که مبادله از قبل تهیه شده و در یک گره در دسترس است ، ما پیشنهاد کرده ایم که Kubelet باید بتواند به گونه ای پیکربندی شود که:
- این می تواند با مبادله شروع شود.
- این رابط کانتینر زمان را برای اختصاص حافظه صفر مبادله به بارهای کاری Kubernetes به طور پیش فرض هدایت می کند.
- برای مشخص کردن استفاده از مبادله برای کل گره می توانید Kubelet را پیکربندی کنید.
پیکربندی مبادله روی یک گره از طریق MemorySwap در پیکربندی KubeletConfiguration در معرض یک مدیر خوشه قرار می گیرد. به عنوان یک مدیر خوشه ، می توانید با تنظیم حافظه swap. swapbehavior رفتار گره را در حضور حافظه مبادله مشخص کنید.
این امر از طریق افزودن قسمت Memory_Swap_limit_in_Bytes به رابط زمان اجرا کانتینر (CRI) امکان پذیر است. پیکربندی Kubelet کنترل چقدر حافظه مبادله ای Kubelet به زمان اجرا ظرف برای اختصاص دادن به هر ظرف از طریق CRI کنترل می کند. زمان اجرا کانتینر تنظیمات مبادله را به سطح کانتینر می نویسد.
چگونه از آن استفاده کنم؟
در گره ای که حافظه مبادله ای در حال حاضر ارائه شده است ، می توان با استفاده از فعال کردن دروازه ویژگی Nodeswap روی Kubelet ، و غیرفعال کردن تنظیمات پیکربندی Failswapon یا پرچم خط فرمان-ضعف ، از kubernetes استفاده از مبادله روی یک گره استفاده کرد.
همچنین می توانید به صورت اختیاری MemorySwap. swapbehavior را پیکربندی کنید تا مشخص شود که چگونه یک گره از حافظه مبادله استفاده می کند. مثلا،
گزینه های پیکربندی موجود برای swapbehavior عبارتند از:
- LimitedSwap (پیش فرض): بار کاری Kubernetes در میزان تعویض آنها می تواند محدود باشد. بارهای کاری روی گره که توسط Kubernetes مدیریت نشده است ، هنوز هم می تواند مبادله کند.
- UnlimitedSwap: بار کاری Kubernetes می تواند از حافظه مبادله ای که در آن درخواست می کنند ، تا حد مجاز سیستم استفاده کنند.
اگر پیکربندی برای MemorySwap مشخص نشده باشد و دروازه ویژگی فعال شود ، به طور پیش فرض Kubelet همان رفتار با تنظیم LimitedSwap را اعمال می کند.
رفتار تنظیمات LimitedSWAP بستگی به این دارد که گره با V1 یا V2 گروه های کنترل (همچنین به عنوان "CGroup" شناخته می شود) در حال اجرا است:
- CGroups V1: بار کاری Kubernetes می تواند در صورت تنظیم از هر ترکیبی از حافظه و مبادله ، تا حد حافظه غلاف استفاده کند.
- CGroups V2: بارهای کاری Kubernetes نمی توانند از حافظه مبادله استفاده کنند.
احتیاط
در دسترس بودن مبادله در یک سیستم ، پیش بینی را کاهش می دهد. عملکرد SWAP از حافظه معمولی بدتر است ، گاهی اوقات با سفارشات زیادی از بزرگی ، که می تواند باعث رگرسیون عملکرد غیر منتظره شود. علاوه بر این ، SWAP رفتار یک سیستم را تحت فشار حافظه تغییر می دهد و برنامه ها نمی توانند مستقیماً کنترل کنند که چه بخشی از استفاده از حافظه آنها تعویض می شود. از آنجا که فعال کردن مبادله اجازه می دهد تا از حافظه بیشتری برای بارهای کاری در Kubernetes که به طور قابل پیش بینی برای آن حساب نمی شود ، امکان پذیر باشد ، همچنین خطر همسایگان پر سر و صدا و تنظیمات بسته بندی غیر منتظره را افزایش می دهد ، زیرا برنامه ریز نمی تواند میزان استفاده از حافظه را به خود اختصاص دهد.
عملکرد یک گره با حافظه مبادله ای فعال شده به ذخیره سازی فیزیکی زیرین بستگی دارد. هنگامی که حافظه مبادله ای در حال استفاده است ، عملکرد در یک محیط محدود در هر ثانیه (IOPS) ، مانند یک ابر VM با I/O ، در مقایسه با رسانه های ذخیره سازی سریعتر مانند درایوهای حالت جامد یا NVME به طور قابل توجهی بدتر خواهد شد. واد
از این رو ، ما استفاده از مبادله را برای برخی از بارهای کاری یا محیط محدود با عملکرد توصیه نمی کنیم. مدیران و توسعه دهندگان خوشه باید قبل از استفاده از مبادله در سناریوهای تولید ، گره ها و برنامه های خود را محک بزنند و ما در این زمینه به کمک شما نیاز داریم!
با نگاه به آینده
نسخه Kubernetes 1. 22 پشتیبانی آلفا را برای حافظه مبادله روی گره ها معرفی می کند و ما در نسخه 1. 23 به کار خود ادامه خواهیم داد. این شامل:
- افزودن پشتیبانی برای کنترل مصرف مبادله در سطح POD از طریق CGroups.
- این شامل امکان تعیین مقدار تعویض سیستم از آنچه Kubelet بر روی میزبان تشخیص می دهد ، خواهد بود.
- ما در نظر خواهیم گرفت که حالت های پیکربندی جدید را برای مبادله ، مانند محدودیت مبادله در سطح گره برای بارهای کاری ، معرفی خواهیم کرد.
چگونه می توانم بیشتر بیاموزم؟
می توانید مستندات فعلی را در وب سایت Kubernetes مرور کنید.
برای اطلاعات بیشتر و برای کمک به آزمایش و ارائه بازخورد ، لطفاً به KEP-2400 و پیشنهاد طراحی آن مراجعه کنید.
چگونه می توانم درگیر شوم؟
بازخورد شما همیشه مورد استقبال ماست!گره SIG به طور مرتب ملاقات می کند و از طریق Slack (کانال #گره SIG) یا لیست پستی SIG می توان به آن رسید. اگر می خواهید کمک کنید ، احساس راحتی کنید که به من دسترسی پیدا کنید ، الانا هاشمن (Hehashman on Slack و GitHub).