POD چیست؟ + انواع و کاربردهای Pod در Kubernetes
در این مقاله میخوانید
- POD چیست؟ خانه یا میزبانی برای کانتینرها
- کاربرد پاد در کوبرنتیز؛ دستیار کمکی کوبرنتیز برای اجرای کانتینر
- انواع POD در Kubernetes؛ پادهایی با یک یا چند کانتینر
- مزایای POD؛ سادهکردن فرایند زیرساخت کوبرنتیز
- مدیریت کانتینر با PODs؛ پادها چگونه کار میکنند؟
- بررسی قالبهای POD
- نحوه کار با POD بهکمک ابزار kubectl
- جمعبندی
- سؤالات متداول
POD چیست؟ در پاسخ به این پرسش، ابتدا باید نگاهی به عملکرد کوبرنتیز بیندازیم. برای جداسازی برنامهها در سرویسهای مختلف نرمافزاری، سازمانها به ابزار زیرساخت مانند کوبرنتیز نیاز دارند. کوبرنتیز این امکان را فراهم میکند تا کانتینرها بهطورخودکار در ماشینهای مجازی اجرا شوند.
درواقع، Kubernetes مانند سیستمعاملی است که روی چند سرور بهصورت یکپارچه اجرا میشود؛ درنتیجه باتوجهبه اجرای خودکار کانتینر در کوبرنتیز، کاربران میتوانند بهراحتی با اپلیکیشن و سرویسهایشان در تعامل باشند، بدون اینکه نیاز باشد برای هر اپلیکیشن از سیستمعامل جدا استفاده کنند.
در این مطلب از مقالات سرویسهای میزبانی بلاگ پارس پک، قصد داریم شما را با مفهوم جزئیترین عضو در سرویس کوبرنتیز، یعنی POD، آشنا کنیم. پس از خواندن این مطلب، خواهید فهمید POD در کوبرنتیز چیست و چه نقشی ایفا میکند.
POD چیست؟ خانه یا میزبانی برای کانتینرها
پاد (POD) بهمعنای غلاف یا پوسته است. کانتینرهای مختلف که بهطورمشترک برنامه کاربردی خاصی را اجرا میکنند، در دستههایی به نام POD قرار میگیرند. این یعنی پاد در Kubernetes مانند میزبان یا خانهای برای کانتینرها عمل میکند.
پادها در NOD قرار گرفتهاند. NOD یا گره بهعنوان کوچکترین واحد سختافزار محاسباتی در کوبرنتیز شناخته میشود. بهعبارتدیگر، میتوان NOD را مانند کامپیوتری کوچک در کلاستر در نظر گرفت. بهبیان بهتر، به مجموعهای از NODهای پردازشی کلاستر (Cluster) میگویند. پادها قابلیت خودترمیمی ندارند. قابلیت Ephemeral در پاد باعث میشود با ازبینرفتن یک پاد، پوسته یا پاد دیگری با IP جدید جای آن را بگیرد.
برای مشخصشدن سیستمعامل پاد در لینوکس و ویندوز، نیاز است spec.os.name را وارد کنید. در نسخه v1.27 کوبرنتیز مقداری که برای این بخش وارد میکنید، تأثیری روی سرویس زمانبندی پاد نمیگذارد. تنظیم .spec.os.name فقط برای اعتبارسنجی سیستمعامل POD کاربردی خواهد بود.
کوبرنتیز بهعنوان فناوریای جدید برای خودکارکردن فرایند اپلیکیشنهای کانتینری شناخته میشود. به کوچکترین واحد کوبرنتیز که میزبانی کانتینرها را برعهده دارد، پاد میگویند. پاد در کوبرنتیز سازمانها را از فرایندهای تکراری و خستهکننده مانند توقف دستی کانتینرها نجات میدهد.
کاربرد پاد در کوبرنتیز؛ دستیار کمکی کوبرنتیز برای اجرای کانتینر
کوبرنتیز نمیتواند مستقیماً کانتینرها را اجرا کند و برای این منظور از پاد (POD) استفاده میکند. اگر POD در Kubernetes وجود نداشته باشد، کانتینرهای اپلیکیشن یا سرویس ناچارند روی ماشین مجازیای اجرا شوند که سنگینتر از اپلیکیشنهای کانتینر هستند.
درعینحال که هر کانتینر دربرابر کانتینر پادهای دیگر ایزوله است، منبع هر کانتینر با منابع کانتینرهای هر POD بهطورمشترک در یک شبکه قرار دارد. درواقع، کانتینرها درعینحال که از هم جدا و ایزوله هستند، سختافزار مشابهی دارند.
زمانیکه کانتینر در پاد سازماندهی میشود، کوبرنتیز برای سنجش مقیاسپذیری برنامه از کنترلرهای تکرار (Replication Controllers) استفاده میکند. بهعبارتدیگر، اگر پاد Overload شود، کوبرنتیز بهطورخودکار آن را تکرار میکند. این یعنی وقتی بار لود زیاد است، کوبرنتیز عملکرد سالم خود را تا زمانی تکرار میکند که دربرابر ازکارافتادن سیستم ناشی از Overload جلوگیری کند.
هنگامیکه درخواست ساخت پاد جدید را به کوبرنتیز میدهید، پاد با استفاده از منابع کوبرنتیز در API مربوط به پاد ساخته میشود. همچنین، Scheduler بهعنوان سرویس زمانبندی کوبرنتیز بهترین گره را برای قرارگیری پاد و محتویات آن پیدا میکند.
انواع POD در Kubernetes؛ پادهایی با یک یا چند کانتینر
پادها در کلاستر کوبرنتیز به دو شیوه کانتینرها را اجرا میکنند. علاوهبراین، چندین پاد همزمان میتوانند یک برنامه را اجرا کنند. این نوع عملکرد مفهوم تکرار در پاد است. انواع پاد عبارتاند از:
۱. پادهایی که با یک کانتینر اجرا میشوند
مدل one-container-per-POD یا یک کانتینر بهازای هر پاد رایجترین کاربرد استفاده از کوبرنتیز است. در این نمونه، یک پاد بهعنوان خانه یا پوسته فقط در اطراف یک کانتینر قرار گرفته است. کوبرنتیز نیز بهجای مدیریت مستقیم کانتینر، پادها را مدیریت میکند.
۲. پادهایی با چند کانتینر که برای کارکردن بههم وابسته هستند
یک پاد چند کانتینر را درحالیکه کاملاً ایزوله هستند، همزمان با یک منبع مشترک دراختیار میگیرد. این کانتینرها در یک پاد کار واحدی انجام میدهند. برای مثال، یک کانتینر در پاد دادهای در حجم مشخص ذخیره میکند؛ درحالیکه کانتینر دیگر در همان پاد فایلهای ذخیرهشده را بهروزرسانی میکند. پاد هر دوِ این کانتینرها را دربر میگیرد و امکان مدیریت را برای کاربر فراهم میکند.
منابعی که پاد در کوبرنتیز برای کانتینرهای خود استفاده میکند، شامل دو منبع شبکه و منبع ذخیرهسازی است:
اشتراکگذاری دیتا بین کانتینرها ازطریق شبکه در پاد
کانتینرهای موجود در POD از یک IP و پورت استفاده میکنند که با آیپی کانتینرهای موجود در سایر پادها متفاوت است؛ درنتیجه، با همین ایپی کانتینرهای پاد میتوانند ازطریق لوکال هاست یا میزبانی محلی یکدیگر را پیدا کنند. برای برقراری ارتباط بین کانتینرهای داخل با خارج یک پاد، نیاز است از شبکه و منابع بهاشتراکگذاشته استفاده کنند. کانتینرهای موجود در پاد با نام میزبان سیستم با عنوان name در پاد نمایش داده میشوند.
اشتراکگذاری دیتا بین کانتینرها ازطریق ذخیرهسازی در پاد
در پاد، میتوان از فضای ذخیرهسازی مشترک استفاده کرد. کانتینرها در پاد میتوانند به اطلاعات مشترک دسترسی داشته باشند یا اطلاعاتشان را بهاشتراک بگذارند. علاوهبراین، با دادن دسترسی دائم یا خودکار به ذخیرهسازهای مشترک، این قابلیت فراهم است که اگر کانتینری از بین رفت، دسترسی بقیه از بین نرود.
برای آشنایی با نقاط قوت و ضعف Kubernetes و Docker مقاله زیر را از دست ندهید.
مزایای POD؛ سادهکردن فرایند زیرساخت کوبرنتیز
پادها انقلابی در نحوه مدیریت کانتینرها بهوجود آوردند. هر پاد همزمان میتواند برای مدیریت چند کانتینر استفاده شود. پادهای کوبرنتیز محل مناسبی برای اجرای عملکرد کانتینر ایجاد میکنند. ارتباط بین کانتینر در پادهای کوبرنتیز ازطریق شبکههای محلی برقرار میشود. این شبکهها امکان اشتراکگذاری داده و حجم و وضعیت کانتینرها را فراهم میکند.
علاوهبراین، هر پاد آدرس IP مشخصی دارد که با آن با سایر پادها در ارتباط خواهد بود. همچنین، پادها امکان مقیاسپذیری سرویس و اپلیکیشنها را سادهتر میکنند. باتوجهبه نیاز کوبرنتیز، کنترلرها میتوانند پادهای تکراری ایجاد یا پادهای بلااستفاده را بهطورخودکار حذف کنند.
مدیریت کانتینر با PODs؛ پادها چگونه کار میکنند؟
علاوهبر کانتینرهای اپلیکیشن و سرویس، POD ممکن است از کانتینرهای اینیت (Init Containers) برخوردار باشد. این نوع کانتینرها قبل از کانتینرهای اپلیکیشن داخل پاد اجرا میشوند و پس از مدتی بهپایان میرسند. پس از اتمام موفقیتآمیز کانتینرهای اینیت، سایر کانتینرها میتوانند کارشان را آغاز کنند.
در کوبرنتیز این امکان برای کاربر فراهم است تا خودش پاد را ایجاد کند. بااینحال، کنترلرهای کوبرنتیز نیز این کار را با بهترین نتیجه انجام میدهند. کنترلرهای کوبرنتیز پادها را براساس وضعیت آنها مدیریت میکنند. هر پاد کوبرنتیز شامل یکی از وضعیتهای زیر است:
۱. در حال انتظار (Pending)
این وضعیت نشان میدهد که پاد با موفقیت در کلاستر ایجاد شده است؛ بااینحال، یک یا چند کانتینر در آن اجرا نمیشود.
۲. در حال اجرا (Running)
این وضعیت نشاندهنده زمانی است که پاد در یک NOD قرار گرفته و تمام کانتینرهای آن در حال اجرا یا راهاندازی مجدد است.
۳. باموفقیت (Succeeded)
این وضعیت نشان میدهد که تمام کانتینرهای پاد با موفقیت کارشان را انجام داده و بهپایان رسیدهاند. پس از پایان پادها، مجدداً راهاندازی نخواهند شد.
۴. ناموفق (Failed)
در این وضعیت، بهروزرسانی یا اجرای کانتینر در پاد ناموفق است. همه پادهای پایانیافته وضعیت صفر دارند و هر وضعیت دیگری بهجز موقعیت صفر، بهعنوان ناموفق شناخته میشود.
۴. ناشناخته (Unknown)
در این حالت، کنترلر کوبرنتیز نمیتواند وضعیت پاد را شناسایی کند.
علاوهبراین، وضعیت پاد بهعنوان شرایط پاد شناخته میشود. شرایط نشان میدهد دلایل ایجاد وضعیت فعلی پاد چه بوده است.
بررسی قالبهای POD
کنترلرهای کوبرنتیز از قالبهای مشخصی برای ایجاد پاد استفاده میکنند و برای کارهایی مانند Deployment یا Deamonsets ساخته میشوند. نمونه زیر، مثالی از قالب پاد است که کانتینر پیامی را بهواسطه آن چاپ میکند:
apiVersion: batch/v1 kind: Job metadata: name: hello spec: template: # This is the POD template spec: containers: - name: hello image: busybox:1.28 command: ['sh', '-c', 'echo "Hello, Kubernetes!" && sleep 3600'] restartPolicy: OnFailure # The POD template ends here
تغییر قالب پاد تأثیری روی پادهای قبلی نمیگذارد. اگر قالب پاد را برای منابع Workload تغییر دهید، منبع پادهای دیگری جایگزین میکند. برای مثال، کنترلر Statefulset تضمین میدهد که پاد فعلی با StatefulSet مطابقت دارد. اگر قالب StatefulSet را تغییر دهید، پادهای جدیدی ایجاد خواهد کرد. درنهایت، تمام دادههای قدیمی با الگوی جدید جایگزین میشوند. همچنین، کوبرنتیز امکان مدیریت مستقیم PODها را برایتان فراهم میکند. باوجوداین، در بهروزرسانی برخی از فیلدهای پاد محدودیتهایی وجود دارد.
بهعنوان نمونه، اغلب دادههای ابری مربوط به POD تغییرناپذیرند؛ یعنی نمیتوانید فیلدهایی مانند namespace ،name ،uid یا creationTimestamp را تغییر دهید؛ بلکه فقط میتوانید مقدار فعلی را افزایش دهید. افزونبراین، اگر مقدار metadata.deletionTimestamp تنظیم شده باشد، هیچ ورودی جدیدی را نمیتوان به metadata.finalizers اضافه کرد. بهروزرسانیهای پاد ممکن است فیلدهایی بهجز spec.containers[*].image یا spec.initContainers[*].image یا spec.activeDeadlineSeconds یا spec.tolerations را تغییر دهد. درواقع، فقط میتوانید دیتای جدید به آنها وارد کنید.
نحوه کار با POD بهکمک ابزار kubectl
با استفاده از ابزار خط فرمان kubectl میتوان وظایف مختلف پادها را مدیریت کرد و کارهایی مانند استقرار اپلیکیشنها، کنترل، مدیریت منابع و مشاهده لاگها را انجام داد. درادامه، دستورهای اصلی این نرمافزار را باهم بررسی خواهیم کرد:
۱. نحوه دریافت PODs
زمانیکه به اطلاعات پادهای کوبرنتیز نیاز دارید، از دستور get PODs در kubectl استفاده کنید. این دستور اطلاعات چندگانه درباره منابع هر پاد را به شما میدهد. اگر اطلاعاتی راجع به پاد خاصی میخواهید، از دستور kubectl get PODs name_of _POD میتوانید استفاده کنید. همچنین، بهکمک دستور kubectl api-resources، میتوانید دادهها را مطابق درخواست کاربر فیلتر کنید.
۲. نحوه ایجاد PODs
برای ایجاد پاد، از این دستور زیر میتوان استفاده کرد:
$ kubectl create -f FILENAME
ازآنجاکه پادها موقتی هستند و ممکن است از کار بیفتند، با استفاده از کنترلر باید پاد را ایجاد کنید. کنترلرهایی مثل Deployment و Job وStatefulSets این اطمینان را میدهند که پادها بهطورمؤثر در حال اجرا هستند.
۳. نحوه بهروزرسانی PODs
همانطورکه پیشتر گفتیم، پس از ایجاد پاد، برخی از اطلاعات داخل آن مانند متادیتا و فیلد و نامها تغییرناپذیرند؛ بنابراین، آپدیت و بهروزرسانی برخی از فایلها در پاد محدودیت دارد. درعوض، با دستورهای کوبرنتیز میتوان قالب پاد را تغییر داد و قالب جدیدی از پاد جایگزین آن کرد.
۴. نحوه حذف PODs
برای حذف پاد، از این دستور استفاده کنید:
$ kubectl delete -f ./myPOD.yaml
این دستور پاد را بهسرعت حذف میکند. بهطورکلی، پادها یک دوره ۳۰ثانیهای برای اتمام کار خود دارند. با این دستور مدتزمان ۳۰ثانیهای طی نخواهد شد و بلافاصله پاد حذف میشود. حذف اجباری پاد با منابع مشترک شامل حذف فضای ذخیرهسازی نمیشود. ناگفته نماند که NODها ممکن است کمی دیرتر متوجه حذف پاد شوند؛ بههمیندلیل، حذف دستوری پاد ممکن است به ناهماهنگی در کوبرنتیز منجر شود. در حالت عادی، حداکثر ۱۰ دقیقه برای حذف پادهای بلااستفاده زمان نیاز است. پیشنهاد میکنیم بهجای حذف دستی، اجازه دهید این کار بهطورخودکار انجام شود.
مزایا و معایب استفاده از داکر چیست و چرا باید از Docker استفاده کنیم؟ در مقاله زیر بخوانید.
جمعبندی
POD در کوبرنتیز به کوچکترین و اساسیترین بخش کوبرنتیز میگویند. در این مطلب از مقالات سرویسهای میزبانی بلاگ پارس پک، مفهوم پاد را بررسی کردیم و توضیح دادیم که چگونه میتوان آن را ایجاد و مدیریت کرد. پاد در Kubernetes از یک یا چند کانتینر تشکیل شده است که بهصورت منابع ذخیرهسازی مشترک یا ازطریق شبکه باهم در ارتباط هستند. اگر یک پاد در کوبرنتیز از کار بیفتد، کوبرنتیز بهطورخودکار کپی جدیدی از آن پاد برای ادامه عملیات ایجاد میکند.
ایجاد و مدیریت زیرساخت یکی از دغدغههای مهم کسبوکارهای مختلف است. ایجاد زیرساخت به تیمی حرفهای نیاز دارد که بهطورمداوم روی توسعه و پیشرفت زیرساخت کار کند. ازآنجاکه این امکان برای همه کسبوکارها فراهم نیست، ایجاد و توسعه زیرساخت را میتوان به شرکتهای متخصص در این زمینه سپرد. پارس پک با سابقه درخشانی که در ارائه راهکارهای میزبانی و زیرساختهای ابری دارد، شما را در این زمینه راهنمایی خواهد کرد. برای کسب اطلاعات بیشتر، میتوانید با کارشناسان پارس پک تماس بگیرید.
سؤالات متداول
۱. POD در کوبرنتیز چیست؟
در پاسخ به پرسش «پاد چیست؟»، باید بگوییم که کوچکترین واحد مستقر در کوبرنتیز است که مانند پوستهای دور کانتینر قرار میگیرد.
۲. تفاوت بین POD و کانتینر چیست؟
هر کانتینر معمولاً در یک پاد اجرا میشود. درواقع، پاد در کوبرنتیز میزبان کانتینر بهشمار میرود.
۳. چه تفاوتی بین POD و NOD وجود دارد؟
پاد در Kubernetes کوچکترین واحدی است که کانتینر را در خود جای میدهد؛ ولی NOD سروری فیزیکی یا ماشینی مجازی است که یک کلاستر در کوبرنتیز را تشکیل میدهند. هر پاد برای استقرار در یک NOD قرار میگیرد.
۴. هر NOD حداکثر چند پاد دارد؟
بهطورپیشفرض در هر کلاستر حداکثر ۱۱۰ پاد قرار میگیرد.