Readiness and Liveness

Keeping pods healthy
در کوبرنتیز اگر مشکلی برای پراسس اصلی کانتینر به وجود بیاد و کرش کند kubelet به صورت خودکار آن را ریستارت میکند و سعی در این دارد که پاد را به وضعیت سلامت خودش برساند.
شرایط دیگری وجود دارد که در آن مشکلی برای پراسس اصلی کانتینر بوجود نمی اید و مشکل در عملکرد برنامه است . برای مثال یک اپلیکیشنی را در نظر بگیرید که memory leak دارد و functionality آن درست نیست و همچنان پراسس اصلی کانتینر نیز در حال اجرا است ، در این وضعیت اپلیکیشن به درستی کار نمی کند و کوبرنتیز هم مطلع نمی شود که ان را ریستارت کند.
برای اینکه مطمئن شوید که کانتینر در همچین شرایطی ریستارت میشود ، شما باید سلامت اپلیکیشن را از بیرون کانتینر و پاد چک کنید .
کوبرنتیز از طریق liveness probe میتواند سلامت کانتینر را چک کند . کوبرنتیز به صورت مداوم این probe را اجرا میکند و در صورت fail شدن به تعداد مشخص کانتینر را ریستارت میکند.
برای مثال تصویر بالا یک اپ Node Js هست و برای آن یک liveness probe تعریف کرده ایم .
در این probe به طور مداوم درخواست http GET به مسیر / و پورت 8080 فرستاده میشود تا متوجه شویم که کانتینر همچنان سلامت هست یا خیر
شما میتوانید endpoint مخصوصی برای probe تعریف کنید تا از سلامت کانتینر مطمئن شوید .
Readiness Probe
علاوه بر liveness probe نوع دیگری از probe وجود دارد . readiness نیز در بازه زمانی مشخص اجرا می شود و تصمیم میگیرد که آیا پاد آماده دریافت درخواست های کاربران هست یا خیر .
هنگامی که readiness probe موفقیت آمیز باشد ، به این معناست که کانتینر آماده دریافت درخواست کاربران است .
تفاوتی که بین liveness و readiness وجود دارد این است که readiness اگر fail شود کانتینر ما kill یا restart نمیشود .
با این مثال بهتر می توانید readiness probe رو درک کنید.
فرض کنید که یک سرویس فرانت اند دارید که عملکرد آن وابسته به سرویس بک اند است.
حال ممکن است یکی از سرویس های فرانت مشکل اتصال به دیتابیس را داشته باشد.
در این شرایط عاقلانه هست که آن سرویس فرانت را از حالت ready خارج کنیم و درخواست ها به سرویس های دیگر منتقل شوند.