محتويات الدورة

Helm / أساسي: أسس الحزمة والتصيير / الدرس 6

المراجعة دون اتصال وتشخيص التصيير

أنشئ مراجعة متدرجة تفصل بنية الحزمة وتقييم القوالب وشكل YAML والقبول المعتمد على البيئة.

وقت القراءة التقريبي: 4 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • تصنيف الفشل حسب أول حد مكسور.
  • تصميم حالات تصيير صغيرة بكائنات متوقعة واضحة.
  • ذكر قيود التحقق المحلي دون اختراع دليل تشغيل.

صنف قبل التعديل

قد يفشل فحص الحزمة بسبب البيانات الوصفية أو توفر الاعتماديات أو تحقق القيم أو تقييم القالب أو تحليل YAML أو دلالات Kubernetes. أصلح أول فشل لأن الفحوص اللاحقة ربما لم تُنفذ. خطأ حقل nil ليس مشكلة إزاحة YAML، وخطأ تحليل YAML ليس دليلا على غياب API في العنقود. احفظ رسالة الخطأ والمدخل الافتراضي الصغير المسبب لها. ينبغي أن يتضمن المثال القابل لإعادة الإنتاج نسخة الحزمة والمدخلات المرتبة، ليتمكن مراجع آخر من فهم السبب دون خدمة مضبوطة أو تفريغ قيم خاص.

اقرأ خطة مراجعة محلية

يفحص helm lint اصطلاحات الحزمة وقواعد تحقق مختارة، ويصير helm template الملفات محليا. يجيب كل منهما عن أسئلة مختلفة ولا يثبت صحة التطبيق. المثال الأول خطة مكتوبة لحزمة محلية خضعت للمراجعة وليس تسلسل أوامر منفذا. لا تتوفر أداة Helm أثناء تحقق هذا المسار ولا تُجلب اعتماديات. في مراجعة معزولة فعلية ثبّت نسخة العميل وتجنب الفحص التجريبي للخادم أو السلوك المعتمد على lookup عندما يكون العمل دون اتصال. قد يكشف مخرج debug القيم، لذا أبق الأمثلة افتراضية وافحص وجهة الناتج.

text مراحل مراجعة وليست أوامر
reviewed local chart + pinned client
  -> lint result
  -> local render with synthetic values
  -> YAML and field assertions
  -> separate authorized environment acceptance

يضيف كل سهم دليلا بادعاء أضيق من نجاح النشر الكامل. تقع المرحلة الأخيرة خارج حدود تنفيذ المسار.

تحقق من خصائص ذات معنى

يتحقق التأكيد المفيد من عقد بدلا من نسخ الناتج كله بلا تفكير. في Service وDeployment افتراضيين قارن ملصقات المحدد بملصقات Pod وتحقق من الصورة وعدد الكائنات المفعلة. تساعد لقطة النص في كشف التغييرات، لكن الوقت أو الترتيب غير المستقر قد يحدث ضجيجا. يفحص المثال الثاني احتواء المحدد باستخدام قواميس فقط، ولا يحلل YAML أو يدعي تحقق الخادم. يجب وجود مفاتيح المحدد وقيمها ضمن ملصقات Pod مع السماح بملصقات وصفية إضافية؛ وستكون مساواة الخريطتين كاملتين قيدا زائدا.

python فحص مجرد لعقد المحدد
selector = {"app": "catalog", "instance": "preview"}
pod_labels = {"app": "catalog", "instance": "preview", "team": "learning"}
matched = all(pod_labels.get(k) == v for k, v in selector.items())
print(matched)
assert matched
الناتج المتوقع
True

تثبت True تطابق خرائط ملصقات افتراضية فقط، ولا تثبت شيئا عن Pods فعلية أو نقاط النهاية أو الاتصال.

أنشئ مصفوفة حالات صغيرة

اختر الحالات حسب الاختلاف البنيوي: الافتراضيات، مورد اختياري مفعل، نسخ صفر إن سمح العقد، ملصقات مخصصة، خرائط اختيارية فارغة، وقيمة خاطئة يرفضها المخطط عمدا. سجل هويات الكائنات المتوقعة لكل حالة. ينبغي أن يشرح الاختبار السلبي الرفض المقصود لا أن يتوقع أي فشل؛ فقد يحققه فقد اعتماد غير مقصود. افصل تأكيدات التطبيق عن نحو الحزمة. فتطابق targetPort مع منفذ حاوية معلن مفيد، لكن قد يستمع التطبيق إلى منفذ آخر رغم تطابق التصريحين.

انشر سجل تحقق دقيقا

يذكر سجل التحقق ما نُفذ وبأي أدوات ومدخلات وما بقي غير منفذ. تعمل برامج Python هنا في تخزين محلي مؤقت وبذاكرة افتراضية فقط، ومقاطع Helm رسوم توضيحية مراجعة. لا يُتصل بعنقود أو سجل صور أو نقطة تطبيق ولا تُسحب صورة. يجعل هذا التفريق الدليل قابلا للتدقيق ويمنع اعتبار الناتج المتوقع المعروض ناتجا ملتقطا من المحرك. عند تغير الحزمة أعد الفحوص المتأثرة، ووسعها عند بقاء خطر غير محسوم فقط. لا يعوض تكرار فحوص غير مرتبطة غياب اختبار قبول خاص بالبيئة.

الأخطاء الشائعة وإصلاحها

نجاح اختبار سلبي بسبب فقد اعتماد

لماذا يحدث؟
قبل الاختبار أي فشل بدلا من خطأ التحقق المقصود.
كيف تصلحه؟
اشترط حد الفشل والحالة التشخيصية المتوقعين.
كيف تتجنب تكراره؟
افصل تحقق إعداد الحالة عن التأكيد المختبر.

وصف التصيير المحلي بأنه تحقق خادم

لماذا يحدث؟
جُمعت فحوص مختلفة تحت تسمية نجاح واحدة.
كيف تصلحه؟
أعد كتابة السجل بالأدوات والمدخلات وحدود الدليل الدقيقة.
كيف تتجنب تكراره؟
سمّ كل مرحلة وصرح بالفحوص غير المنفذة.

رفض تأكيد المحدد ملصقات إضافية غير مؤثرة

لماذا يحدث؟
استُبدل احتواء المحدد بمساواة الخريطة كاملة.
كيف تصلحه؟
افحص كل مفتاح وقيمة في المحدد ضمن ملصقات Pod.
كيف تتجنب تكراره؟
عبّر عن عقد Kubernetes لا عن تطابق عارض في التنفيذ.

اختبر فهمك

1. نجحت الحزمة في lint لكن data الناتجة تحتوي عددا تحت ConfigMap.data. ما المطلوب؟

اعرض الحل المشروح

افحص الحقل الناتج واقتبس الوجهة النصية مع الإبقاء على تحقق المدخل العددي. لا يستبدل نجاح lint كل فحوص مخطط API المستقبلة. أضف حالة لقيمة تبدو عددية وتحقق من نوعها النصي في الوثيقة المحللة عند توفر محلل محلي مناسب. اذكر منفصلا هل نُفذ ذلك المحلل فعلا.

2. طبع فحص المحدد بالقواميس True. هل يستطيع المستخدم استنتاج أن Service متاح؟

اعرض الحل المشروح

لا. يقارن البرنامج قواميس افتراضية فقط. وجود الموارد الفعلية وتطابق النطاق والجاهزية وإنشاء نقاط النهاية وسياسة الشبكة والتوجيه واستماع التطبيق كلها خارج النتيجة. فائدته كشف فئة من أخطاء الحزمة مبكرا وتقليل التشخيص اللاحق دون ادعاء تحقق تشغيل.

أهم ما تعلمته

  • حدد أول حد فاشل واحفظ مثالا افتراضيا صغيرا لإعادة الإنتاج.
  • تفيد فحوص العقد المحلية حين تذكر حدودها بدقة.

المراجع الرسمية