مفهوم Pod چیست؟
یک Pod پایه ای ترین قسمت Kubernetes است و همچنین کوچکترین و ساده ترین قسمت از مدل اشیاء
کوبرنیتیس Kubernetes object model است ، که می توان آن را ایجاد کرد و توسعه داد. یک Pod نمایانگر
پردازش در حال اجرا، در کلاستر می باشد.
یک Pod ، یک مخزن application ( و در برخی موارد چندین مخزن ) ، منابع ذخیره ساز ، یک آدرس IP منحصر
به فرد و گزینه هایی که مشخص می کنند مخزن ها چطور اجرا شوند را ، کپسوله می کند. یک Pod یک قسمت
از توسعه را معرفی می کند:
یک نمونه کوچک از یک برنامه Kubernetes که یا حاوی یک مخزن است و یا شامل
چند مخزن وابسته به یکدیگر است و این منابع به اشتراک گذاشته می شود. Pod ها از تمامی مخازن زمان اجرا
به خوبی پشتیبانی می کنند و Docker که محبوب ترین مخزن زمان اجرا است نیز از Kubernetes Pods استفاده می کند.
نحوه استفاده از Pod ها در کلاسترینگ Kubernetes
- پاد های شامل یک مخزن :one-container-per-Pod محبوب ترین حالت مورد استفاده در Kubernetes است.
- در این حالت فرض کنید که یک مخزن بسته بندی شده است و Kubernetes به جای استفاده مستقیم از
- مخزن از Pod استفاده می کند.
- پاد های شامل چند مخزن:که برای کار کردن به یکدیگر نیاز دارند : یک پاد می تواند شامل یک برنامه چند
- مخزن مورد نیاز به صورت محلی باشد که این مخزن ها به شدت به یکدیگر وابسته هستند ، و همه این ها در
- یک Pod به اشتراک گذاشته شده اند.
این مخزن هایی که به صورت محلی بسته بندی شده اند به صورت یک واحد یکپارچه مانند یک مخزن از فایل های
منابع به اشتراک گذاشته شده به صورت عمومی سرویس دهی می کنند ، در حالی که یک مخزن جداگانه این
فایل ها را به روز رسانی و مجدد بازخوانی می کند. پاد این مخازن و ذخیره ساز های به اشتراک گذاشته شده
را بسته بندی کرده و یک موجودیت جدید با قابلیت مدیریت ارائه می کند.
هر Pod به معنای اجرای یک نمونه برنامه تعیین شده است. اگر می خواهید چندین برنامه را به صورت موازی
و همزمان اجرا کنید ، باید برای هرکدام یک پاد را اجرا کنید. در Kubernetes به این کار Replication گفته می شود.
Replicates Pod ها معمولا به صورت گروهی و به وسیله مفهومی به نام Controller ایجاد و مدیریت می شوند.
برای اطلاعات پاد ها و Controller ها را مطالعه کنید.
چطور پاد ها چندین مخزن را کنترل می کنند
پاد ها برای تبدیل چندین پردازش وابسته به یکدیگر ( مانند مخازن ) و ارائه آنها به صورت یک سرویس یکپارچه
طراحی شده است. مخازن موجود در پاد به صورت خودکار و به صورت محلی و زمان بندی شده بر روی یک
ماشین مجازی یا کلاستر کار می کنند. این مخزن ها منابع و پیش نیازهایشان را به اشتراک می گذارند و با
یکدیگر در ارتباط هستند و به صورت هماهنگ با یکدیگر تا خاتمه کار همکاری دارند.
دقت کنید که این مورد استفاده از چندین مخزن که به صورت محلی بهم متصل هستند و مدیریت می شوند
یک حالت نسبتا پیشرفته است. از این حالت باید در موارد خاص که مخزن ها به شدت به یکدیگر وابسته هستند
استفاده کنید. برای مثال ممکن است که شما یک مخزن داشته باشید که به عنوان یک وب سرور برای فایل های
به اشتراک گذاشته شده در یک منبع ، سرویس دهی می کند و یک مخزن جداگانه دیگری داشته باشید که با
استفاده از منابع دیگر و راه دور این فایل ها را تغییر داده و به روز رسانی می کنند
برخی پاد ها مخازن راه انداز init Containers مانند مخازن برنامه های کاربردی دارند. این مخازن راه انداز قبل
اجرا شدن مخازن مربوط به برنامه های کاربردی، اجرا شده و کامل می شوند. پاد ها از دو نوع منابع به اشتراک
گذاری شده Shared Resource برای مخزن های تشکیل دهنده خود استفاده می کنند : شبکه و ذخیره ساز.
شبکه
هر Pod یک آدرس IP منحصر فرد را به خود اختصاص می دهد. هر مخزن در هر پاد محیط شبکه خود را که شامل
آدرس IP و پورت شبکه است را به اشتراک می گذارد. مخزن های
داخل Pod با یکدیگر از طریق localhost در ارتباط هستند. هر زمان که مخزن های
داخل یک پاد بخواهند با یک موجودیت خارج از پاد ارتباط برقرار کنند باید از منابع به
اشتراک گذاشته شده استفاده کنند.
ذخیره ساز
یک Pod می تواند مجموعه از ذخیره سازهای به اشتراک گذاشته را داشته باشد. همه مخزن های داخل پاد می توانند
به ذخیره سازهای به اشتراک گذاشته شده دسترسی داشته باشند و همچنین می توانند اجازه دسترسی به
داده های به اشتراک گذاشته شده را نیز داشته باشند. همچنین می توان دسترسی دائم و خودکار به ذخیره
سازهای مشترک داد تا اگر مخزنی نیاز به راه اندازی مجدد داشت این دسترسی از بین نرود.
کار کردن با Pod ها
Pod ها برای اهداف و مصارف نسبتا کوتاه مدت طراحی شده اند و به همین دلیل به ندرت پیش می آید
که Pod های تکی در Kubernetes ایجاد کنید. هنگامی که یک Pod ایجاد می شود
( چه مستقیما توسط خودتان یا غیر مستقیم توسط Controller ) برنامه ریزی می شود تا در یک
گره یا Node در کلاستر اجرا شود و در همان Node تا زمان اتمام پردازش ، حذف شدن Pod ، خارج
کردن Pod از گره به علت کمبود منابع و یا بروز خطا در گره ، باقی می ماند.
نکته : راه اندازی مجدد یک مخزن داخل Pod نباید با راه اندازی مجدد خود پاد اشتباه گرفته شود. یک پاد
خودش اجرا نمی شود ولی یک زیرساختی را فراهم می کند که مخزن ها تا زمانی که
حذف نشده اند در آن اجرا می شوند.
Pod ها حالت خود درمانی یا خود ترمیمی ندارند و اگر وقتی زمان بندی شده اند که در یک گره کار کنند ،
دچار مشکل شوند ، پاد ها حذف می شوند. به همین ترتیب اگر گره ای دچار مشکل کمبود منابع شود و
یا برای رفع مشکل در حالت تعمیرات قرار گیرد ، Pod ها حذف خواهند شد. Kubernetes از کی مفهموم
سطح بالایی به نام Controller استفاده می کند که تا حدودی کارهایی که Pod ها باید انجام دهند را مدیریت
می کنند. این حالت استفاده Kubernetes از Controller ها برای مدیریت Pod ها بسیار رایج است.
Pod ها و Controller ها
یک Controller می تواند چندین پاد را ایجاد و مدیریت کند ، مدیریت Replication ها و برنامه ریزی ها و حالت
خود تعمیری در کلاستر. برای مثال اگر یک گره دچار خطا شود ، به صورت خودکار یک گره یکسان دیگر را جایگزین می کند.
قالب های Pod
قالب های پاد ها مشخصات فنی آن ها هستند و شامل عناصر دیگر مانند Replication Controllers, Jobs,
و DaemonSets می شوند. Controller ها با استفاده از قالب ها پاد ها رو ایجاد می کنند. در زیر یک مثال
روشن از یک پاد آورده شده که شامل یک مخزن است که یک پیغام را چاپ می کند :
apiVersion: v1 kind: Pod metadata: name: myapp-pod labels: app: myapp spec: containers: – name: myapp-container image: busybox command: [‘sh’, ‘-c’, ‘echo Hello Kubernetes! && sleep 3600’]
قالب پاد ها علاوه بر مشخص کردن وضعیت فعلی از همه حالت ها ،
مانند یک قالب کیک عمل می کنند. قالب کیک یک کیک را شکل می دهد و هیچ رابطه ای
با آن کیک ندارد. تغییرات بعدی قالب حتی انتقال به یک قالب جدید، روی پاد هایی که تا الان ایجاد شده اند تاثیر مستقیمی ندارند. به بیان ساده تر پادها
توسط یک replication controller ها که متعاقبا به روز رسانی خواهند شد ، ایجاد می شوند و مشخص
کردن وضعیت فعلی همه مخزن های متعلق به Pod ها یک عملکرد منطقی است.