إمكانات Pack في Helm Chart
يضيف ملفان اختياريان إمكانات Pack إلى Helm Chart. يحدد pack-metadata.yaml المخرجات التي يستطيع Pack توفيرها، ويدير pack-migrations.yaml تغييرات ملف Pack عند ترقية Chart.
يوضع الملفان في جذر Chart بجانب Chart.yaml وvalues.yaml. لا يمنع غيابهما تثبيت Chart باستخدام Pack، وإنما لا تتوفر الميزة المرتبطة بالملف الغائب.
| الملف | الاستخدام |
|---|---|
pack-metadata.yaml | تعريف exports المحسوبة أو المقروءة من موارد Kubernetes |
pack-migrations.yaml | تحويل إصدار Pack وvars وvalues عند ترقية Chart |
راجع Helm وHelm Chart لبنية Chart القياسية. تغطي هذه الصفحة العقود التي يستهلكها Pack Operator وkubit-cli مباشرة فقط.
تعريف exports باستخدام pack-metadata.yaml
يحدد قسم exports في pack-metadata.yaml المعلومات التي يمكن للمستخدم أو أدوات Kubit قراءتها من Pack. من الأمثلة الشائعة إصدار التطبيق وimage النهائي وعنوان الخدمة والقيم التشغيلية.
exports:
image_repository: '{{ values.image.repository }}'
image_tag: '{{ values.image.tag }}'
image: '{{ exports.image_repository }}:{{ exports.image_tag }}'
app_version:
value: '{{ exports.image_tag }}'
metric: true
status: true
endpoint:
value: '{{ metadata.name }}.{{ metadata.namespace }}:{{ values.service.port }}'
status: true
يمكن أن يكون export قيمة بسيطة أو كائنا يحتوي على value وخيارات إضافية. تُعالج exports بشكل تكراري، ولذلك يمكن لـ export مثل image الرجوع إلى exports أخرى.
سياق template في metadata
تستخدم templates في pack-metadata.yaml صيغة Jinja نفسها المستخدمة في Pack. تتوفر السياقات التالية:
| السياق | البيانات المتاحة |
|---|---|
metadata | اسم Pack وnamespace وlabels وannotations |
chart | المستودع واسم Chart والإصدار وإعدادات spec.chart |
vars | متغيرات organization وproject وPack الفعلية |
values | دمج values.yaml مع spec.values، وتكون قيم Pack أعلى أولوية |
exports | exports الأخرى في الملف بعد المعالجة التكرارية |
إذا كان value كله تعبير template واحدا، يبقى نوع القيمة محفوظا. وإذا كان التعبير جزءا من نص أكبر، تكون النتيجة نصا. قد يسبب المرجع الدائري بين exports أو المسار غير المعرّف خطأ في المعالجة.
مصادر قيمة export
يأخذ كل export قيمته من أحد المصادر التالية:
| المصدر | الاستخدام |
|---|---|
value | قيمة ثابتة أو template |
secretKeyRef | قراءة key من Secret في namespace الخاص بـ Pack |
configMapKeyRef | قراءة key من ConfigMap في namespace الخاص بـ Pack |
genericRef | قراءة مسار من مورد Kubernetes مسمى في namespace الخاص بـ Pack |
exports:
redis_password:
secretKeyRef:
name: '{{ metadata.name }}'
key: redis-password
sensitive: true
optional: false
config_mode:
configMapKeyRef:
name: '{{ metadata.name }}-config'
key: mode
service_cluster_ip:
genericRef:
apiVersion: v1
kind: Service
name: '{{ metadata.name }}'
valueFrom: spec.clusterIP
يحدد valueFrom في genericRef مسار القيمة داخل المورد. يمكن أن يكون اسم المورد والمسار ثابتين أو template. يجب أن تملك هوية التنفيذ صلاحية قراءة المورد الهدف.
خيارات export
| الخيار | الافتراضي | السلوك |
|---|---|---|
metric | false | نشر export ضمن metrics الخاصة بـ Pack Operator |
status | false | حفظ القيمة في status.exports لمورد Pack |
sensitive | false | تعليم المخرجات بأنها حساسة للأداة المستهلكة |
optional | true | تسجيل خطأ قراءة القيمة من دون إفشال معالجة exports كلها |
مع optional: false، يؤدي غياب المورد أو key إلى فشل معالجة metadata. يعرض kubit pack exports أخطاء exports افتراضيا في __errors__.
لا يشفّر sensitive القيمة ولا يخفيها. تعيد صيغتا dict وlist في kubit-cli هذا العلم مع المخرجات، لكن يجب ضبط الوصول إلى Pack وSecret ومخرجات الأمر. لا تحفظ القيم الحساسة في logs أو pipelines أو Git.
kubit pack exports -f redis.pack.yaml \
--local-chartpath ./redis \
--output dict
راجع قراءة Pack exports باستخدام kubit-cli لتفاصيل الصيغ.
migration عند ترقية Chart
يحدد pack-migrations.yaml الاختياري التغييرات اللازمة في ملف Pack عند ترقية Chart. تُختار كل migration حسب اسم المستودع واسم Chart وإصدار المصدر، وتحدّث spec.chart.version إلى الهدف ويمكنها تحويل vars أو values.
يقرأ Pack Operator الملف من Chart الهدف. لذلك يجب أن يحتوي Chart الهدف على سلسلة migration كاملة من كل إصدار قديم مدعوم. لا يمنع غياب الملف التثبيت، لكن تغيير بنية القيم بشكل غير متوافق قد يبطل اختيارات Packs القديمة.
راجع migration بين إصدارات Chart للنطاقات وsteps وtags والاختبار.
اختبار Chart محلي باستخدام kubit-cli
يختبر الخيار --local-chartpath ملف Chart محليا من دون تغيير المستودع المعرّف في Pack. يتطلب الاختبار ملف Pack حتى توفر metadata وvars وvalues سياق المعالجة الحقيقي.
kubit helm-template -f redis.pack.yaml \
--local-chartpath ./redis
kubit helm-diff -f redis.pack.yaml \
--local-chartpath ./redis
kubit pack exports -f redis.pack.yaml \
--local-chartpath ./redis \
--output dict
kubit pack migrate -f redis.pack.yaml \
--local-chartpath ./redis
- تحقق من مخرجات Helm باستخدام
helm-template. - قارن تغييرات الموارد مع Helm Release الحالي باستخدام
helm-diff. - افحص exports والأخطاء وعلامات الحساسية باستخدام
pack exports. - نفذ
pack migrateلكل مسار ترقية مدعوم على نموذج من إصدار قديم.
يقبل helm-upgrade ملف Chart محليا أيضا، لكنه يغير Helm Release مباشرة. لا تستخدمه ضمن الاختبار الأولي قبل قراءة تحذير Helm upgrade المباشر.
قائمة فحص نشر Chart
- نفذ
helm-templateعلى نماذج Packs. - راجع تغييرات الموارد باستخدام
helm-diff. - اختبر exports البسيطة والتكرارية والاختيارية والحساسة باستخدام
pack exports. - قيّد الوصول المطلوب لـ
secretKeyRefوconfigMapKeyRefوgenericRef. - لا تنشر تغييرا في بنية
valuesإلا مع migration متوافقة وبعد تنفيذ قائمة اختبار migration.