المستوى: مبتدئ → متوسط · زمن القراءة: حوالي 8 دقائق
الـ Pod بتاعك بيتعمله restart كل 5 دقايق وأنت مش عارف ليه؟ الإجابة في الغالب موجودة في 3 إعدادات صغيرة اسمها Probes. المقال ده بيشرحلك إزاي Kubernetes بيقرّر إن تطبيقك "حي" فعلاً، الفرق بين الأنواع الثلاثة، بمثال للمبتدئ ثم التعريف العلمي الدقيق، وأرقام من حالة إنتاج فعلية.
Liveness و Readiness و Startup Probes: دليل مبسّط للمبتدئين
المشكلة باختصار
لو شغّلت تطبيق Node.js أو Python على Kubernetes بدون probes، الـ cluster بيفترض إن أي container شغّال يعني سليم. ده افتراض غلط. الـ container ممكن يكون شغّال بس الـ event loop عمل block، أو الاتصال بقاعدة البيانات اتقطع، أو لسه بيحمّل cache كبير في البداية. النتيجة: المستخدم بيشوف 502 لمدة 30 ثانية قبل ما تكتشف إن في مشكلة.
الفكرة بمثال بسيط جدًا
تخيّل إنك مدير مستشفى. على كل سرير عندك 3 أجهزة مختلفة:
- جهاز نبض القلب: لو سكت، المريض محتاج إنعاش فوري. ده الـ Liveness Probe.
- جهاز قياس الضغط للزوار: لو الضغط واطي، المريض موجود لكن مش جاهز يستقبل زوار دلوقتي. ده الـ Readiness Probe.
- تقرير الفحوصات الأولية: المريض لسه داخل، خلّي الأجهزة التانية تستنى لحد ما الفحص الأولي يخلّص. ده الـ Startup Probe.
الثلاثة probes في Kubernetes بيشتغلوا بنفس المنطق بالظبط، بس بدل المريض، عندنا container، وبدل الأجهزة، عندنا فحوصات HTTP أو TCP أو exec.
التعريف العلمي الدقيق
الـ probe في Kubernetes هو فحص دوري بينفّذه الـ kubelet (الـ agent اللي شغّال على كل node) على الـ container. كل probe بيرجع نتيجة Success أو Failure أو Unknown، بناءً على HTTP status code، أو exit code من command داخلي، أو رد TCP. بناءً على النتيجة، الـ kubelet بياخد قرار محدد:
- Liveness Probe فشل: عمل restart للـ container.
- Readiness Probe فشل: شيل الـ Pod من الـ Service endpoints (يعني مفيش traffic ييجي له، لكن مش بيتعمله restart).
- Startup Probe: بيوقف تنفيذ الـ Liveness والـ Readiness لحد ما ينجح. مفيد جدًا للتطبيقات اللي بتاخد وقت طويل لمّا تشتغل.
الفرق العملي بين الثلاثة في جملة واحدة لكل نوع
بدل ما تحفظ تعريفات، خد القاعدة دي وأنت ماشي:
- تطبيقك معلّق ومحتاج reboot؟ Liveness.
- تطبيقك مشغول دلوقتي ومش قادر يستقبل طلبات (مثلاً بيحمّل cache)؟ Readiness.
- تطبيقك بطيء في البداية فقط (Java Spring Boot بياخد 60 ثانية مثلاً)؟ Startup.
مثال YAML كامل قابل للنسخ
نفترض عندك تطبيق Node.js عليه endpoint اسمه /health بيرجع 200 لو الـ process شغّال، و بيرجع 200 لو الاتصال بـ PostgreSQL ناجح. الإعداد المظبوط بيبقى كده: