المقدمة
كام مرة شغّلت Pod وطلعلك CrashLoopBackOff أو ImagePullBackOff وفضلت تعمل kubectl describe من غير ما تعرف بالظبط المرحلة اللي وقف عندها؟ الحقيقة إن كل خطأ من دول مرتبط بمرحلة معينة جوه دورة حياة الـ Pod، ولو فاهم المراحل دي هتعرف تشخّص المشكلة في ثواني بدل ما تدور عشوائي.
في هذا المقال سنشرح المراحل الثمانية اللي بيعدي بيها أي Pod من لحظة الـ Scheduling لحد الـ Termination، ومع كل مرحلة الـ Error State اللي ممكن تظهرلك لو حصلت مشكلة فيها.

1 Scheduling
الـ kube-scheduler بيدور على أنسب Node يقدر يشغّل عليه الـ Pod، بناءً على الموارد المتاحة (CPU/Memory)، الـ Affinity/Anti-affinity rules، الـ Taints/Tolerations...
- الحالة: Pending
- الـ Pod في المرحلة دي لسه معندوش Node اتحدد له، أو اتحدد بس لسه مش شغال.
2 Pod Setup
بعد ما الـ Pod يتحدد له Node، الـ kubelet بيبدأ يجهّزله البيئة:
- بيعمل Network Namespace خاص بالـ Pod.
3 Image Pull
الـ kubelet بيطلب من الـ Container Runtime (زي containerd أو CRI-O) إنه يسحب الـ Image من الـ Registry.
- الخطأ الشائع: ErrImagePull (وبعدها بيتحول لـ ImagePullBackOff لو فضل يفشل)
- أسباب شائعة: اسم Image غلط، Tag مش موجود، مفيش صلاحية Access على الـ Registry الخاص.
4 Container Config
الـ kubelet بيجهّز الإعدادات النهائية ويبعتها للـ Container Runtime:
- Volume Mounts
- Environment Variables
- باقي إعدادات الـ Container
- الخطأ الشائع: CreateContainerConfigError
- أسباب شائعة: ConfigMap أو Secret متطلوب مش موجود، أو فيه Reference غلط في الإعدادات.
5 Create Container
هنا الـ Container Runtime نفسه بيتحرك وبيعمل:
- إنشاء cgroups للتحكم في الموارد
- تجهيز الـ Filesystem والـ Mounts
- إنشاء الـ PID و Network Namespaces
- إطلاق (Launch) الـ Container Process
- الخطأ الشائع: CreateContainerError
- أسباب شائعة: مشكلة في الـ Volume نفسه (زي إنه مش accessible)، أو اسم Container متكرر.
ملحوظة مهمة: CreateContainerConfigError و CreateContainerError مش بيترتري تلقائي زي CrashLoopBackOff — لازم تتدخل يدويًا.
6 Start Container
الـ Container بيتشغّل فعليًا.
- الخطأ الشائع: RunContainerError
- أسباب شائعة: مشاكل وقت التشغيل (Runtime)، زي محاولة الكتابة على Volume في وضع Read-Only.
- لو الـ Container اشتغل وبعدين وقع بشكل متكرر → بتظهر CrashLoopBackOff (وهي مش خطأ في حد ذاتها، لكنها فترة الانتظار "Backoff" اللي بتتضاف بين كل محاولة إعادة تشغيل).
7 Post Start (اختياري)
لو محدد Hook باسم postStart، بيتنفذ أوامر معينة فورًا بعد ما الـ Container يشتغل (زي تجهيز ملفات أو تسجيل بدء التشغيل).
8 Liveness / Readiness Probes
تبدأ الـ Probes في المراقبة:
- Liveness Probe: بتتأكد إن الـ Container لسه "حي" وشغال طبيعي، ولو فشلت → الـ kubelet بيعمل Restart للـ Container.
- Readiness Probe: بتتأكد إن الـ Container جاهز يستقبل Traffic، ولو فشلت → الـ Pod بيتشال من الـ Service Endpoints لحد ما يرجع Ready.
🔁 Termination / Loop Back
دورة المراقبة (Probes) بتفضل شغالة طول عمر الـ Container، ولو حصل Restart أو Termination، الدورة بترجع تاني من نقطة مناسبة (Loop Back) للحفاظ على حالة الـ Pod.
ملخص سريع ل Error States حسب المرحلة
في المرة الجاية لما تشوف Pod واقف في Pending أو رايح جاي في CrashLoopBackOff، ارجع للجدول ده وهتعرف تبص في المكان الصح من أول مرة.
Discussion