آنچه در این مقاله میخوانید [پنهانسازی]
اگر تازه وارد Kubernetes شده باشی یا حتی مدتی با آن کار کرده باشی، خیلی زود با مفهومی به نام Pod روبه رو می شوی. اینجاست که سوال Kubernetes Pod مطرح می شود. Kubernetes Pod کوچک ترین واحد اجرایی در این پلتفرم است و تقریبا همه چیز از همین جا شروع می شود. در این مقاله می خواهیم دقیق و کاربردی بررسی کنیم Pod چیست، چرا وجود دارد و چرخه حیات آن چگونه مدیریت می شود.
سرفصل های مقاله
- Kubernetes Pod چیست
- چرا Kubernetes به Pod نیاز دارد
- Pod چه منابعی را به اشتراک می گذارد
- Pod چگونه ایجاد می شود
- چرخه حیات Pod از ابتدا تا حذف
- وضعیت های مختلف Pod
- Pod و Restart کانتینرها
- تفاوت Pod با کانتینر
- ارتباط Pod با Node
- Pod و Volume ها
- مدیریت Pod با Label و Selector
- Pod در مقیاس پذیری چه نقشی دارد
- Pod و خودترمیمی در Kubernetes
- چه زمانی نباید Pod مستقیم ساخت
- Pod در معماری واقعی Kubernetes
- جمع بندی
Kubernetes Pod چیست
Kubernetes Pod کوچک ترین واحدی است که Kubernetes آن را اجرا و مدیریت می کند. Pod می تواند شامل یک یا چند کانتینر باشد که با هم اجرا می شوند و منابع مشترک دارند. این کانتینرها معمولا به شدت به هم وابسته هستند و قرار است کنار هم یک وظیفه مشخص را انجام دهند. Kubernetes Pod در واقع لایه ای بالاتر از کانتینر است و Kubernetes مستقیما با Pod کار می کند، نه با کانتینر تکی.
چرا Kubernetes به Pod نیاز دارد
ممکن است بپرسی چرا Kubernetes مستقیما کانتینرها را مدیریت نمی کند. دلیلش این است که بعضی کانتینرها باید همیشه کنار هم باشند. مثلا یک کانتینر اصلی و یک کانتینر کمکی برای لاگ گیری یا مانیتورینگ. Pod این امکان را می دهد که این کانتینرها به عنوان یک واحد دیده شوند، با هم زمان بندی شوند و با هم از بین بروند.
Pod چه منابعی را به اشتراک می گذارد
کانتینرهای داخل یک Pod منابع مهمی را به اشتراک می گذارند. IP یکسان دارند، می توانند از طریق localhost با هم ارتباط برقرار کنند و Volume های مشترک دارند. این اشتراک باعث می شود ارتباط بین کانتینرها ساده و سریع باشد. البته همین موضوع باعث می شود Pod ها برای اجرای طولانی مدت و Stateful به تنهایی مناسب نباشند.
Pod چگونه ایجاد می شود
به ندرت Pod به صورت مستقیم ساخته می شود. معمولا Pod ها توسط آبجکت های بالادستی مثل Deployment یا Job ایجاد می شوند. این آبجکت ها وضعیت مطلوب را تعریف می کنند و Kubernetes Pod ها را بر اساس آن می سازد. اگر Pod به صورت مستقیم ساخته شود و از بین برود، Kubernetes آن را دوباره ایجاد نمی کند. به همین دلیل در محیط واقعی، Pod مستقیم کمتر استفاده می شود.
چرخه حیات Pod از ابتدا تا حذف
چرخه حیات Pod چند مرحله مشخص دارد. ابتدا Pod ساخته می شود و وارد وضعیت Pending می شود. در این مرحله Kubernetes دنبال Node مناسب می گردد. بعد از زمان بندی، Pod وارد حالت Running می شود. اگر کانتینرها با موفقیت اجرا شوند، Pod فعال است. در نهایت، Pod ممکن است وارد حالت Succeeded یا Failed شود و در صورت نیاز حذف گردد.
وضعیت های مختلف Pod
Pod می تواند وضعیت های مختلفی داشته باشد. Pending یعنی هنوز روی Node اجرا نشده است. Running یعنی حداقل یک کانتینر در حال اجراست. Succeeded یعنی همه کانتینرها با موفقیت تمام شده اند. Failed یعنی حداقل یکی از کانتینرها با خطا متوقف شده است. Unknown هم زمانی اتفاق می افتد که Kubernetes نتواند وضعیت Pod را تشخیص دهد.
Pod و Restart کانتینرها
اگر یکی از کانتینرهای داخل Pod از کار بیفتد، بسته به تنظیمات، Kubernetes می تواند آن را دوباره اجرا کند. این رفتار به Restart Policy بستگی دارد. نکته مهم این است که Restart شدن کانتینر به معنی ایجاد Pod جدید نیست. Pod همان Pod قبلی باقی می ماند، فقط کانتینر داخل آن دوباره اجرا می شود.
تفاوت Pod با کانتینر
کانتینر واحد اجرای برنامه است، اما Pod واحد مدیریت Kubernetes است. یک Pod می تواند چند کانتینر داشته باشد، اما هر کانتینر فقط در یک Pod اجرا می شود. Kubernetes Pod مفهوم شبکه، ذخیره سازی و زمان بندی را به کانتینر اضافه می کند. به همین دلیل در معماری Kubernetes همیشه با Pod فکر می کنیم، نه کانتینر تنها.
ارتباط Pod با Node
هر Pod روی یک Node اجرا می شود و نمی تواند بین Node ها جابجا شود. اگر Node از دسترس خارج شود، Pod هم از بین می رود. Kubernetes معمولا Pod جدیدی روی Node دیگر ایجاد می کند، اما این یک Pod جدید است، نه همان قبلی. این نکته برای درک Stateless بودن Pod بسیار مهم است.
Pod و Volume ها
Pod می تواند از Volume ها برای ذخیره داده استفاده کند. Volume ها عمرشان به Pod وابسته است. یعنی وقتی Pod حذف شود، Volume هم از بین می رود، مگر اینکه نوع خاصی از ذخیره سازی استفاده شود. Volume ها برای اشتراک داده بین کانتینرهای داخل Pod بسیار کاربردی هستند.
مدیریت Pod با Label و Selector
Label ها نقش مهمی در مدیریت Pod ها دارند. با Label می توان Pod ها را دسته بندی کرد. Service و Deployment از Selector برای انتخاب Pod ها استفاده می کنند. اگر Label ها درست طراحی نشوند، ارتباط بین اجزای سیستم به هم می ریزد. این موضوع یکی از خطاهای رایج در Kubernetes است.
Pod در مقیاس پذیری چه نقشی دارد
وقتی تعداد Replica ها افزایش پیدا می کند، در واقع Pod های بیشتری ساخته می شوند. Kubernetes Pod واحد اصلی مقیاس پذیری است. هر Pod یک نمونه از اپلیکیشن را اجرا می کند. افزایش یا کاهش بار کاری یعنی اضافه یا حذف Pod ها، نه تغییر داخل یک Pod.
Pod و خودترمیمی در Kubernetes
اگر یک Pod به هر دلیلی از بین برود، Kubernetes به صورت مستقیم آن را جایگزین نمی کند. این کار توسط Deployment یا ReplicaSet انجام می شود. Kubernetes Pod به تنهایی خودترمیم نیست، اما در کنار آبجکت های دیگر بخشی از سیستم خودترمیم Kubernetes می شود.
چه زمانی نباید Pod مستقیم ساخت
ساخت مستقیم Pod برای تست یا آزمایش ممکن است مفید باشد، اما برای محیط عملیاتی توصیه نمی شود. چون اگر Pod حذف شود، چیزی آن را جایگزین نمی کند. در پروژه های واقعی همیشه بهتر است از Deployment، StatefulSet یا Job استفاده شود تا مدیریت Pod ها خودکار باشد.
Pod در معماری واقعی Kubernetes
در معماری واقعی، Pod ها دائما ساخته و حذف می شوند. نباید به Pod به چشم یک موجود دائمی نگاه کرد. Pod یک واحد موقتی است که برای اجرای اپلیکیشن ساخته می شود. اگر این نگاه را بپذیری، طراحی معماری بسیار ساده تر و اصولی تر می شود.
جمع بندی
Kubernetes Pod پایه و اساس اجرای اپلیکیشن در Kubernetes است. همه چیز از Pod شروع می شود و به Pod ختم می شود. اگر بدانی Kubernetes Pod چیست و چرخه حیات آن چگونه کار می کند، درک بقیه مفاهیم Kubernetes برایت خیلی راحت تر خواهد شد. شناخت Pod یعنی فهمیدن قلب تپنده Kubernetes و این قدمی مهم در مسیر حرفه ای شدن است.






