Kubit logoكوبيت

ما Pack Operator؟

Pack Operator هو controller في Kubernetes يدير دورة حياة Pack وHelm Release. يحوّل تعريف كل Pack إلى Helm Release ويتحقق من التغييرات ويطبقها، ثم يسجل النتيجة في المورد نفسه. راجع Helm وHelm Chart لفهم العلاقة بين هذه المكونات.

يرى المستخدم العادي نتائج المشغّل غالبا من خلال Kubchi. هذه الصفحة للمستخدم الذي يدير ملفات Pack أو يفحص حالة cluster أو يبحث عن سبب عدم تطبيق تغيير.

الوصول إلى Pack Operator

يتوفر Pack Operator مسبقا لموارد Pack وKubchi في Kubernetes clusters المُدارة من Kubit. تواصل مع دعم Kubit لربط Kubchi بـ cluster آخر وتثبيت المشغّل عليه؛ يتطلب ذلك الوصول إلى مستودع Chart وإعدادات cluster وصلاحيات على مستوى cluster.

قد يفعّل Pack Operator ميزات أخرى مثل مزامنة Secrets. تغطي هذه الصفحة السلوك المرتبط بمورد Pack فقط.

دورة توفيق Pack

عند إنشاء Pack أو تغييره، ينفذ المشغّل الخطوات التالية:

  1. يتحقق من بنية Pack والمستودع وChart والإصدار والقيم القابلة للمعالجة.
  2. يقارن حالة Helm المطلوبة مع Release الحالي في cluster.
  3. ينفذ التثبيت أو الترقية عند وجود تغيير.
  4. يكتب إصدار Chart الدقيق ورقم Helm revision والنتيجة والخطأ في status.
  5. يسجل حدثا مثل SuccessfulApply أو AppliedWithErrors أو ApplyFailed في المورد.

إذا تطابقت الحالة الحالية مع المطلوبة، لا ينفذ المشغّل عملية إضافية ويبقي Pack في مرحلة Applied. ولا يؤدي تطبيق الملف نفسه مرة أخرى إلى إنشاء revision جديد.

المراحل والأخطاء

تعني مرحلة Applied أن المشغّل طبّق الحالة المعرفة. افحص أيضا workloads وpods والتنبيهات والأحداث للتأكد من سلامة التطبيق؛ نجاح Helm وحده لا يضمن جاهزية التطبيق لاستقبال الطلبات.

تعني مرحلة Failed أن التحقق أو التطبيق لم يكتمل. توجد التفاصيل في status.error وأحداث المورد. وقد يعرض status.desired الحالة التي حاول المشغّل تطبيقها.

تظهر مرحلة Unmanaged عندما تكون قيمة spec.managed: false. لا يتحقق المشغّل من Pack ولا يثبته أو يرقيه في هذه الحالة. استخدمها فقط عندما تدير أداة أخرى Helm Release وتتحمل مسؤولية منع اختلاف الحالة.

التحقق قبل التطبيق

يفحص Pack Operator مخرجات Helm والصلاحيات المطلوبة قبل قبول تغيير spec. قد يُرفض التغيير إذا تعذر العثور على Chart أو لم يطابق أي إصدار القيد أو تعذر فك قيمة Vault أو كانت مخرجات Helm غير صالحة.

استخدم kubit helm-template لفحص التغيير من دون تثبيت، واستخدم kubit helm-diff لمقارنته مع Release الحالي.

الترقية التلقائية

تستخدم الترقية التلقائية الحقول التالية:

spec:
  chart:
    version: '~=1.4'
    autoUpgrade: true
    autoUpgradeDelay: 1h

عند تحديث فهرس المستودع، يجد المشغّل إصدارا جديدا متوافقا. لا تدخل الإصدارات الدقيقة قائمة الترقية التلقائية. يمكن أن تجمع مدة الانتظار الأيام والساعات والدقائق والثواني، مثل 1d2h30m.

إذا احتوى Chart على pack-migrations.yaml، يطبّق المشغّل migrations المطابقة على تعريف Pack قبل الترقية العادية. إذا فشلت migration التلقائية، يسجل الخطأ وتستمر الترقية العادية. افحص تغييرات الإصدار الحساسة أولا باستخدام kubit pack migrate. راجع Pack migrations لتصميم السلسلة وتحويل القيم.

إعادة تنفيذ العمليات

لإعادة تنفيذ Helm upgrade من دون تغيير الملف:

kubit -n my-project pack force-upgrade my-app

لإعادة تشغيل workloads التابعة لـ Pack:

kubit -n my-project pack rollout-restart my-app

يعيد force-upgrade تنفيذ مسار Helm upgrade، بينما يعيد rollout-restart تشغيل workloads فقط. قبل الاستخدام في production، ضع في الحسبان انقطاعا قصيرا أو بدء عدة pods في وقت واحد.

إعادة التشغيل بعد تغيير Secret أو ConfigMap

عند تفعيل الميزة في cluster، تؤدي annotation التالية إلى إعادة تشغيل Pack وworkloads من نوع Deployment أو StatefulSet بعد تغير الموارد المحددة:

metadata:
  annotations:
    pack-operator.k8s.kubit.ir/watch-to-redeploy: configmap/app-config, secret/app-secret

تُقبل الصيغتان configmap/NAME وsecret/NAME فقط، ويجب أن يكون المورد في namespace نفسه. افصل عدة موارد بمسافة أو فاصلة أو فاصلة منقوطة. تُعالج التغييرات بعد مدة قصيرة حتى لا تسبب التغييرات المتقاربة عمليات restart متكررة.

استكشاف Pack لم يُطبّق

افحص المورد وأحداثه أولا:

kubectl -n my-project get pack my-app -o yaml
kubectl -n my-project describe pack my-app

ثم افحص بالترتيب:

  1. قيمة status.phase ونص status.error.
  2. وجود المستودع وإمكانية وصول Pack إليه.
  3. وجود إصدار Chart متوافق.
  4. صحة المتغيرات وقيم Vault وبنية values.
  5. مخرجات kubit helm-template وkubit helm-diff.
  6. الأحداث وحالة workloads التي أنشأها Helm.

لا تنسخ status أو resourceVersion أو uid أو finalizer إلى ملف Pack الأصلي؛ يديرها Kubernetes والمشغّل. إذا كان الخطأ في الصلاحيات أو الإعداد العام للمشغّل، أرسل إلى دعم Kubit قيمة status.error واسم cluster وnamespace واسم Pack. لا ترسل كلمة مرور أو token أو نص Vault بعد فكّه.

Pack Operator | المستندات | كوبيت