کوبرنتیز نود یا Kubernetes Node یکی از اصلیترین مکانیزمها در سیکل اجرایی کلاستر کوبرنتیز است. یک نود در واقع یک تکنولوژی سخت افزاری یا نرم افزاری (شبیهسازی شده) است که به اجرای کانتینرهای مربوط به کلاستر کوبرنتیز کمک میکند.
این موضوع را در نظر بگیرید که نودها بخش حیاتی از چرخه کاری کوبرنتیز هستند و نیاز است که بهخوبی با ساختار آن آشنا شده و کار کنید.
به همین دلیل امروز در این مطلب از وبلاگ همروش قصد داریم با چیستی Nodeها در کوبرنتیز، انواع آن، تفاوت نود با دیگر بخشهای ساختار کوبرنتیز و موضوعات مرتبط دیگری آشنا شویم.
منظور از Node در کوبرنتیز چیست؟
Node در کوبرنتیز، کوچکترین واحد محاسباتی در ساختار کوبرنتیز است که بهعنوان یک ابزار پردازشی و اجرایی (Single Machine) در داخل کلاستر اصلی کوبرنتیز قرار گرفته است.
نود میتواند هم به صورت فیزیکی (در داخل دیتا سنتر) و هم بهصورت مجازی (در فضای ابری) تعریف شود. هر نود دارای یکسری منابع سختافزاری است که از این منابع برای اجرای Podها و کانتینرها استفاده میشود.
اگر بخواهیم به زبان بسیار سادهتری پاراگراف قبلی را خلاصه کنیم میتوانیم بگوییم که یک نود در واقع یک تکنولوژی است که دارای منابع سخت افزاری (CPU و RAM) بوده و برای اجرای اپلیکیشنها و Workloadها استفاده میشود.
انواع Node در کوبرنتیز
در ساختار کوبرنتیز دو نوع Node وجود دارد که براساس ساختار و وظایفی که بر عهده دارند از همدیگر جدا میشوند.
Master Node
مستر نود در ساختار کوبرنتیز بهعنوان نود اصلی در نظر گرفته میشود. مستر نود مسئول اجرا کردن Control Plane در کوبرنتیز است.
Control Plane در کوبرنتیز، تمام ساختار کلاسترها را کنترل و مدیریت میکند. هر کلاستر حداقل باید یک Master Node داشته باشد. البته در بیشتر ساختارها از دو تا سه مورد استفاده میشود تا در صورت بروز مشکل یک مستر نود دیگر بتواند کارها را پیش ببرد.
اجزای مستر نود شامل API Server، دیتابیس etcd، مدیر کنترلر (Controller Manager) و یک ابزار زمانبندی (Scheduler) میشود. در ادامه با این موارد بیشتر آشنا خواهیم شد.
Worker Node
اصلیترین Node که مسئولیت اجرای اپلیکیشنهای کانتینرسازی شده را برعهده دارد Worker Node یا نود کارگر است. بنابراین شما برای مقیاسدهی به پروژهتان میتوانید نودهای کارگر جدیدی را به کلاستر کوبرنتیز اضافه کنید. اجزای نود کارگر شامل Kubelet، Kube-Proxy و Container Runtime میشود. در ادامه مقاله راجع به این اجزاء صحبت خواهیم کرد.
آشنایی با اجزا یک Node در کوبرنتیز
همانطور که اشاره شد چهار جزء اصلی در فرایند اجرای کانتینرها برای هر Master Node وجود دارد که به شرح زیر است.
API Server
API Server در کوبرنتیز مانند یک Control Plane عمل میکند. این بخش از مستر نود تنها قسمتی است که به صورت مستقیم با etcd برای اعتبارسنجی و پیکربندی دادهها ارتباط دارد. همچنین این بحش وظیفه مدیریت ترافیک بین نمونههای اپلیکیشن را برعهده دارد. بیشتر ارتباطات در این بخش از طریق یکسری درخواست REST صورت میگیرد.
Etcd
Etcd یک دیتابیس ساده، یکپارچه و البته با دوام در امر اجرا است که وضعیت کلاستر را در خود ذخیره میکند. تعداد پادها، فضاهای نامی، آبجکتهای API و سرویسها از جمله مواردی هستند که در این دیتابیس ذخیره میشوند.
Controller Manager
مهمترین وظیفهای که مدیر کنترلر برعهده دارد این است که وضعیت مطلوب مورد نظر ما به انجام برسد. اینکار با انجام یکسری پردازشها و عملیاتهای مختلف صورت میگیرد که برای مثال بررسی تعداد نمونه پادها و بررسی سلامت Endpointها از جمله آنهاست.
Scheduler
همانطور که در ادامه خواهید خواند، وظیفه اصلی Scheduler انتساب یک پاد به یک نود است. البته به همین سادگیها نیز نیست چرا که در این فرایند متغیرهای بسیار زیادی بررسی میشود.
آشنایی با اجزاء Worker Node در کوبرنتیز
همانطور که اشاره شد سه جزء اصلی در فرایند اجرای کانتینرها برای هر Worker Node وجود دارد که به شرح زیر است:
Kubelet
در اصل Kubelet یک نرم افزار مدیریتی است که روی نودهای کوبرنتیز اجرا شده و با Control Plane مربوط به کلاستر ارتباط برقرار میکند. وظیفه اصلی Kubelet مدیریت فرایند دیپلوی یا مستقر شدن پادها روی نودهای کوبرنتیز است. Kubelet از API Server برای انجام عملیاتهای اجرایی مربوط به کانتینرها (اجرا یا توقف) دستور میگیرد.
Kube-proxy
این مورد در واقع یک پروکسی شبکه است که روی هر نود در کوبرنتیز اجرا میشود. وظیفه اصلی Kube-proxy نگهداری و یکپارچهسازی قواعد شبکه روی هر نود به صورت جداگانه است. منظور از قواعد شبکه، رویکردهای ارتباطی است که بین پادها و نودها وجود دارد تا بتوانند به خوبی با همدیگر ارتباط برقرار کنند.
Kube Proxy در سه حالت مختلف اجرا میشود: iptables، ipvs و userspace. گزینه iptables حالت پیشفرض در کوبرنتیز بوده و برای کلاسترهایی که حجم متوسطی دارند مورد استفاده قرار میگیرد. ipvs حالت دیگری است که میتواند از حجم بالایی از سرویسها پشتیبانی کند. همچنین در هنگام نیاز برای پردازش موازی انتخاب این حالت کاربردی خواهد بود. userspace یک حالت نسبتا قدیمی بوده و منسوخ شده است، بنابراین پیشنهاد میشود از آن استفاده نکنید.
Container Runtime
Container Runtime به صورت مستقیم مسئول اجرا کانتینرها است. در محیط کوبرنتیز چندین محیط اجرایی برای کانتینرها وجود دارد که از میان آنها میتوان به CRI-O، داکر و Contained اشاره کرد.
Node در کوبرنتیز چگونه کار میکند؟
تا به اینجای کار به صورت کامل با Node، انواع و اجزاء آن آشنا شدیم. حال نیاز است که به درک کلی از چگونه کار کردن آن برسیم.
زمانی که یک نود جدید توسط کاربر ایجاد میشود، کوبرنتیز یک Node Object که در واقع نماینده همان نود اصلی است ایجاد کرده و از کارکرد درست آن مطمئن میشود. بعد از اینکار پادها به نود اختصاص مییابند و براساس منابعی کافی که در اختیارشان هست فرایند اجرای Workload را انجام میدهند.
برای اضافه کردن یک Node جدید به API Server دو روش مرسوم وجود دارد. یک روش اضافه کردن Node Object به صورت دستی از طریق Control Plane است. اما روش دیگر به صورت خودکار و از طریق Kubelet انجام میشود.
پس از ایجاد یک نود، Control Plane وظیفه دارد که معتبر بودن آن را تایید کند. تنها زمانی فرایند اعتبارسنجی به درستی تکمیل میشود که نود از سلامت کافی برخوردار باشد و بتواند سرویسهای مختلف را اجرا یا متوقف کند.
زمانی که این فرایند با خطا مواجه شود و Node نتواند اعتبار لازم را بدست بیاورد، کوبرنتیز آنقدر فرایند اعتبارسنجی را تکرار میکند تا در نهایت، یا جواز لازم را کسب کند یا حذف شود.
به عنوان یک نکته مهم این را بگوییم که در زمان ایجاد نود به صورت دستی شما باید منابع لازم برای نود مورد نظر را به صورت دستی تعریف کنید. این در حالیست که در روش دوم، نودها به صورت خودکار دسترسی به CPU و RAM را درخواست میکنند.
بعد از انجام موفقیت آمیز تمام این مراحل، کامپوننت Scheduler پادها را برای اجرا شدن به نود ارسال میکند و مطمئن میشود که تعداد درخواستهای ارسالی با ظرفیت Node همخوانی داشته باشد.
تفاوت Pod و Node در کوبرنتیز
Pod و Node لازم و ملزوم یکدیگر هستند. در واقع اگر پاد وجود نداشته باشد، وجود Node اهمیت و تاثیری نخواهد داشت و اگر Node وجود نداشته باشد، Pod نمیتواند اجرا شود. به همین دلیل این دو مورد در کنار همدیگر نقش مهمی در سیکل کاری کوبرنتیز ایفا میکنند.
برای اینکه با ساختار هر دو این تکنولوژیها بیشتر آشنا شویم، میتوانیم آنها را با همدیگر مقایسه کنیم.
نود یک واحد ضروری در کلاستر کوبرنتیز است و به صورت مجازی و فیزیکی قابلیت پیادهسازی را دارد. شما میتوانید به هر نود مانند یک استخر از منابع سخت افزاری (پردازنده و حافظه اصلی/CPU و RAM) نگاه کنید که کانتینرهای مورد نظر در آنها اجرا میشوند. زمانی که یک اپلیکیشن در کلاستر اصلی دیپلوی میشود، کوبرنتیز آن را بین نودهای مختلف توزیع میکند.
از طرفی دیگر Pod کوچکترین واحد اجرایی در کلاستر کوبرنتیز است. هر پاد شامل یک یا چند کانتینر است. هر پاد از طریق Scheduler به یک نود اختصاص مییابد و در نتیجه اگر به صورت یک ایده کلی بخواهیم برایتان توضیح دهیم باید بگوییم که پادها در داخل Nodeها قرار میگیرند. همچنین Podها بیدوام هستند. به این معنی که اگر یک پاد با خطا یا مشکل روبهرو شود، کوبرنتیز آن را متوقف کرده و یک نسخه جدید از آن پاد را ایجاد میکند تا همه چیز به صورت عادی به کار خود ادامه دهد.
در پایان
Nodeها بخشی کلیدی در فرایند مدیریت و اجرای کلاسترهای کوبرنتیز هستند و به همین دلیل نیاز است که به صورت تخصصی و عمیق در ارتباط با عملکرد آنها آشنا شوید.
در این مطلب ما سعی کردیم اصلیترین نکات Nodeها را به شما آشنا کنیم تا بتوانید به صورت دقیقتری فرایند یادگیری آن را پیش بگیرید. موضوعاتی که در این مطلب بررسی شد، چیستی Node، انواع Node، ساختار و اجزاء Node، شیوه کارکرد Node و همچنین تفاوت Node با Pod بود.