POD سادهترین واحد اجرایی در معماری Kubernetes است و همهی کانتینرها در نهایت داخل یک Pod اجرا میشوند. وقتی یک برنامه روی کوبرنتیز مستقر میشود، به جای اجرای مستقیم کانتینر و در قالب Pod مدیریت میشود تا شبکه، ذخیرهسازی و منابع پردازشی آن یکپارچه باشد. Pod به کوبرنتیز کمک میکند تا بداند هر بخش از برنامه کجا اجرا شده، چگونه مقیاس پیدا کند و چطور بین اجزای مختلف ارتباط برقرار شود. برای همین، شناخت Pod اولین قدم برای درک شیوهی عملکرد Kubernetes است.
برای درک بهتر نقش Pod و اهمیت آن در معماری Kubernetes، ادامهی مطلب را دنبال کنید و با مفاهیم کلیدی و کاربردهای آن آشنا شوید.
POD چیست؟
Pod کوچکترین واحد اجرایی در Kubernetes است و محیطی یکپارچه برای اجرای یک یا چند کانتینر ایجاد میکند. هر Pod آدرس IP مستقل، فضای شبکهی مشترک و مجموعهای از منابع دارد تا کانتینرها بتوانند کنار هم و بدون وابستگی به محیط خارجی اجرا شوند. این ساختار اجرای کانتینر از حالت صرف یک برنامهی مستقل را به یک موجودیت تحت کنترل و آماده برای زمانبندی در سیستم Kubernetes تبدیل میکند.
برای درک بهتر نقش Pod لازم است ابتدا با مفهوم کوبرنتیز آشنا شویم. مطالعهی مطلب Kubernetes چیست میتواند به درک این مفهوم کمک کند. کوبرنتیز یک پلتفرم متنباز برای مدیریت کانتینری است و کارهایی مانند مقیاسدهی، نظارت، هماهنگی سرویسها و توزیع بار را انجام میدهد. Kubernetes برای برنامهریزی و مدیریت کانتینرها، آنها را در قالب Pod اجرا میکند.
Pod دقیقن نقطهی اتصال کانتینر و زیرساخت Kubernetes است. این یعنی Pod نقش واسطه دارد و امکانات زیر را فراهم میکند:
- شبکهی مشترک برای تمام کانتینرهای داخل Pod
- امکان اشتراک حجمهای ذخیرهسازی
- نظارت و زمانبندی خودکار
- امکان مقیاسدهی و جایگزینی هنگام خطا
به همین دلیل، Pod پایهی اصلی هر سرویس در Kubernetes است و بدون آن هیچ کانتینری مدیریت نخواهد شد.
تفاوت Pod و Container
کانتینر یک بستهی نرمافزاری سبک است که برنامه را همراه با وابستگیهایش اجرا میکند. کانتینرها برای اجرای مستقل طراحی شدهاند و محیطی ایزوله دارند. با این حال، وقتی قرار است مجموعهای از سرویسها روی یک زیرساخت بزرگ و توزیعشده مدیریت شوند، اجرای کانتینر بهتنهایی کافی نیست. کانتینر نمیداند چه زمانی باید جایگزین شود یا چگونه با سرویسهای دیگر ارتباط برقرار کند.
در همین نقطه Pod وارد عمل میشود. این واحد سطح بالاتری از مدیریت را در Kubernetes مهیا میکند و در واقع نقش دستیار کوبرنتیز را دارد. Pod محیط مشترکی برای کانتینرها ایجاد میکند تا شبکه، استوریج، منابع و برنامهی زمانبندی یکسان داشته باشند. Kubernetes همیشه Pod را مدیریت میکند و همین باعث میشود کنترل اجرای برنامه بسیار دقیقتر انجام شود.
در جدول زیر تفاوتها مهم کانتینر و Pod را آوردهایم.
| مورد | کانتینر | Pod |
| ماهیت | واحد اجرای برنامه | واحد اجرایی Kubernetes که یک یا چند کانتینر را در خود نگه میدارد |
| مدیریت در Kubernetes | مستقیم مدیریت نمیشود | واحد اصلی مدیریت و زمانبندی |
| شبکه | آدرس IP مستقل ندارد | یک IP مشترک برای همهی کانتینرها |
| اشتراک منابع | بهشکل مستقل عمل میکند | اشتراک storage ،namespace و منابع |
| مقیاسپذیری | مقیاسدهی کانتینری دشوار و پراکنده است | Kubernetes Podها را مقیاس میدهد، نه کانتینرها را |
| هدف اجرایی | اجرای یک برنامه یا سرویس | ایجاد محیط مشترک برای همکاری چند کانتینر و اتصال به زیرساخت Kubernetes |
| هویت در سیستم | شناسهی داخلی Runtime | موجودیت رسمی که کوبرنتیز آن را شناسایی و مدیریت میکند |
تفاوت Pod و کلاستر
پاد کوچکترین واحد اجرایی در Kubernetes است، اما کلاستر بزرگترین ساختار این سیستم محسوب میشود. کلاستر مجموعهای از Nodeهاست که برنامهها روی آنها اجرا میشوند و Kubernetes این مجموعه را مدیریت میکند. در مقابل، Pod تنها یک واحد اجرایی کوچک است که روی یکی از این Nodeها قرار میگیرد.
کلاستر نقش زیرساخت را دارد و همهی منابع مانند CPU، حافظه، شبکه و فضای ذخیرهسازی در آن تعریف میشوند. Pod از همین منابع استفاده میکند و بدون وجود کلاستر اجرا نمیشود. کلاستر مجموعهای از Nodeها، سرویس کنترلکننده و اجزای مدیریتی است که Podها را میپذیرد و وضعیت آنها را پایش میکند.
ارتباط Pod و کلاستر کاملن به یکدیگر وابسته است. هر Pod بعد از ساخته شدن، Kubernetes آن را روی یکی از Nodeهای کلاستر قرار میدهد و برنامهی زمانبندی را برایش اجرا میکند. اگر پاد دچار خطا شود یا Node در دسترس نباشد، سیستم کنترلکننده در سطح کلاستر آن را بهطور مجدد ایجاد میکند یا به Node دیگری انتقال میدهد. در نهایت، Pod بخشی از یک سیستم بزرگتر است و تمام رفتارهای آن از راه کلاستر پشتیبانی و کنترل میشود.
چه تفاوتی بین POD و NODE وجود دارد؟
Pod و Node دو مفهوم متفاوت در معماری Kubernetes هستند و هر کدام نقش جداگانهای در اجرای برنامهها دارند. Pod کوچکترین واحد اجرایی است و برنامه یا سرویس داخل آن اجرا میشود. ولی Node یک ماشین فیزیکی یا مجازی است که منابع پردازشی را فراهم میکند. Pod برای اجرا همیشه به Node نیازمند است و بدون آن جایی برای فعالیت ندارد.
Node مجموعهای از منابع مانند CPU، حافظه، فضای ذخیرهسازی و شبکه را در اختیار کوبرنتیز میگذارد. Pod از این منابع استفاده میکند و محیط مورد نیاز کانتینرهای خود را شکل میدهد. برای همین، Node نقش میزبان را دارد و Pod مهمان آن است. هر پاد در نهایت روی یک Node قرار میگیرد و تمام فعالیتش تحت مدیریت همین Node انجام میشود.
ارتباط Pod و Node مستقیم و دایمی است. Kubernetes وضعیت Nodeها را بررسی میکند و ظرفیت آنها را میسنجد. وقتی یک Pod جدید ساخته میشود، سیستم کنترلکننده، آن را روی Node مناسب قرار میدهد. اگر Node دچار خطا شود یا ظرفیت کافی نداشته باشد، کوبرنتیز Pod را به Node دیگری منتقل یا نسخهی تازهای از آن را اجرا میکند. در نتیجه، پاد وابسته به توان پردازشی Node است و Node نگهداری و اجرای Pod را بهشکل پایدار و مطمین انجام میدهد.
انواع Pod
Podها به دو دستهی اصلی تقسیم میشوند: Podهای یککانتینری و چندکانتینری. هر دسته نقش متفاوتی در معماری Kubernetes دارد و برای سناریوهای خاص مورد استفاده قرار میگیرد.
1. Pod یککانتینری
این مدل سادهترین حالت اجرای برنامه در Kubernetes است. در این ساختار، فقط یک کانتینر داخل Pod قرار میگیرد و تمام منابع، شبکه و فضای ذخیرهسازی در اختیار همان کانتینر قرار میگیرد. این مدل برای اغلب سرویسهای مستقل و سبک مناسب است و مدیریت آن سادهتر انجام میشود.
2. Pod چندکانتینری
این مدل زمانی کاربرد دارد که چند کانتینر باید در کنار هم و با وابستگی نزدیک اجرا شوند. در این حالت، کانتینرها منابع اصلی مانند شبکه، IP و Volume را با هم به اشتراک میگذارند. این مدل برای الگوهایی مانند Sidecar ،Logging Proxy یا کانتینرهای کمکی مناسب است؛ چون همهی آنها باید در یک محیط مشترک کار کنند و بدون تاخیر با یکدیگر ارتباط داشته باشند.
مزایای Pod در کوبرنتیز
پاد ساختاری میدهد که اجرای سرویسها در Kubernetes تحت کنترل و مدیریت باشد. مهمترین مزایای Pod شامل موارد زیر است:
1. کوچکترین واحد اجرایی
Pod کوچکترین واحدی است که Kubernetes بهطور مستقیم آن را مدیریت میکند. این ویژگی باعث میشود کنترل دقیق منابع مانند پردازنده، حافظه و شبکه برای هر بخش از برنامه امکانپذیر باشد و توسعهدهندگان بتوانند رفتار برنامهها را با جزییات بیشتری مدیریت کنند.
2. چندکانتینری بودن
هر Pod میتواند یک یا چند کانتینر را در خود جای دهد و آنها منابع و شبکهی مشترک داشته باشند. این ویژگی به برنامههایی که نیازمند همکاری نزدیک چند سرویس هستند اجازه میدهد تا بدون پیچیدگی اضافی با هم هماهنگ عمل کنند و دادهها را بهشکل داخلی به اشتراک بگذارند.
3. مقیاسپذیری آسان
Podها را میتوان بهراحتی بهشکل افقی تکثیر کرد؛ یعنی تعداد نمونههای یک برنامه یا سرویس را بسته به نیاز افزایش یا کاهش داد. این قابلیت باعث میشود برنامهها بتوانند بدون اختلال، بار کاری بیشتر را مدیریت کنند و منابع سیستم بهینه مصرف شود.
4. مدیریت خودکار چرخه عمر
Kubernetes بهشکل خودکار Podها را ایجاد، حذف یا جایگزین میکند تا برنامه همیشه در وضعیت سالم و در دسترس باقی بماند. این مدیریت خودکار به کاهش خطاهای انسانی و افزایش پایداری سرویسها کمک میکند.
5. انعطاف در شبکه و ذخیرهسازی
هر Pod دارای یک آدرس IP منحصربهفرد است و میتواند به منابع ذخیرهسازی مختلف متصل شود. این ویژگی، هم برقراری ارتباط بین سرویسها و هم نگهداری دادهها را سادهتر میکند و امکان طراحی برنامههای پیچیده و مقیاسپذیر را فراهم میسازد.
پاد چگونه کار میکند؟
Pod زمانی فعال میشود که Kubernetes یک تعریف اجرایی دریافت کند و براساس آن تصمیم بگیرد Pod روی کدام Node اجرا شود. روند کار پاد از چند مرحلهی اصلی تشکیل شده است. وضعیت هر Pod در طول عمرش نشان میدهد در چه مرحلهای قرار دارد.
Kubernetes ابتدا مشخصات Pod را میخواند و ظرفیت Nodeها را مورد بررسی قرار میدهد. سپس، پاد را روی Node مناسب قرار میدهد و کانتینرهای داخل آن را اجرا میکند. بعد از اجرا، سیستم کنترلکننده وضعیت Pod را تحت نظر دارد تا اگر خطایی رخ داد، نسخهی جدید ساخته شود.
وضعیتهای اصلی Pod شامل چند حالت زیر است:
- Pending: زمانی که پاد ساخته شده ولی هنوز روی Node قرار نگرفته.
- Running: وقتی کانتینرها روی Node اجرا میشوند.
- Succeeded: هنگامی که اجرای کانتینرها بدون خطا تمام شده.
- Failed: زمانی که یکی از کانتینرها با خطا متوقف شده.
- Unknown: وقتی سیستم نمیتواند وضعیت دقیق Pod را از Node دریافت کند.
نحوه کار با POD بهکمک ابزار kubectl
برای مدیریت Pod، چند دستور پایه وجود دارد که وضعیت، جزییات و حذف آن را نشان میدهد. دستورهای Get ،Describe و Delete برای همین کار استفاده میشوند. اگر بخواهیم پاد جدید بسازیم، از Run بهره میبریم. در کارهای جدیتر هم تعریف Pod با فایل YAML انجام میشود و با Apply آن را اجرا میکنیم.
دستورهای کاربردی برای اجرا و مدیریت Pod را در ادامه مشاهده میکنید:
- kubectl get pods برای مشاهدهی فهرست Podها
- kubectl describe pod برای بررسی جزییات
- kubectl delete pod برای حذف
- kubectl run برای ساخت Pod ساده
- kubectl apply برای اجرای Pod تعریفشده با YAML
بررسی قالبهای پاد در کوبرنتیز
Pod Template ساختاری است که مشخصات یک Pod را بهشکل ثابت نگه میدارد تا Kubernetes بتواند براساس همان الگو، Podهای جدید بسازد. این قالب در اجزایی مانند Deployment ReplicaSet و DaemonSet کاربرد دارد و به عنوان نقشهی پایه استفاده میشود. هر بار که سیستم نیاز به ایجاد پاد تازه داشته باشد، از همین Template کمک میگیرد.
Pod Template شامل مواردی مانند نام کانتینر، تصویر، منابع، پورتها و Volumeهاست. وقتی تغییری در Template اعمال شود، کنترلکنندهها نسخههای جدید Pod را با این مشخصات میسازند. به این ترتیب، رفتار Podها در طول زمان مشخص و یکسان باقی میماند.
محدودیتها و نکات مهم درباره Pod
Pod یک واحد اجرایی موقت در Kubernetes است و طول عمر ثابتی ندارد. هر زمان که Node در دسترس نباشد یا کنترلکنندهها تصمیم بگیرند Pod جدیدی جایگزین کنند، پاد قبلی حذف میشود. برای همین، هیچ دادهای داخل خود Pod پایدار نمیماند و با حذف آن همهی اطلاعات داخلی از بین میرود.
برای نگهداری دادهها باید از Volumes دایمی استفاده کرد. این نوع Volume خارج از Pod نگهداری میشود و هنگام حذف یا ایجاد Pod جدید، دادهها همچنان باقی میماند.
جمعبندی
Pod کوچکترین واحد اجرایی در کوبرنتیز است و تمام اجزا برای اجرای یک یا چند کانتینر در آن قرار میگیرد. شناخت ساختار پاد، نحوهی تعریف آن در مانیفستها و آشنایی با قالبهای پاد، پایهایترین مهارت برای کار با Kubernetes بهشمار میرود؛ ؛ بهویژه زمانی که زیرساخت از طریق کانتینر ابری تامین شود و منابع بهشکل پویا در اختیار اپلیکیشن قرار بگیرند. اگر توسعهدهنده بداند پاد چگونه ساخته میشود و چه ارتباطی با کنترلرهایی مانند Deployment دارد، میتواند سرویسهای پایدارتر و مقیاسپذیرتری طراحی کند.
در نهایت، هرچه تسلط روی Pod Template بیشتر باشد، مدیریت چرخهی عمر اپلیکیشن سادهتر میشود و استقرار سرویسها با خطای کمتری انجام میگیرد.




