Kubit logoكوبيت

إمكانات 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 أعلى أولوية
exportsexports الأخرى في الملف بعد المعالجة التكرارية

إذا كان 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

الخيارالافتراضيالسلوك
metricfalseنشر export ضمن metrics الخاصة بـ Pack Operator
statusfalseحفظ القيمة في status.exports لمورد Pack
sensitivefalseتعليم المخرجات بأنها حساسة للأداة المستهلكة
optionaltrueتسجيل خطأ قراءة القيمة من دون إفشال معالجة 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
  1. تحقق من مخرجات Helm باستخدام helm-template.
  2. قارن تغييرات الموارد مع Helm Release الحالي باستخدام helm-diff.
  3. افحص exports والأخطاء وعلامات الحساسية باستخدام pack exports.
  4. نفذ pack migrate لكل مسار ترقية مدعوم على نموذج من إصدار قديم.

يقبل helm-upgrade ملف Chart محليا أيضا، لكنه يغير Helm Release مباشرة. لا تستخدمه ضمن الاختبار الأولي قبل قراءة تحذير Helm upgrade المباشر.

قائمة فحص نشر Chart

  1. نفذ helm-template على نماذج Packs.
  2. راجع تغييرات الموارد باستخدام helm-diff.
  3. اختبر exports البسيطة والتكرارية والاختيارية والحساسة باستخدام pack exports.
  4. قيّد الوصول المطلوب لـ secretKeyRef وconfigMapKeyRef وgenericRef.
  5. لا تنشر تغييرا في بنية values إلا مع migration متوافقة وبعد تنفيذ قائمة اختبار migration.

أدلة مرتبطة

إمكانات Pack في Helm Chart | المستندات | كوبيت