الانتقال الإلزامي في Kubernetes إلى cgroup v2: ما وراء إعدادات النواة
دليل عملي للترقية إلى cgroup v2 في مجموعات كوبرنيتيس؛ تحليل خطأ failCgroupV1 ومقاييس PSI وحل مشاكل توقف الحاويات OOMKilled وترقية العقد دون انقطاع الخدمة.

أصبح الانتقال إلى cgroup v2 إلزامياً في إصدارات Kubernetes الحديثة، مع تفعيل خيار failCgroupV1=true افتراضياً في أدوات التهيئة مثل kubeadm. الخطأ الشائع لدى مهندسي البنية التحتية هو التعامل مع الترقية كمجرد تعديل لمعاملات الإقلاع في GRUB، في حين تؤثر هذه المعمارية بشكل جوهري على إدارة الذاكرة وسلوك الحاويات في بيئات الإنتاج الفعلية.
لماذا لم تعد بنية cgroup v1 صالحة؟
في بنية v1 القديمة، كان كل متحكم بالموارد (المعالج، الذاكرة، الإدخال/الإخراج) يعمل في شجرة هرمية منفصلة تماماً. هذا التفكك منع متحكم الذاكرة من التنسيق مع متحكم القرص أثناء تراكم الكاش، مما أدى إلى تجمد العمليات واتخاذ قرارات غير دقيقة عند امتلاء الذاكرة.
في المقابل، تعتمد cgroup v2 شجرة هرمية موحدة (Single Unified Hierarchy) تضمن خضوع كل عملية لحزمة موحدة من الموارد.
معلومات إجهاد الموارد عبر PSI
الميزة الأهم في cgroup v2 هي الوصول إلى مقاييس PSI (Pressure Stall Information). بدلاً من معرفة نسبة الذاكرة المستخدمة فقط، تتيح PSI قياس الوقت الفعلي الذي تضيعه العمليات بانتظار تحرير الذاكرة أو الوصول إلى القرص، مما يكشف الاختناقات الحقيقية قبل توقف الخدمات.
خطوات الفحص قبل الترقية
- التحقق من النظام الحالي عبر الأمر
stat -fc %T /sys/fs/cgroup/. - التأكد من ضبط
SystemdCgroup = trueفي إعدادات containerd لتفادي تضارب إدارة المجموعات. - مراجعة تطبيقات جافا القديمة للتأكد من قدرتها على قراءة حدود الذاكرة في cgroup v2.
خلاصة تشغيلية
تحديث عقد Kubernetes إلى cgroup v2 ضرورة لاستقرار المنصات السحابية. يوصى بإجراء الترقية عقدة تلو الأخرى مع المراقبة الدقيقة لمعدلات OOMKilled.



