تخطَّ إلى المحتوى

Rolling Update

التحديث المتدرج Rolling Update

Rolling Update يستبدل النسخ القديمة من التطبيق بالجديدة تدريجياً واحدة تلو الأخرى بدل استبدالها كلها دفعة واحدة، فلا يحدث توقف في الخدمة.

هذه استراتيجية النشر الافتراضية في Kubernetes: بدل إيقاف كل النسخ القديمة وتشغيل الجديدة معاً، يُنشئ maxSurge عدداً محدوداً من النسخ الجديدة أولاً، وبعد أن تصبح جاهزة (Ready)، يوقف maxUnavailable عدداً محدوداً من النسخ القديمة. تتكرر هذه الدورة حتى تُستبدل كل النسخ. حركة المرور طوال الوقت تُوجَّه فقط للنسخ الجاهزة عبر الـ Service، فلا يحدث توقف تام في الخدمة.

التحدي الأساسي: أثناء فترة الانتقال يعمل الإصدار القديم والجديد معاً لبعض الوقت، فيجب أن يكون التطبيق متوافقاً مع نفسه بين الإصدارين (خصوصاً لو شاركا نفس قاعدة البيانات). التراجع (rollback) عند فشل التحديث يتم بنفس آلية Rolling Update لكن بالاتجاه المعاكس.

الصياغة

spec:
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: <عدد أو نسبة>
      maxSurge: <عدد أو نسبة>

📄 مثال

spec:
  replicas: 6
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1
      maxSurge: 1

# متابعة التقدّم:
# kubectl rollout status deployment/my-app
# التراجع عند الفشل:
# kubectl rollout undo deployment/my-app

أهم النقاط

العنصرالوظيفة
maxUnavailableأقصى عدد (أو نسبة) نسخ يمكن أن تكون غير متاحة أثناء التحديث
maxSurgeأقصى عدد (أو نسبة) نسخ إضافية تُنشأ مؤقتاً فوق العدد الأصلي
kubectl rollout statusيعرض تقدّم التحديث الجاري ويبقى منتظراً حتى اكتماله
kubectl rollout undoيتراجع فوراً للإصدار السابق عند اكتشاف مشكلة بعد التحديث

💡 نصائح عملية

  • اجعل maxUnavailable صفراً إذا كنت لا تتحمل انخفاض السعة إطلاقاً، على حساب استهلاك موارد إضافية مؤقتة أكبر
  • أضف readiness probe دقيقاً — بدونه قد يُعتبر pod جاهزاً قبل أن يكون فعلاً قادراً على خدمة الطلبات

⚠️ أخطاء شائعة

  • نشر تغيير غير متوافق مع الإصدار السابق (breaking change بقاعدة البيانات مثلاً) أثناء وجود الإصدارين معاً في نفس اللحظة
  • الاعتماد على Rolling Update وحدها بدون مراقبة فعلية، فلا يُكتشف الفشل إلا بعد اكتمال التحديث بالكامل

خصائص ذات صلة

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار DEVOPS الكامل بالعربي.

📚 للتعمق التقني الكامل بالإنجليزية: MDN Web Docs