گره های کارگر Kubernetes: بسیاری از گره های کوچک یا چندین گره بزرگ؟

گره های کارگر Kubernetes: بسیاری از گره های کوچک یا چندین گره بزرگ؟
هنگام ایجاد یک خوشه Kubernetes، ممکن است سؤالاتی پیش بیاید: چند گره کارگر برای پیکربندی و چه نوع؟ چه چیزی برای یک خوشه داخلی بهتر است: خرید چندین سرور قدرتمند یا استفاده از دوجین ماشین قدیمی در مرکز داده خود؟ آیا بهتر است هشت نمونه تک هسته ای یا دو نمونه چهار هسته ای در فضای ابری بگیرید؟

پاسخ این سوالات در مقاله موجود است. دانیل وایبل، مهندس نرم افزار و مدرس پروژه آموزشی Learnk8s در ترجمه دستور Kubernetes aaS از Mail.ru.

ظرفیت خوشه

به طور کلی، یک خوشه Kubernetes را می توان به عنوان یک "ابرگره" بزرگ در نظر گرفت. مجموع توان محاسباتی آن مجموع توان های تمام گره های تشکیل دهنده آن است.

راه های مختلفی برای دستیابی به هدف ظرفیت خوشه مورد نظر شما وجود دارد. به عنوان مثال، ما به یک کلاستر با ظرفیت کلی 8 هسته پردازنده و 32 گیگابایت رم نیاز داریم زیرا مجموعه ای از برنامه ها به منابع زیادی نیاز دارند. سپس می توانید دو نود با 16 گیگابایت حافظه یا چهار نود با 8 گیگابایت حافظه، دو پردازنده چهار هسته ای یا چهار پردازنده دو هسته ای نصب کنید.

در اینجا فقط دو راه ممکن برای ایجاد یک خوشه وجود دارد:

گره های کارگر Kubernetes: بسیاری از گره های کوچک یا چندین گره بزرگ؟
هر دو گزینه یک خوشه با ظرفیت یکسان تولید می کنند، اما پیکربندی پایین دارای چهار گره کوچکتر و پیکربندی بالا دارای دو گره بزرگتر است.

کدام گزینه بهتر است؟

برای پاسخ به این سوال، بیایید به مزایای هر دو گزینه نگاه کنیم. ما آنها را در یک جدول خلاصه کرده ایم.

چندین گره بزرگ

بسیاری از گره های کوچک

مدیریت خوشه آسان تر (اگر در محل باشد)

مقیاس خودکار صاف

ارزان تر (در صورت حضور در محل)

قیمت کمی متفاوت است (در فضای ابری)

می تواند برنامه های کاربردی با منابع فشرده را اجرا کند

تکثیر کامل

منابع به طور موثرتری استفاده می شوند (سربار کمتری بر روی دیمون های سیستم).
تحمل خطای خوشه ای بالاتر

لطفا توجه داشته باشید که ما فقط در مورد گره های کارگر صحبت می کنیم. انتخاب تعداد و اندازه گره های اصلی موضوعی کاملا متفاوت است.

بنابراین، اجازه دهید هر نقطه از جدول را با جزئیات بیشتری مورد بحث قرار دهیم.

گزینه اول: چندین گره بزرگ

افراطی ترین گزینه یک گره کارگر برای کل ظرفیت خوشه است. در مثال بالا، این یک گره کارگر با 16 هسته CPU و 16 گیگابایت رم خواهد بود.

مزایا

به علاوه شماره 1. مدیریت آسان تر
مدیریت چند ماشین راحت تر از یک ناوگان کامل است. ارائه به‌روزرسانی‌ها و اصلاحات سریع‌تر است و همگام‌سازی آن آسان‌تر است. تعداد خرابی ها در اعداد مطلق نیز کمتر است.

لطفاً توجه داشته باشید که همه موارد فوق در مورد سخت افزار، سرورهای شما و نه برای نمونه های ابری اعمال می شود.

وضعیت در فضای ابری متفاوت است. در آنجا، مدیریت توسط ارائه دهنده خدمات ابری انجام می شود. بنابراین، مدیریت ده گره در ابر تفاوت چندانی با مدیریت یک گره ندارد.

مسیریابی ترافیک و توزیع بار بین پادها در ابر به صورت خودکار انجام می شود: ترافیکی که از اینترنت می آید به متعادل کننده بار اصلی ارسال می شود که ترافیک را به پورت یکی از گره ها هدایت می کند (سرویس NodePort پورت را در محدوده 30000-32767 در هر گره کلاستر تنظیم می کند). قوانین تنظیم شده توسط kube-proxy ترافیک را از گره به پاد هدایت می کند. در اینجا به نظر می رسد که ده غلاف روی دو گره چگونه است:

گره های کارگر Kubernetes: بسیاری از گره های کوچک یا چندین گره بزرگ؟
طرفدار شماره 2: هزینه کمتر برای هر گره
یک خودروی قدرتمند گرانتر است، اما افزایش قیمت لزوماً خطی نیست. به عبارت دیگر، یک سرور ده هسته ای با 10 گیگابایت حافظه معمولا ارزان تر از ده سرور تک هسته ای با همین مقدار حافظه است.

اما توجه داشته باشید که این قانون معمولا در سرویس های ابری کار نمی کند. در طرح‌های قیمت‌گذاری فعلی همه ارائه‌دهندگان ابر بزرگ، قیمت‌ها به صورت خطی با ظرفیت افزایش می‌یابد.

بنابراین، در فضای ابری معمولاً نمی توانید در سرورهای قدرتمندتر ذخیره کنید.

طرفدار شماره 3: می توانید برنامه های کاربردی با منابع فشرده را اجرا کنید
برخی از برنامه ها به سرورهای قدرتمند در یک کلاستر نیاز دارند. به عنوان مثال، اگر یک سیستم یادگیری ماشینی به 8 گیگابایت حافظه نیاز دارد، نمی‌توانید آن را روی گره‌های 1 گیگابایتی اجرا کنید، اما فقط با حداقل یک گره کارگر بزرگ.

منفی

عیب شماره 1. تعداد زیادی غلاف در هر گره
اگر همین کار روی گره های کمتری انجام شود، طبیعتاً هر کدام از آنها غلاف بیشتری خواهند داشت.

این می تواند یک مشکل باشد.

دلیل آن این است که هر ماژول مقداری سربار به زمان اجرا کانتینر (به عنوان مثال Docker) و همچنین kubelet و cAdvisor وارد می کند.

به عنوان مثال، یک کوبلت به طور منظم همه کانتینرهای یک گره را برای بقای کاوش می کند - هر چه کانتینرها بیشتر باشد، کوبلت باید کار بیشتری انجام دهد.

CAdvisor آمار استفاده از منابع را برای همه کانتینرهای یک گره جمع‌آوری می‌کند و kubelet مرتباً این اطلاعات را جستجو می‌کند و از طریق یک API ارائه می‌کند. باز هم، کانتینرهای بیشتر به معنای کار بیشتر برای cAdvisor و kubelet است.

اگر تعداد ماژول ها افزایش یابد، می تواند سرعت سیستم را کاهش دهد و حتی قابلیت اطمینان آن را تضعیف کند.

گره های کارگر Kubernetes: بسیاری از گره های کوچک یا چندین گره بزرگ؟
در مخزن Kubernetes برخی شکایت کردکه گره‌ها بین وضعیت‌های Ready/NotReady پرش می‌کنند، زیرا بررسی منظم کوبلت همه کانتینرهای یک گره بیش از حد طول می‌کشد.
به همین دلیل Kubernetes توصیه می کند بیش از 110 غلاف در هر گره قرار نگیرید. بسته به عملکرد گره، می‌توانید پادهای بیشتری را در هر گره اجرا کنید، اما پیش‌بینی اینکه آیا مشکلاتی وجود خواهد داشت یا همه چیز خوب کار می‌کند، دشوار است. ارزش دارد کار را از قبل آزمایش کنید.

عیب شماره 2. محدودیت در تکثیر
تعداد بسیار کمی از گره ها میزان موثر تکرار برنامه را محدود می کنند. به عنوان مثال، اگر یک برنامه کاربردی با در دسترس بودن بالا با پنج تکرار اما تنها دو گره دارید، در این صورت درجه موثر تکرار برنامه به دو کاهش می یابد.

پنج کپی را فقط می توان بین دو گره توزیع کرد و اگر یکی از آنها شکست بخورد، چندین کپی را به طور همزمان حذف می کند.

اگر پنج گره یا بیشتر دارید، هر ماکت روی یک گره جداگانه اجرا می‌شود و شکست یک گره حداکثر یک ماکت را حذف می‌کند.

بنابراین، الزامات دسترسی بالا ممکن است به حداقل تعداد گره‌ها در خوشه نیاز داشته باشد.

عیب شماره 3. پیامدهای بدتر شکست
با تعداد کم گره ها، هر شکست عواقب جدی تری دارد. به عنوان مثال، اگر فقط دو گره دارید و یکی از آنها خراب می شود، نیمی از ماژول های شما بلافاصله ناپدید می شوند.

البته، Kubernetes حجم کار را از گره شکست خورده به دیگران منتقل می کند. اما اگر تعداد کمی از آنها وجود داشته باشد، ممکن است ظرفیت آزاد کافی وجود نداشته باشد. در نتیجه، برخی از برنامه های شما تا زمانی که گره شکست خورده را بالا نیاورید، در دسترس نخواهد بود.

بنابراین، هر چه تعداد گره ها بیشتر باشد، تأثیر خرابی های سخت افزاری کمتر می شود.

عیب شماره 4: مراحل افزایش خودکار مقیاس
Kubernetes دارای یک سیستم مقیاس پذیری خودکار خوشه ای برای زیرساخت های ابری است که به شما امکان می دهد بسته به نیاز فعلی خود گره ها را به طور خودکار اضافه یا حذف کنید. با گره‌های بزرگ‌تر، مقیاس‌پذیری خودکار ناگهانی‌تر و بدتر می‌شود. به عنوان مثال، در دو گره، اضافه کردن یک گره اضافی بلافاصله ظرفیت خوشه را 50٪ افزایش می دهد. و شما باید برای آن منابع هزینه کنید، حتی اگر به آنها نیاز نداشته باشید.

بنابراین، اگر قصد دارید از مقیاس بندی خودکار خوشه ای استفاده کنید، هر چه گره ها کوچکتر باشند، مقیاس بندی انعطاف پذیرتر و مقرون به صرفه تری خواهید داشت.

حال بیایید به مزایا و معایب تعداد زیادی گره کوچک نگاه کنیم.

گزینه دوم: بسیاری از گره های کوچک

مزایای این رویکرد اساساً از معایب گزینه مقابل با چندین گره بزرگ ناشی می شود.

مزایا

طرفدار شماره 1: تأثیر کمتر شکست
هر چه تعداد گره ها بیشتر باشد، غلاف های کمتری در هر گره وجود دارد. به عنوان مثال، اگر در هر ده گره صد ماژول دارید، هر گره به طور متوسط ​​ده ماژول خواهد داشت.

به این ترتیب، اگر یکی از گره ها از کار بیفتد، تنها 10 درصد از حجم کار را از دست می دهید. این احتمال وجود دارد که تنها تعداد کمی از کپی ها تحت تأثیر قرار گیرند و برنامه کلی عملیاتی باقی بماند.

علاوه بر این، گره‌های باقی‌مانده احتمالاً منابع رایگان کافی برای مدیریت بار کاری گره شکست خورده خواهند داشت، بنابراین Kubernetes می‌تواند آزادانه پادها را برنامه‌ریزی کند و برنامه‌های شما نسبتاً سریع به حالت عملکردی باز می‌گردند.

طرفدار شماره 2: تکرار خوب
اگر گره‌های کافی وجود داشته باشد، زمان‌بندی Kubernetes می‌تواند گره‌های مختلفی را به همه کپی‌ها اختصاص دهد. به این ترتیب، اگر یک گره از کار بیفتد، تنها یک ماکت تحت تأثیر قرار می گیرد و برنامه در دسترس باقی می ماند.

منفی

عیب شماره 1. کنترل آن مشکل است
مدیریت تعداد زیادی گره دشوارتر است. به عنوان مثال، هر گره Kubernetes باید با تمام گره های دیگر ارتباط برقرار کند، یعنی تعداد اتصالات به صورت درجه دوم افزایش می یابد و همه این اتصالات باید ردیابی شوند.

کنترل گر گره در Kubernetes Controller Manager به طور منظم از میان تمام گره های خوشه عبور می کند تا سلامت را بررسی کند - هر چه تعداد گره ها بیشتر باشد، بار روی کنترلر بیشتر می شود.

بار روی پایگاه داده etcd نیز در حال افزایش است - هر kubelet و kube-proxy فراخوانی می شود فرشته برای etcd (از طریق API)، که etcd باید به‌روزرسانی‌های شی را برای آن پخش کند.

به طور کلی، هر گره کارگر بار اضافی را بر اجزای سیستم گره های اصلی تحمیل می کند.

گره های کارگر Kubernetes: بسیاری از گره های کوچک یا چندین گره بزرگ؟
Kubernetes رسما از خوشه ها با تعداد گره ها تا 5000. با این حال، در عمل در حال حاضر 500 گره وجود دارد می تواند مشکلات غیر ضروری ایجاد کند.

برای مدیریت تعداد زیادی گره کارگر، باید گره های اصلی قدرتمندتری را انتخاب کنید. مثلا کوب آپ به صورت خودکار نصب می شود اندازه VM صحیح برای گره اصلی بسته به تعداد گره های کارگر. یعنی هر چه تعداد گره های کارگر بیشتر باشد، گره های اصلی باید بهره وری بیشتری داشته باشند.

برای حل این مشکلات خاص، تحولات خاصی وجود دارد، مانند کوبلوت مجازی. این سیستم به شما امکان می دهد محدودیت ها را دور بزنید و خوشه هایی با تعداد زیادی گره کارگر بسازید.

عیب شماره 2: هزینه های سربار بیشتر.
در هر گره کارگر، Kubernetes مجموعه‌ای از دیمون‌های سیستم را اجرا می‌کند - اینها شامل زمان اجرا کانتینر (مانند Docker)، kube-proxy و kubelet، از جمله cAdvisor است. آنها با هم مقدار مشخصی از منابع را مصرف می کنند.

اگر گره های کوچک زیادی دارید، نسبت این سربار روی هر گره بزرگتر است. به عنوان مثال، تصور کنید که همه دیمون های سیستم روی یک گره با هم از 0,1 هسته پردازنده و 0,1 گیگابایت حافظه استفاده می کنند. اگر یک گره ده هسته ای با 10 گیگابایت حافظه دارید، دیمون ها 1 درصد از ظرفیت کلاستر را مصرف می کنند. از سوی دیگر، روی ده گره تک هسته ای با 1 گیگابایت حافظه، دیمون ها 10 درصد از ظرفیت کلاستر را خواهند گرفت.

بنابراین، هر چه تعداد گره‌ها کمتر باشد، از زیرساخت کارآمدتر استفاده می‌شود.

عیب شماره 3. استفاده ناکارآمد از منابع
در گره‌های کوچک، ممکن است تکه‌های منابع باقی‌مانده آنقدر کوچک باشند که نمی‌توان حجم کاری را به آن اختصاص داد، بنابراین بلااستفاده می‌مانند.

به عنوان مثال، هر پاد به 0,75 گیگابایت حافظه نیاز دارد. اگر ده نود دارید که هر کدام یک گیگابایت حافظه دارند، می‌توانید ده پاد را اجرا کنید و هر گره را با 1 گیگابایت حافظه استفاده نشده باقی بگذارید.

این بدان معنی است که 25٪ از کل حافظه خوشه هدر می رود.

در یک گره بزرگ با 10 گیگابایت حافظه، می توانید 13 مورد از این ماژول ها را اجرا کنید - و تنها یک قطعه استفاده نشده 0,25 گیگابایتی وجود خواهد داشت.

در این حالت فقط 2,5 درصد از حافظه هدر می رود.

بنابراین، منابع در گره های بزرگتر بهینه تر استفاده می شوند.

چندین گره بزرگ یا تعداد زیادی گره کوچک؟

بنابراین، کدام بهتر است: چند گره بزرگ در یک خوشه یا بسیاری از گره های کوچک؟ مثل همیشه، هیچ پاسخ روشنی وجود ندارد. خیلی به نوع کاربرد بستگی دارد.

به عنوان مثال، اگر یک برنامه به 10 گیگابایت حافظه نیاز دارد، گره های بزرگتر انتخاب واضحی هستند. و اگر برنامه برای در دسترس بودن بالا نیاز به تکرار ده برابری داشته باشد، به سختی ارزش گذاشتن کپی را روی دو گره دارد - حداقل باید ده گره در خوشه وجود داشته باشد.

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

و اصلاً لازم نیست که همه گره ها به یک اندازه باشند. هیچ چیز مانع شما نمی شود که ابتدا گره هایی با اندازه یکسان را آزمایش کنید، سپس گره هایی با اندازه متفاوت به آنها اضافه کنید و آنها را در یک خوشه ترکیب کنید. گره های کارگر در یک خوشه Kubernetes می توانند کاملاً ناهمگن باشند. بنابراین می توانید سعی کنید مزایای هر دو روش را ترکیب کنید.

هیچ دستور العمل واحدی وجود ندارد و هر موقعیتی تفاوت های ظریف خاص خود را دارد و فقط تولید حقیقت را نشان می دهد.

ترجمه توسط تیم پلتفرم ابری تهیه شده است Mail.ru Cloud Solutions.

اطلاعات بیشتر در مورد Kubernetes: 25 ابزار مفید برای مدیریت و استقرار خوشه ها.

منبع: www.habr.com

اضافه کردن نظر