Kubernetes pod چیست و بررسی نقش POD در Kubernetes

اگر در دنیای کانتینرها و کوبرنتیز کار میکنید، احتمالاً با مشکلاتی مانند پیچیدگی مدیریت کانتینرها و مقیاسگذاری اپلیکیشنها روبرو شدهاید. اینجا جایی است که POD میتواند به شما کمک کند. پاد، مدیریت کانتینرها را سادهتر و عملکرد اپلیکیشنها بهینه میکند. اما چرا POD تا این اندازه مهم است؟ در این مقاله فالنیک به این سوال جواب میدهیم و میگوییم POD چیست، چه کاربردهایی دارد، انواع مختلف آن کداماند و چرا استفاده از آن به شما کمک میکند، مدیریت بهتری داشته باشید. همچنین، خواهیم دید که چطور خدمات مجازیسازی شبکه میتوانند در کنار PODها مدیریت منابع شبکه را بهینه کنند. پس با ما همراه باشید تا جواب سوالهایتان را پیدا کنید.
فهرست محتوا
آشنایی با مفهوم کانتینر
قبل از اینکه بگوییم Kubernetes pod چیست؟ باید با مفاهیم کانتینر و کوبرنتیز آشنا شوید تا راحتتر بتوانید مفهوم پاد در کوبرنیتز را درک کنید. کانتینر به طور ساده، مانند یک جعبه یا باکس است که میتواند یک برنامه یا اپلیکیشن را همراه با تمام نیازمندیها و تنظیماتش، مانند کتابخانهها، فایلها و محیطهای مورد نیاز، در خود نگه دارد. این جعبه به طور مستقل از سیستمعاملهای دیگر اجرا میشود و میتوانید آن را در هر جایی، از لپتاپ شخصی گرفته تا سرورهای ابری، بدون مشکل اجرا کنید. این کار باعث میشود که برنامهها همیشه در محیط یکسانی اجرا شوند و دیگر نیازی به نگرانی در مورد تنظیمات مختلف سیستمها نباشد.
بیشتر بدانید: کانتینر چیست
آشنایی با پلتفرم کوبرنتیز
کوبرنتیز نیز یک سیستم مدیریت خودکار برای کانتینرهاست. به عبارت سادهتر، کوبرنتیز به شما کمک میکند تا کانتینرهای مختلف را که ممکن است در نقاط مختلف شبکه یا سرورها پراکنده باشند، بهطور منظم و بدون دردسر مدیریت کنید. این سیستم نهتنها به شما کمک میکند که کانتینرها را راهاندازی کنید، بلکه میتواند بهطور خودکار تعداد کانتینرها را براساس نیازها افزایش یا کاهش دهد، به مشکلات رسیدگی کند و به این ترتیب مدیریت اپلیکیشنها را سادهتر کند. برای آشنایی بیشتر با کوبرنتیز مطالعه مقاله کوبرنتیس چیست را پیشنهاد میکنیم.

Kubernetes pod چیست؟
پادها (Pods) در کوبرنتیز واحدهای کوچکی هستند که میتوانند یک یا چند کانتینر را در خود جای دهند. به طور ساده، یک POD به مجموعهای از کانتینرها گفته میشود که منابع مشترک دارند و در یک محیط مشترک اجرا میشوند. این قابلیت به شما کمک میکند،کانتینرهای وابسته به هم را در کنار هم قرار دهید و بهراحتی مدیریت کنید.
این کانتینرها میتوانند شامل کانتینرهای برنامه کاربردی اصلی و کانتینرهای کمکی مانند کانتینرهای مدیریت لاگها یا مانیتورینگ باشند.
پادها ماهیتاً موقتی (ephemeral) هستند؛ یعنی هر زمان که یک پاد یا نودی که پاد روی آن اجرا میشود دچار مشکل یا خرابی شود، کوبرنتیس بهطور خودکار نسخه جدیدی از همان پاد را در نود دیگری از کلاستر راهاندازی میکند تا عملیات جاری بهطور مستمر ادامه پیدا کند. کوبرنتیس با این ویژگی برنامهها و سرویسها را بهصورت خودکار و بدون وقفه مدیریت میکند.
علاوه بر این، پادها محیطهایی را برای اجرای کانتینرها فراهم میکنند. این محیطها شامل ذخیرهسازی دائمی (Persistent Storage) هستند که به پادها این امکان را میدهد که دادهها و فایلها را در سطح کلاستر ذخیره و به اشتراک بگذارند. همچنین پادها میتوانند دادههای پیکربندی مورد نیاز برای اجرای برنامهها را از منابع مختلف مثل ConfigMaps و Secrets دریافت کنند.
یک مثال از دنیای واقعی برای درک مفهوم پاد کوبرنتیز
فرض کنید یک وب اپلیکیشن خیلی ساده دارید که از دو بخش زیر تشکیل شدهاست:
- یک بخش فرانتاند: ظاهر سایت رو نشان میدهد و کاربر با آن تعامل دارد.
- یک بخش بکاند: اطلاعات سایت را پردازش میکند و به فرانتاند میفرستد.
حالا میخواهیم این وب اپلیکیشن را روی Kubernetes اجرا کنیم. برای این کار، میتوانیم از POD استفاده کنیم.
ابتدا یک POD تعریف میکنیم که شامل دو تا کانتینر باشد:
- یک کانتینر برای بخش فرانتاند که کد فرانتاند وب اپلیکیشن داخل آن قرار دارد.
- یک کانتینر برای بخش بکاند که کد بکاند وب اپلیکیشن داخل آن است.
این دو کانتینر داخل یک POD با هم در ارتباط هستند و میتوانند بهراحتی اطلاعات را بین خود رد و بدل کنند. در واقع، POD مانند خانهای برای این دو کانتینر است که آنها را کنار هم نگه میدارد و امکان ارتباطشان را فراهم میکند.
شاید بپرسید چرا باید از POD استفاده کنیم؟ چرا نمیتوانیم هر کانتینر رو جداگانه اجرا کنیم؟
POD به ما کمک میکند تا برنامههای کاربردی پیچیده را که از چندین بخش تشکیل شدهاند، به راحتی مدیریت کنیم. وقتی کانتینرها داخل یک POD هستند،Kubernetes میتواند آنها را به عنوان یک واحد در نظر بگیرد و به راحتی مدیریتشان کند.

نحوه استفاده از POD در کوبرنتیز
همانطور که گفتیم، PODها واحدهای اجرایی پایهای در کوبرنتیز هستند که اغلب بهطور مستقیم ساخته نمیشوند، بلکه از طریق Workload Resources مانندDeployment یا StatefulSet مدیریت میشوند. این روش نه تنها مقیاسپذیری و پایداری بهتری دارد، بلکه باعث میشود مدیریت PODها آسانتر شود. در ادامه میخواهیم نحوه ایجاد و مدیریت یکPOD را توضیح دهیم:
ایجاد یک POD ساده
به عنوان مثال، یک POD که شامل یک کانتینر nginx با نسخه 1.14.2 است را میتوانیم به صورت زیر در فرمت YAML تعریف کنیم:
apiVersion: v1 kind: Pod :metadata name: nginx :spec :containers name: nginx- image: nginx:1.14.2 :ports containerPort: 80- |
برای ایجاد این POD در کوبرنتیز، نیز کافی است دستور زیر را اجرا کنیم:
kubectl apply -f https://k8s.io/examples/pods/simple-pod.yaml |
این دستور، فایل simple-pod.yaml را خوانده و POD مورد نظر را در کلاستر ایجاد میکند.
مدیریت PODها با استفاده از Workload Resources
سوالی که پیش میآید این است که چرا PODها مستقیماً ایجاد نمیشوند؟
در اکثر موارد، به جای ایجاد مستقیم PODها، از Workload Resources مانند Deployment یا Job استفاده میشود. این روش مزایای زیادی دارد:
- مدیریت بهتر مقیاسپذیری: برای اجرای چندین نمونه از یک برنامه، بهجای ایجاد دستی چندین POD، بهتر است از Deployment استفاده کنید. این کار باعث میشود PODها به صورت خودکار مقیاسپذیر شوند.
- خودترمیمی(Auto-Healing) : اگر یک POD به هر دلیلی دچار مشکل شود، کوبرنتیز به طور خودکار آن را جایگزین میکند.
- ذخیره وضعیت (Stateful Applications): اگر به ذخیره وضعیت در PODها نیاز دارید، باید از StatefulSet استفاده کنید که برای اپلیکیشنهایی که نیاز به حفظ داده دارند، مناسبتر است.
ارتباط بین PODها و مقیاسپذیری
در کوبرنتیز، هر POD یک نمونه از اپلیکیشن را اجرا میکند. اگر بخواهید اپلیکیشن خود را در مقیاس بزرگتر اجرا کنید، باید چندین POD ایجاد کنید. این کار از طریق Replication انجام میشود، که با Deployment مدیریت میشود.
منابع اشتراکی در PODها
PODها به صورت خودکار دو نوع منبع اشتراکی را برای کانتینرهای درون خود ایجاد میکنند:
شبکه مشترک: تمام کانتینرهای داخل یک POD آدرس IP مشترکی دارند و میتوانند از طریق localhost با یکدیگر ارتباط برقرار کنند.
فضای ذخیرهسازی مشترک: کانتینرهای یک POD میتوانند از Volumes برای اشتراکگذاری دادهها استفاده کنند.

پاد در کوبرنتیز چطور کار میکند؟
پاد در کوبرنتیز یک گروه از کانتینرهاست که روی یک Node اجرا میشود. پادها بهطور خودکار توسط کنترلرها مدیریت میشوند و در صورت خرابی، جایگزین میشوند. همچنین پادها از Volumes برای ذخیره داده و از شبکه داخلی کوبرنتیز برای ارتباط استفاده میکنند.
به زبان ساده فرض کنید PODها مانند خانهای برای کانتینرهای داخل Kubernetes هستند. هر خانه (POD) میتواند یک یا چند اتاق (کانتینر) داشته باشد. این اتاقها (کانتینرها) با هم یکسری موارد مانند آب و برق (منابع) و راهرو (شبکه) را به اشتراک میگذارند. در ادامه هر مرحله از روش کار پاد را توضیح میدهیم:
پادها چطور اجرا و مدیریت میشوند؟
تمام کانتینرهای داخل پاد رویNode اجرا میشوند و منابع مشترکی مثل فضایذخیرهسازیو شبکه دارند. مثلاً فرض کنید یک برنامه وب دارید که شامل یک سرور (Nginx) و یک سیستم پردازش داده است. میتوانید این دو را داخل یک پاد قرار دهید تا با همدیگر بهخوبی کار کنند.
پادها توسط کوبرنتیز زمانبندی و روی یک Node مشخص اجرا میشوند. اگر مشکلی برای پاد پیش بیاید، کنترلرهای کوبرنتیز آن را شناسایی کرده و پادی جدید ایجاد میکنند. پادها همچنین میتوانند شامل کانتینرهای Init باشند که قبل از اجرای برنامه اصلی اجرا شده و محیط را آماده میکنند.
وضعیتهای مختلف پاد
هر پاد میتواند یکی از وضعیتهای زیر را داشته باشد:
- Pending: در حال آمادهسازی، اما هنوز اجرا نشده است.
- Running: در حال اجرا است.
- Succeeded: اجرای آن با موفقیت به پایان رسیده است.
- Failed: اجرای آن با مشکل مواجه شده است.
- Unknown: وضعیت نامشخص است (بهدلیل مشکلات ارتباطی).
کنترلرهای کوبرنتیز؛ مدیریت خودکار پادها
پادها نمیتوانند خودشان را حذف یا جایگزین کنند، بنابراین کوبرنتیز از کنترلرها برای این کار استفاده میکند. کنترلرها بهصورت خودکار وضعیت پادها را بررسی کرده و پادهای خراب را جایگزین میکنند. چند نوع کنترلر مهم در کوبرنتیز عبارتند از:
- Job Controller: اجرای یک کار مشخص (مثل پردازش یک فایل)
- Deployment: مدیریت برنامههای بدون وضعیت (مثل یک سرور وب)
- StatefulSet: مدیریت برنامههایی که نیاز به ذخیره داده دارند (مثل یک پایگاه داده)
ذخیرهسازی دادهها در پاد
پادها دادههای خود را درVolumes ذخیره میکنند. این دادهها ممکن است:
- موقتی(Ephemeral) : بعد از حذف پاد از بین بروند.
- دائمی(Persistent): حتی پس از حذف پاد، باقی بمانند.
به عنوان مثال، اگر یک پایگاه داده را روی کوبرنتیز اجرا کنید، دادههای آن باید در یک فضای ذخیرهسازی دائمی قرار بگیرند تا با حذف پاد از بین نروند.
شبکه در پادها
هر پاد یک آدرس IP مخصوص دارد. کانتینرهای داخل پاد میتوانند مستقیماً با هم ارتباط برقرار کنند، اما برای ارتباط با پادهای دیگر باید از شبکه داخلی کوبرنتیز استفاده کنند.به عنوان مثال:
- دو کانتینر داخل یک پاد (مثلاً یک سرور و یک دیتابیس) میتوانند مستقیماً با هم ارتباط داشته باشند.
- اما اگر دو پاد جدا از هم باشند، باید از آدرسهای IP برای ارتباط استفاده کنند.

بررسی قالبهای پاد (Pod Templates) در کوبرنتیز
قالب پاد (Pod Template) در کوبرنتیز یک الگوی از پیش تعریفشده برای ایجاد پادهاست. این قالبها مشخص میکنند پادها چطور اجرا شوند، چه کانتینرهایی داشته باشند، چه تنظیماتی روی آنها اعمال شود و چه متغیرهای محیطی (Environment Variables) تنظیم شوند.
قالبهای پاد اغلب داخل منابع کاری (Workload Resources) مانند Deployment، Job و DaemonSet قرار دارند و توسط کنترلرها برای ساخت و مدیریت پادها استفاده میشوند.
چطور یک قالب پاد کار میکند؟
کنترلرها از قالبهای پاد برای ایجاد و مدیریت پادها استفاده میکنند. قالب پاد بخشی از وضعیت مطلوب (Desired State) برنامه شما در کوبرنتیز است. وقتی شما یک پاد را ایجاد یا بهروزرسانی میکنید، کوبرنتیز از این قالب برای ساخت نسخه جدید آن استفاده میکند.
در مثال زیر یک Job تعریف شده که شامل یک قالب پاد است. این پاد یک کانتینر دارد که پیامی را چاپ کرده و برای 3600 ثانیه متوقف میشود:
apiVersion: batch/v1 kind: Job :metadata name: hello :spec :template # قالب پاد از اینجا شروع میشود :spec :containers name: hello- image: busybox:1.28 command: [‘sh’, ‘-c’, ‘echo “Hello, Kubernetes!” && sleep 3600’]restartPolicy: OnFailure # قالب پاد در اینجا پایان مییابد |
در اینجا:
- spec.template قالب پاد را تعریف میکند.
- این پاد شامل یک کانتینر به نام hello است.
- کانتینر از تصویر busybox:1.28 استفاده میکند.
- دستور echo “Hello, Kubernetes!” && sleep 3600 را اجرا میکند.
- اگر اجرای پاد شکست بخورد، سیاست راهاندازی مجدد (restartPolicy) روی «OnFailure» تنظیم شده و پاد دوباره اجرا میشود.
تغییر در قالب پاد چه تأثیری دارد؟
وقتی قالب یک پاد را تغییر میدهید، پادهای موجود تغییر نمیکنند. بلکه کنترلر پادهای جدیدی براساس قالب جدید ایجاد میکند و در صورت نیاز پادهای قدیمی را حذف میکند. مثلا در StatefulSet، اگر قالب پاد را تغییر دهید، کوبرنتیز بهتدریج پادهای جدید را جایگزین پادهای قدیمی میکند تا همه پادها با تنظیمات جدید همگام شوند.
نقش قالب پاد در مدیریت خودکار پادها
- Deployment: برای مدیریت برنامههای بدون وضعیت (Stateless) مانند سرورهای وب.
- StatefulSet: برای برنامههای با وضعیت (Stateful) مثل پایگاه داده.
- Job: برای انجام وظایف موقتی و خاص مثل پردازش یک فایل یا ارسال ایمیل.
- DaemonSet: برای اجرای پادهای سیستمی روی همه Nodeها مثل ابزارهای نظارتی
انواع پاد در کوبرنتیز
در کوبرنتیز، پادها به دو دسته کلی تقسیم میشوند:
پادهای تککانتینری (Single-Container Pods)
- در این مدل، هر پاد فقط یک کانتینر را اجرا میکند.
- این کانتینر شامل تمام وابستگیها و منابع مورد نیاز برای اجرای برنامه است.
- سادهترین و رایجترین نوع پاد است و برای برنامههایی مناسب است که نیازی به کانتینرهای وابسته ندارند.
مثال، اجرای یک وبسرور Nginx به عنوان یک پاد مستقل:
apiVersion: v1 kind: Pod :metadata name: nginx-pod :spec :containers name: nginx image: nginx:latest ports: containerPort: 80 |
پادهای چندکانتینری (Multi-Container Pods)
در این مدل، یک پاد چندین کانتینر را در یک سرور اجرا میکند.
این کانتینرها با یکدیگر وابستگی دارند و باید منابعی مانند فایلها، دادهها یا فضای ذخیرهسازی را به اشتراک بگذارند.
به کمک این روش، میتوانید معماریهایی مانند الگوی Sidecar را پیادهسازی کنید.
مثال، یک پاد که شامل یک سرور Nginx و یک کانتینر جانبی (Sidecar) برای ثبت لاگهاست:
apiVersion: v1 kind: Pod :metadata name: nginx-with-logger :spec :containers name: nginx- image: nginx:latest :ports containerPort: 80- name: log-collector- image: busybox:latest command: [‘sh’, ‘-c’, ‘while true; do echo “Logging data”; sleep 5; done’] |
پادهای تکرارشونده (Replicated Pods)
- پادهای تکرارشونده (Replicated Pods) خودشان یک نوع مستقل از پاد نیستند، بلکه چندین پاد یکسان هستند که توسط یک کنترلر مدیریت میشوند.
- چندین پاد یک برنامه را اجرا میکنند تا قابلیت مقیاسپذیری (Scalability) و افزونگی (Redundancy) فراهم شود.
- این پادها اغلب توسط یک کنترلر مانند Deployment یا StatefulSet مدیریت میشوند.
- در صورت خرابی یک پاد، کنترلر پاد جدیدی برای جایگزینی آن ایجاد میکند.
مثال، اجرای چندین پاد از یک برنامه Nginx با استفاده از Deployment:
apiVersion: apps/v1 kind: Deployment :metadata name: nginx-deployment :spec replicas: 3 :selector :matchLabels app: nginx :template :metadata :labels app: nginx :spec :containers name: nginx- image: nginx:latest :ports containerPort: 80- |
مزایای استفاده از POD در کوبرنتیز
پاد کوبرنتیز درحالیکه مدیریت و اجرای کانتینرها را آسانتر، مقیاسپذیرتر و انعطافپذیرتر میکند، ارتباط بین کانتینرها و پادها را نیز بهبود میبخشد. مزایای پاد در کوبرنتیز عبارتند از:
- ارتباط آسان بین کانتینرها
وقتی یک پاد شامل چندین کانتینر باشد، این کانتینرها در یک فضای شبکه مشترک قرار دارند و میتوانند از طریق localhost
با هم ارتباط برقرار کنند. این کارباعث میشود که ارتباط بین کانتینرها ساده و سریعتر باشد.
2. ارتباط آسان بین پادها
پادها میتوانند از طریق IP اختصاصی خودشان یا منابع مشترک با دیگر پادها ارتباط برقرار کنند. این ویژگی به هماهنگی بین سرویسهای مختلف در یک کلاستر کمک میکند.
3. پشتیبانی از کانتینرها (init مقدماتی)
پادها میتوانند کانتینرهای اولیه (init containers) را قبل از کانتینرهای اصلی اجرا کنند. این قابلیت برای آمادهسازی محیط اجرا (مثل بارگیری تنظیمات یا ایجاد فایلهای ضروری) بسیار مفید است.
3. مقیاسپذیری آسان
پادها بهصورت خودکار قابل مقیاسگذاری هستند. یعنی براساس افزایش یا کاهش درخواستها، پادهای تکراری (Replica Pods) ایجاد یا حذف میشوند. این موضوع باعث میشود که منابع سیستم بهینه مصرف شوند و عملکرد بهتری داشته باشیم.

دستورات پایهای kubectl برای مدیریت پادها
بعد از این که با مفاهیم پایهای پادها آشنا شدیم، در این قسمت میخواهیم به یکی از ابزارهای اصلی مدیریت پادها یعنی kubectl
نگاهی بندازیم. با دستورات پایهای kubectl
میتوانید پادها را در کلاستر کوبرنتیز ایجاد، مشاهده و حذف کنید. این دستورات از جمله مهمترین ابزارهایی هستند که مدیران و کاربران کوبرنتیز برای تعامل با منابع کلاستر استفاده میکنند.
سه دستوری که در ادامه معرفی میکنیم سه دستور رایج و کاربردی برای مدیریت پادها هستند:
دستور kubectl get
این دستور اطلاعات مربوط به یک یا چند منبع (resource) را به صورت جدول نمایش میدهد و میتوانید از آن برای گرفتن اطلاعات در مورد PODها، Deploymentها، سرویسها و غیره استفاده کنید. همچنین میتوانید اطلاعات را با استفاده از label selectorها فیلتر کنید و آنها را فقط از فضای نام فعلی یا از همه فضاهای نام در کلاستر نمایش دهید. دستور kubectl api-resources لیستی از همه منابع پشتیبانیشده که میتوانید اطلاعاتشان را با get ببینید، نشون میدهد.
دستور kubectl create
این دستور برای ایجاد منابع، از جمله PODها، کاربرد دارد. شما یک فایل YAML یا JSON که مشخصات POD را داخل آن تعریف کردهاید، به این دستور میدهید؛ سپس با استفاده از این دستور و ارجاع به فایل مذکور، میتوانید POD مورد نظر را ایجاد کنید.
دستور kubectl delete
این دستور به منظور حذف منابع مختلف در Kubernetes، از جمله PODها، مورد استفاده قرار میگیرد. هنگام حذف یک POD، ابتدا یک بازه زمانی تحت عنوان grace period (به طور پیش فرض ۳۰ ثانیه) به آن اختصاص داده میشود تا فرآیندهای در حال انجام خود را به اتمام برساند. پس از اتمام این بازه زمانی، در صورتی که POD همچنان در حال اجرا باشد، به اجبار (forcefully) حذف خواهد شد. لازم به ذکر است که مقدار grace period قابل تغییر بوده و از طریق flag –grace-period قابل تنظیم است.
آنچه در پاسخ به سوال «Kubernetes pod چیست؟» گفتیم
در این مقاله فالنیک گفتیم که pod چیست و چرا بهعنوان یکی از اجزای کلیدی پاد کوبرنتیز شناخته میشود. ابتدا به تعریف و کاربردهای پاد پرداختیم و توضیح دادیم که چگونه پادها بستر اصلی اجرای کانتینرها در کوبرنتیز را فراهم میکنند. سپس مزایای استفاده از پادها، از جمله انعطافپذیری، مقیاسپذیری و مدیریت آسان منابع را شرح دادیم.
در ادامه، نحوه ذخیرهسازی دادهها در پادها و تفاوت میان ذخیرهسازیهای موقت و پایدار را بیان کردیم. همچنین به بررسی نحوه ارتباط شبکهای پادها و چگونگی استفاده از کنترلرها برای مدیریت خودکار وضعیت آنها پرداختیم. در کل، هدف این مقاله نشان دادن اهمیت پادها در کوبرنتیز و چگونگی کمک آنها به بهبود مدیریت اپلیکیشنهای پیچیده و مقیاسپذیر است.