آشنایی و درک چرخه زندگی پادها (Pod Lifecycle) برای مدیریت کانتینرها در محیط کوبرنتیز از اهمیت بالایی برخوردار است. اهمیت اصلی این موضوع نیز به درک فرایندهایی برمیگردد که یک پاد از زمان ایجاد شدن تا بسته یا Terminate شدن طی میکند.
فهم این مسئله به ما کمک میکند تا اپلیکیشنهای کانتینرسازی شده را بهتر مدیریت کنیم و در محیطهای Production درک درستی از شیوه کاری و رفتاری آنها بدست بیاوریم.
برای آشنایی کاملتر با مفهوم پادها (Pod) میتوانید مطلب «پاد (Pod) در کوبرنتیز» را مطالعه کنید.
آشنایی با وضعیت (Status) و Stageهای مختلف پادها
هر پاد در فرایند اجرا شدن در Stageها یا مراحل مختلفی قرار میگیرد. آشنایی با این Stageها (اشاره به همان مفهوم چرخه زندگی) به چند دلیل مهم است:
- مشاهده وضعیت پاد: چرخه زندگی پاد به ما اطلاعات کاملی از وضعیت فعلی پادها میدهد. وضعیت هر پاد میتواند معلق (Pending)، در حال اجرا (Running)، شکست خورده (Failed) و متوقف شده (Terminated) باشد.
- رفع خطا و دیباگینگ: زمانی که شما وضعیت فعلی پاد را درک کنید، میتوانید در صورت بروز خطا یا مشکلی آن را بهتر مدیریت کنید. برای مثال اگر یک پاد Fail شده، چرا و چگونه باید آن را درست کنیم.
- مدیریت منابع: درک وضعیت یک پاد میتواند به مدیریت منابع بهصورت بهینه کمک کند. برای مثال اگر یک پاد در وضعیت معلق یا Pending باشد، به این معناست که منتظر Schedule شدن بوده و منابعی در حال استفاده نیست.
- Scheduling: با درک وضعیت فعلی پاد شما میتوانید فرایند Scheduling پادها را بهصورت بهینهتر انجام دهید.
وضعیتها یا Stateهای یک Pod
هر پاد شامل آبجکتی با عنوان PodStatus میشود که فیلدی با عنوان status
در اختیار داشته و وضعیت پادها را در خود نگهداری میکند. براساس نحوه کارکرد پاد، فیلد status میتواند ۶ وضعیت زیر را داشته باشد:
Pending
: بعد از ایجاد پاد، وضعیت اولیه آن معلق یا Pending خواهد بود. تا زمانی که پاد به یک Node متصل یا Scheduled نشود این وضعیت تغییری نخواهد کرد.Running
: هر پادی که به یک Node متصل بوده و کانتینر آن فعال باشد وضعیت در حال اجرا یا Running را دریافت میکند.- Succeeded: هر زمان که تمام کانتینرهای داخل یک پاد بهصورت موفقیتآمیز Terminate شده و در آینده restart نشوند وضعیت Succeeded نمایش داده میشود.
- Failed: اگر کانتینرهای داخل پاد به درستی اجرا نشوند و یا وضعیت non-zero را برگردانند وضعیت پاد Failed میشود.
- Unknown: زمانی که هیچ شفافیتی راجع به چگونه و کجایی عملکرد پاد وجود نداشته باشد وضعیت Unknown یا ناشناخته ایجاد خواهد شد.
CrashLoopBackoff
: زمانی که کانتینر fail شده و بهصورت مرتب تلاش میکند که از اول شروع به کار کند این وضعیت نمایش داده میشود.
ساخت یک پاد جدید
برای درک بهتر کلیت چرخه زندگی بیایید با فرایند ساخت یک پاد جدید در کوبرنتیز آشنا شویم و سپس به شرح مراحل مختلف آن بپردازیم.
در دیاگرام بالا فرایند استاندارد Scheduling یک پاد نمایش داده شده است. البته در این دیاگرام سناریو ساخته شدن پاد بهصورت مستقیم توسط کاربر به تصویر کشیده شده است که البته بهندرت اتفاق میافتد، چرا که در فرایند درست، کاربر یک ReplicaSet را ایجاد میکند و این ReplicaSet است که فرایند ساختن پاد را جلو میبرد. در ادامه مراحل ذکر شده در دیاگرام بالا را قدم به قدم بررسی میکنیم:
- در ابتدا kubectl یا هر API Client دیگری مشخصات پاد را برای API Server ارسال و مشخص میکند.
- API Server آبجکت پاد را در etcd مینویسد (برای آشنایی بیشتر با etcd مطلب «etcd در کوبرنتیز چیست؟» را مطالعه کنید).
- بعد از این اتفاق Kube-Scheduler متوجه ساخته شدن یک پاد جدید میشود اما میبیند که پاد جدید به هیچ Nodeی متصل نیست.
- در مرحله بعد Kube-Scheduler نود جدیدی را به پاد متصل کرده و API Server را بهروزرسانی میکند.
- این تغییر در حوزه etcd نیز تکثیر میشود و API Server نیز اتصال نود جدید به پاد را در آبجکت Pod اعمال میکند.
- حال kubelet پاد را اجرا کرده و وضعیت کانتینر را بهروزرسانی میکند.
- در نهایت API Server براساس دادههای دریافت شده، وضعیت پاد را در etcd قرار میدهد.
آشنایی با Container Probes یا کاوشگران کانتینر
در محیط کوبرنتیز برای مانیتور سلامت و وضعیت کانتینرها در پاد از Container probes استفاده میشود. Probeها اطلاعات مفیدی را به Control Plane ارائه میدهند که در نهایت منجر به تصمیمگیریهایی در زمینه اجرا درست کانتینرها و پادها میشود.
در این فرایند kubelet براساس سه نوع از Probeها عملیاتهای مختلفی را روی کانتینرها انجام میدهد. در ادامه با این سه Probe آشنا میشویم:
- Liveness probes: برای بررسی در حال اجرا و سالم بودن کانتینرها از این probe استفاده میشود. اگر این probe با خطا روبهرو شود، کانتینر بهصورت خودکار ریاستارت میشود.
- Readiness probes: از این probe برای بررسی امکان ورود ترافیک به کانتینر استفاده میشود. زمانی از این probe استفاده میشود که بخواهیم بدانیم آیا کانتینر به زمانی برای شروع یا اتمام فرایندی نیاز دارد یا نه.
- Startup probes: از این probe برای بررسی راهاندازی موفقیتآمیز کانتینر استفاده میشود. برعکس دو مورد قبلی، این probes تنها یکبار، در زمان Startup شدن کانتینر اجرا میشود.
همانطور که مشاهده کردید هر کدام از این Probeها برای هدف خاصی ساخته شدهاند و در Stageهای متفاوتی استفاده میشوند.
در پایان
پیدا کردن درک درست از رفتار و چرخه زندگی پادها به شما این امکان را میدهد تا بهتر بتوانید در رفع اشکال کانتینرها و اپلیکیشنهای در حال اجرا مشارکت داشته باشید و بهسرعت مشکلات را حل کنید. در این مطلب شما را با کلیات چرخه زندگی پادها آشنا کردیم. برای مطالعه بیشتر در ارتباط با این موضوع میتوانید مستندات رسمی کوبرنتیز Pod Lifecycle را مطالعه کنید.