مستوى المقال: متوسط — لازم تكون عارف Kubernetes basics (Pod, Deployment, kubectl) قبل ما تبدأ. وقت القراءة المتوقع: 9 دقايق.
لو شغّال cluster Kubernetes فيه 6 replicas من خدمة الـ checkout بتاعتك، ويوم Cloud provider بيعمل node maintenance، أمر kubectl drain على نود واحدة ممكن يشيل 4 pods دفعة واحدة. خدمتك بتقع 38 ثانية في عز اليوم. Pod Disruption Budget — اختصارًا PDB — بـ 12 سطر YAML بيقفل الباب ده. هتعرف هنا بالظبط إزاي، بأرقام حقيقية، ومتى الـ PDB نفسه بيبقى فخ.
ليه Kubernetes ممكن يطفي نص خدمتك في عز اليوم
المشكلة باختصار
Kubernetes افتراضيًا بيوازن بين 3 أهداف: scheduling سريع، استخدام أمثل للنودز، وتنفيذ أوامر cluster operator زي drain و upgrade. لما تيجي تعمل kubectl drain node-3 علشان تنزّل نسخة جديدة من الـ kernel أو تعمل scale-down للنودز، الـ kubelet بيرسل eviction request لكل pod موجود على النود. لو 4 من أصل 6 pods الخاصة بخدمة الـ checkout كانوا قاعدين على node-3، انت فجأة بقيت بـ 2 pods فقط تخدم نفس الترافيك. النتيجة: 5xx errors للمستخدمين لحد ما الـ pods الجديدة تستوي على نودز تانية وتجتاز الـ readiness probe.
مثال محل الفلافل — قبل ما نروح للتعريف العلمي
تخيّل إن عندك محل فلافل، وفيه 6 طباخين شغّالين على 3 طاولات. كل طاولة فيها طباخين اتنين. الأكلة العادية: 6 طلبات بالتوازي.
المدير قرر يغيّر زيت طاولة كاملة، فطلب من الطباخين اللي عليها يقوموا فورًا. مفيش قاعدة مكتوبة بتقول "أقل عدد طباخين يفضل شغّال هو 4". النتيجة؟ المحل بقى عنده 4 طباخين بس، الزبون بيستنى دقيقتين بدل 20 ثانية، والشكاوى بتطلع على Google Reviews.
الحل الصح هو قاعدة مكتوبة على باب المطبخ: "ممنوع يقوم أكتر من 2 طباخين في نفس الوقت". المدير لما يجي يغيّر الزيت، يخلّي طاولة واحدة الأول، يستنّى الطباخين الجداد ييجوا، وبعدين يحرك على التانية. ده بالظبط هو الـ PDB — مش بيمنع الصيانة، بس بينظّمها.
تعريف PDB من توثيق Kubernetes الرسمي
Pod Disruption Budget هو object من نوع policy/v1.PodDisruptionBudget بيحدد لـ Kubernetes إما أقل عدد من الـ pods لازم يفضلوا متاحين (minAvailable)، أو أقصى عدد ممكن يبقى مش متاح (maxUnavailable)، أثناء أي Voluntary Disruption. التعريف الكامل في Kubernetes 1.32 Docs — Specifying a Disruption Budget.
الفرق بين Voluntary و Involuntary Disruption
- Voluntary disruption: حاجة بتعملها انت أو cluster operator بإرادة —
kubectl drain، rolling update، cluster autoscaler scale-down، أو deletion عبر eviction API. PDB بيحمي من دي. - Involuntary disruption: حاجة خارجة عن السيطرة — node crash، kernel panic، hardware failure، AWS spot instance termination. PDB بيحمي من دي. علشان كده بتحتاج replicas كافية + + multi-AZ deployment.