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

Helm / متوسط: عقود التأليف ودورة الحياة / الدرس 7

المساعدات والأسماء والمحددات المستقرة

صمم واجهات مساعدين مسماة تعيد استخدام البيانات الوصفية دون تغيير هوية الحمل الثابتة أو التوجيه بين الإصدارات عرضا.

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

أهداف الدرس

  • تمييز أسماء المساعدين وتمرير سياقاتها صراحة.
  • فصل الملصقات الوصفية عن هوية المحدد.
  • مراجعة تغيير الأسماء بوصفه تغييرا في دورة الحياة.

اجعل المساعد واجهة

تُجمع القوالب المسماة ضمن مساحة أسماء مشتركة تشمل قوالب الاعتماديات. قد يتصادم مساعد عام اسمه labels مع حزمة أخرى. ابدأ الاسم باسم الحزمة، وأضف نسخة واجهة المساعد حين يتطلب التوافق ذلك. المساعد ليس مجرد حذف للتكرار؛ وثق السياق الذي يتوقعه والنص الذي يعيده. يستطيع مساعد يتلقى الجذر كله استخدام Release وChart، بينما لا يستطيع مساعد يتلقى قاموسا صغيرا تجاوز ذلك القاموس. توضح المدخلات الصريحة إعادة الاستخدام وتمنع الاعتماد الخفي على النقطة الحالية للمستدعي.

أعد نصا قابلا للتركيب

تعيد include نص المساعد المصير فتسمح بتمريره إلى سلسلة لإزاحته عند الوجهة. أما الإجراء template فيدرج الناتج مباشرة ويقل ملاءمة للإزاحة السياقية. يعرّف المقطع الأول ملصقي محدد مستقرين ويدرجها تحت selector. ويفترض حزمة تطبيق catalog واسما صريحا للإصدار. يستبعد المساعد نسخة الحزمة والتطبيق عمدا؛ فهما يصفان النشر لكن لا ينبغي أن يعيدا تعريف Pods التابعة لـDeployment عند تغير نسخة الحزمة.

gotemplate مقطع مساعد محدد مستقر
{{- define "catalog.v1.selectorLabels" -}}
app.kubernetes.io/name: catalog
app.kubernetes.io/instance: {{ .Release.Name | quote }}
{{- end -}}

selector:
  matchLabels:
    {{- include "catalog.v1.selectorLabels" . | nindent 4 }}

يوضع التعريف عادة في _helpers.tpl والاستدعاء في قالب الحمل. المقطع التعليمي المجمع ليس manifest كاملا.

ميّز الملصقات الوصفية

قد تتضمن البيانات الوصفية نسخة الحزمة ونسخة التطبيق والفريق والمكون. تخدم ملصقات المحدد عقد هوية أضيق ويجب أن تتطابق مع ملصقات قالب Pod. محدد Deployment من apps/v1 غير قابل للتغيير بعد الإنشاء؛ فتغيير محدد يتضمن النسخة قد يفشل ترقية تبدو عادية. ولمحدد Service نتائج توجيه مستقلة ويمكن أن يشمل إصدارا آخر إذا حُذفت هوية instance. احتفظ بمساعد صغير للمحدد وآخر أوسع للملصقات، ولا تسمح للملصقات الإضافية بتجاوز مفاتيح الهوية المحمية بصمت.

راجع الأسماء كهوية كائن

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

python مقارنة هويات كائنات افتراضية
before = ("v1/ConfigMap", "lab", "preview-catalog-settings")
after = ("v1/ConfigMap", "lab", "catalog-settings")
print(before == after)
print("identity changed" if before != after else "same identity")
الناتج المتوقع
False
identity changed

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

راجع عقود المساعدين عبر النسخ

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

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

تغيير محدد Deployment الثابت أثناء الترقية

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

تغيير اعتماد لمساعد ملصقات حزمة أخرى

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

اختيار Service لإصدارين

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

اختبر فهمك

1. هل ينبغي إدراج helm.sh/chart ضمن محدد Deployment؟ اشرح أثر دورة الحياة.

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

يوضع عادة ضمن الملصقات الوصفية لأنه يتغير بتغير نسخة الحزمة. يجب أن يبقى محدد Deployment مستقرا عبر الترقيات الموضعية، ويعامله apps/v1 كحقل ثابت. ضع هوية التطبيق والإصدار في المحدد وكررها في قالب Pod، واحمل نسخة الحزمة منفصلة للاستعلام والمراجعة.

2. استُدعي مساعد بالقاموس dict "name" "catalog". هل يستطيع قراءة .Release.Name؟

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

لا، فسياقه القاموس الممرر وليس الجذر الأصلي تلقائيا. مرر اسم الإصدار المطلوب صراحة أو أدرج مفتاح root ضمن واجهة موثقة. يبدأ $ داخل المساعد من السياق الممرر أيضا. عقد مدخلات صغير وواضح أفضل من مساعد يعتمد عرضا على مستدع مرر الجذر الكامل.

أهم ما تعلمته

  • يحتاج المساعد اسما مميزا وسياقا صريحا وعقد مخرج مستقرا.
  • تستحق هوية المورد ومحدداته مراجعة دورة الحياة عند تغير سلوك المساعد.

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