متطلبات حزمة Helm

Helm هو مدير حزمة ل Kubernetes يساعدك على إدارة تطبيقات Kubernetes. تسمى حزم Helm المخططات، وهي تتكون من بعض ملفات تكوين YAML وبعض القوالب التي يتم عرضها في ملفات بيان Kubernetes. يمكن لأي شخص إعادة استخدام المخططات لأي بيئة، مما يقلل من التعقيد والتكرار.

مسار URL التسجيل ومتطلبات imagepullsecrets

عند تطوير حزمة helm، من الشائع الاحتفاظ بعنوان URL لخادم سجل الحاوية في القيم. يعد الاحتفاظ بعنوان URL لخادم سجل الحاوية في القيم مفيدا لنقل البيانات الاصطناعية بين كل سجل حاوية بيئة. يستخدم Azure Operator Service Manager (AOSM) خدمة Network Function Manager (NFM) لنشر وظيفة الشبكة الحاوية (CNF). يحتوي Network Function Manager (NFM) على ميزات لإدخال موقع خادم سجل الحاوية و imagepullsecrets في قيم helm أثناء نشر وظيفة الشبكة (NF). imagePullSecret هو رمز مميز للتخويل، يعرف أيضا باسم السر، يخزن بيانات اعتماد Docker المستخدمة للوصول إلى سجل. على سبيل المثال، إذا كنت بحاجة إلى نشر تطبيق عبر توزيع Kubernetes، يمكنك تعريف توزيع مثل المثال التالي:

apiVersion: apps/v1 
kind: Deployment 
metadata: 
  name: nginx-deployment 
  labels: 
    app: nginx 
spec: 
  replicas: 3 
  selector: 
    matchLabels: 
      app: nginx 
  template: 
    metadata: 
      labels: 
        app: nginx 
    spec: 
      {{- if .Values.global.imagePullSecrets }} 
      imagePullSecrets: {{ toYaml .Values.global.imagePullSecrets | nindent 8 }} 
      {{- end }} 
      containers: 
      - name: contosoapp 
        image:{{ .Values.global.registryPath }}/contosoapp:1.14.2 
        ports: 
        - containerPort: 80 

values.schema.json هو ملف يسمح لك بتعيين متطلبات القيمة والقيود بسهولة في موقع واحد لمخططات Helm. في هذا الملف، حدد registryPath و imagePullSecrets كخصائص مطلوبة.

{ 
  "$schema": "http://json-schema.org/draft-07/schema#", 
  "title": "StarterSchema", 
  "type": "object", 
  "required": ["global"], 
  "properties": { 
      "global" : {
          "type": "object",
          "properties": {
              “registryPath”: {“type”: “string”}, 
              “imagePullSecrets”: {“type”: “string”}, 
          }
          "required": [ "registryPath", "imagePullSecrets" ], 
      } 
   } 
} 

توفر حمولة طلب NFDVersion القيم التالية في registryValuesPaths:

"registryValuesPaths": [ "global.registryPath" ], 
"imagePullSecretsValuesPaths": [ "global.imagePullSecrets" ], 

أثناء توزيع NF، يقوم مشغل وظيفة الشبكة (NFO) بتعيين registryPath إلى موقع خادم Azure Container Registry (ACR) الصحيح. على سبيل المثال، يقوم NFO بتشغيل الأمر المكافئ التالي:

$ helm install --set "global.registryPath=<registryURL>" --set "global.imagePullSecrets[0].name=<secretName>" releasename ./releasepackage 

إشعار

يتم تعيين registryPath دون أي بادئة مثل https:// أو oci://. إذا كانت البادئة مطلوبة في حزمة helm، يحتاج الناشرون إلى تعريف هذا في الحزمة.

values.yaml هو ملف يحتوي على القيم الافتراضية لمخطط Helm. إنه ملف YAML يحدد القيم الافتراضية لمخطط. في ملف values.yaml، يجب أن يكون هناك نوعان من المتغيرات؛ imagePullSecrets و registryPath. يتم وصف كل منها في الجدول.

global: 
   imagePullSecrets: [] 
   registryPath: “” 
الاسم النوع ‏‏الوصف
imagePullSecrets السلسلة imagePullSecrets هي صفيف من الأسماء السرية، والتي تستخدم لسحب صور الحاوية
مسار التسجيل السلسلة registryPath هو AzureContainerRegistry موقع الخادم

يجب توفير imagePullSecrets و registryPath في خطوة إعداد إنشاء NFDVersion.

يقوم NFO قيد التشغيل في نظام المجموعة بملء هذين المتغيرين (imagePullSecrets و registryPath) أثناء إصدار helm باستخدام الأمر helm install -set.

لمزيد من المعلومات، راجع: pull-image-private-registry

قيود عدم قابلية التغيير

تمنع قيود عدم قابلية التغيير إجراء تغييرات على ملف أو دليل. على سبيل المثال، لا يمكن تغيير ملف غير قابل للتغيير أو إعادة تسميته، ولا يمكن حذف ملف يسمح بعمليات الإلحاق أو تعديله أو إعادة تسميته.

تجنب استخدام العلامات القابلة للتغيير

يجب على المستخدمين تجنب استخدام علامات قابلة للتغيير مثل الأحدث أو التطوير أو الاستقرار. على سبيل المثال، إذا كان deployment.yaml يستخدم "الأحدث" ل . Values.image.tag سيفشل النشر.

 image: "{{ .Values.global.registryPath }}/{{ .Values.image.repository }}:{{ .Values.image.tag}}“

تجنب المراجع إلى السجل الخارجي

يجب على المستخدمين تجنب استخدام مراجع إلى سجل خارجي. على سبيل المثال، إذا كان deployment.yaml يستخدم مسار تسجيل مشفرا أو يشير السجل الخارجي إلى أنه يفشل في التحقق من الصحة.

 image: http://myURL/{{ .Values.image.repository }}:{{ .Values.image.tag}}

التوصيات

يوصى بتقسيم تعريفات الموارد المخصصة (CRDs) واستخدامها بالإضافة إلى استخدام عمليات التحقق اليدوية. يتم وصف كل منها في الأقسام التالية.

تقسيم تعريف CRD واستخدامه

نوصي بتقسيم إعلان واستخدام CRDs إلى مخططات helm منفصلة لدعم التحديثات. للحصول على معلومات مفصلة، راجع: method-2-separate-charts

عمليات التحقق اليدوية

راجع الصور ومواصفات الحاوية التي تم إنشاؤها للتأكد من أن الصور لها بادئة registryURL ويتم ملء imagePullSecrets ب secretName.

 helm template --set "global.imagePullSecrets[0].name=<secretName>" --set "global.registry.url=<registryURL>" <release-name> <chart-name> --dry-run

OR

 helm install --set "global.imagePullSecrets[0].name=<secretName>" --set "global.registry.url=<registryURL>" <release-name> <chart-name> --dry-run
 kubectl create secret <secretName> regcred --docker-server=<registryURL> --dockerusername=<regusername> --docker-password=<regpassword>

مستودع الصور الثابتة والعلامات

يجب أن يحتوي كل مخطط helm على مستودع صور وعلامات ثابتة. يجب على المستخدمين تعيين مستودع الصور ووضع علامة على القيم الثابتة. يمكن تعيين القيم الثابتة بواسطة:

  • عن طريق ترميزها في سطر الصورة أو،
  • تعيين القيم في values.yaml وعدم الكشف عن هذه القيم في إصدار تصميم وظيفة الشبكة (NFDV).

يجب تعيين إصدار تصميم وظيفة الشبكة (NFDV) إلى مجموعة ثابتة من مخططات helm والصور. يتم تحديث المخططات والصور فقط عن طريق نشر إصدار جديد من تصميم وظيفة الشبكة (NFDV).

 image: "{{ .Values.global.registryPath }}/contosoapp:1.14.2“

أو

 image: "{{ .Values.global.registryPath }}/{{ .Values.image.repository }}:{{ .Values.image.tag}}“
 
YAML values.yaml
image:
  repository: contosoapp
  tag: 1.14.2