Helm / متوسط: عقود التأليف ودورة الحياة / الدرس 9
الاعتماديات والحزم التابعة وملفات القفل
ركب حزم التطبيقات بواجهات اعتماد صريحة ونسخ محسومة وأصول قابلة لإعادة الإنتاج مع تجنب الارتباط العرضي بالأب.
في هذه الصفحة
أهداف الدرس
- تمييز التصريح بالاعتماد وحسم نسخته والمحتوى المغلف.
- تتبع تجاوزات الأب داخل قيم الحزمة التابعة.
- مراجعة الأسماء البديلة والشروط والقيم العامة كواجهات.
افصل التصريح عن الحسم
يمكن لـChart.yaml التصريح بالاعتماديات بأسمائها وقيود نسخها ومواقع مستودعاتها. يعبّر القيد عن النسخ المقبولة لكنه لا يحدد وحده البايتات المستخدمة في إصدار. يسجل Chart.lock النسخ المحسومة وبيانات القفل، بينما يحتوي charts الأصول المستخدمة في التغليف. راجع الطبقات معا. يخلق تعديل القيد دون تسوية القفل والأصول المضمنة غموضا. تحتاج المراجعة القابلة للإعادة أرشيفا واعتماديات معروفة، لا وعدا بأن مستودعا بعيدا سيعرض المحتوى نفسه دائما تحت اسم مألوف.
صرح باعتماد تعليمي محلي
يصرح المقطع الأول بحزمة metrics افتراضية من مجلد مصدر مجاور. يفيد مستودع file في شرح التركيب دون جلب خدمة حقيقية، لكن المسار افتراض تأليف يجب أن يوجد في بناء معزول فعلي. يشير condition إلى قيمة منطقية لدى الأب. قد يلزم توفر أصول الاعتماد أثناء معالجة الحزمة وإن كانت موارده معطلة؛ فلا تعتبر الشرط مبررا لإهمال إدارة الأصول. يبقى المقطع غير منفذ ولا يُشغل أمر اعتماد.
dependencies:
- name: metrics
version: "1.2.3"
repository: "file://../metrics"
condition: metrics.enabled
يثبت المثال نسخة اعتماد توضيحية ولا يستخدم سجلا عاما أو بيانات اعتماد. ليس حزمة أب كاملة.
تتبع القيم عبر النطاقات
تصمم الحزمة التابعة للتطبيق بحيث تعمل مستقلة ولا تقرأ قيم الأب الاعتباطية مباشرة. يتجاوز الأب قيمها تحت اسم الاعتماد أو اسمه البديل عند استخدامه. داخل التابعة تصبح الخريطة المتداخلة جذر Values الخاص بها. في المقطع الثاني تصبح metrics.intervalSeconds عند الأب هي .Values.intervalSeconds داخل قوالب metrics، لا .Values.metrics.intervalSeconds. القيم global قناة مشاركة صريحة، لكن الإفراط فيها يزيد الترابط. شارك ما له معنى مشترك واضح مثل بادئة سجل متفق عليها، لا كل إعدادات الأب.
metrics:
enabled: true
intervalSeconds: 30
global:
teachingEnvironment: synthetic
داخل metrics تكون المدخلات الموثقة enabled وintervalSeconds وglobal.teachingEnvironment، ويجب أن تستخدم التابعة القيم المعنية صراحة.
راجع الأسماء البديلة والملكية
يسمح الاسم البديل بظهور حزمة اعتماد أكثر من مرة بمسارات إعداد منفصلة، لكنه لا يضمن أسماء Kubernetes فريدة تلقائيا؛ فمساعدات التسمية تحدد الهويات. قد يتصادم اسمان بديلان إذا أنتجا ConfigMap باسم ثابت. كذلك يغير تفعيل قاعدة بيانات مضمنة أكثر من سهولة الاستخدام؛ إذ يسند توقعات دورة الحياة والتخزين إلى الإصدار. حدد هل الاعتماد جزء من وحدة استرجاع التطبيق أم شرط خارجي. لا تضم خدمة ذات حالة لمجرد وجود enabled في مثال؛ بل صمم ملكيتها واسترجاعها صراحة.
ميّز التحديث عن إعادة البناء
تحسم dependency update التصريحات وقد تنتج قفلا جديدا، بينما تهدف dependency build إلى إعادة بناء الاعتماديات من القفل القائم عند وجوده. لا يثبت أي منهما وحده الثقة بالأصل أو توافق التطبيق. راجع تغيير الاعتماد كتغيير شيفرة وإعداد من طرف ثالث: افحص الموارد الناتجة وأسماء المساعدين والافتراضيات والصلاحيات المطلوبة. احتفظ بجرد أصول دون اتصال بهويات دقيقة للمراجعة الافتراضية. لا ينفذ المسار أيا من الأمرين ولا يتصل بمستودع. يجب أن يسجل البناء المصرح به لاحقا ما جلبه وكيف اعتُمدت بايتاته قبل وصف النتيجة بقابلة لإعادة الإنتاج.
الأخطاء الشائعة وإصلاحها
تعذر عثور التابعة على .Values.metrics.intervalSeconds
- لماذا يحدث؟
- كُرر تداخل الأب داخل نطاق التابعة.
- كيف تصلحه؟
- اقرأ .Values.intervalSeconds داخل metrics وأبق تجاوز الأب تحت metrics.
- كيف تتجنب تكراره؟
- وثق رؤيتي الأب والتابعة لواجهة القيم.
إنتاج اسمين بديلين لاسم كائن ثابت واحد
- لماذا يحدث؟
- افتُرض أن الأسماء البديلة تعيد كتابة التسمية تلقائيا.
- كيف تصلحه؟
- راجع مدخلات تسمية التابعة واضمن هويات مقصودة مختلفة.
- كيف تتجنب تكراره؟
- راجع حالة تصيير باسمين بديلين عند فحص الاعتماد.
تغيير الاعتماديات بصورة غير متوقعة أثناء البناء
- لماذا يحدث؟
- أعادت عملية update حسم القيود بدلا من استخدام قفل معتمد.
- كيف تصلحه؟
- استعد التصريح والقفل والأصول المعتمدة ثم افحص سبب تغير الحسم.
- كيف تتجنب تكراره؟
- افصل اعتماد تحديث الاعتماديات عن إعادة بناء الأصل المعتادة.
اختبر فهمك
1. تحتوي قيم الأب metrics.intervalSeconds 30. ماذا تقرأ قوالب metrics، ولماذا؟
اعرض الحل المشروح
تقرأ .Values.intervalSeconds لأن Helm يوفر خريطة الاعتماد كنطاق قيم للتابعة. يظل الأب مسؤولا عن وضع التجاوزات تحت اسم الاعتماد أو اسمه البديل. يدعم هذا الفصل الاستخدام المستقل، فلا تحتاج التابعة معرفة أي أب يضمها أو كيف ينظم قيمه الأخرى.
2. يثبت القفل نسخة اعتماد. ما الدليل المطلوب أيضا قبل توزيع الأب؟
اعرض الحل المشروح
أكد مطابقة الاعتماد المضمن للحسم المعتمد وافحص هوية الأصل الدقيقة ودليل الثقة وراجع الموارد والصلاحيات الناتجة وتوافق القيم وسلوك التطبيق. لا تثبت تسمية النسخة وحدها ثبات البايتات أو السلامة. احفظ جرد الحزمة المعتمد كي تقارن به بناء لاحقا على نحو ذي معنى.
أهم ما تعلمته
- التصريحات والأقفال والأصول المضمنة أدلة مترابطة لكنها مختلفة.
- نطاق التابعة واجهة صريحة، ولا تغني الأسماء البديلة عن تصميم التسمية.