مشاركة عبر


نظرة عامة على متطلبات Helm

Helm هو مدير حزمة ل Kubernetes يساعد على تبسيط إدارة دورة حياة التطبيق. تسمى حزم Helm المخططات وتتألف من تكوين YAML وملفات القوالب. عند تنفيذ عملية Helm، يتم عرض المخططات في ملفات بيان Kubernetes لتشغيل إجراء دورة حياة التطبيق المناسب. للتكامل الأكثر كفاءة مع Azure Operator Service Manager (AOSM)، يجب على الناشر مراعاة بعض اعتبارات أفضل الممارسات عند تطوير مخططات Helm.

اعتبارات registryUrl و imagePullSecrets

يتطلب كل مخطط Helm بشكل عام registryUrl و imagePullSecrets. الأكثر شيوعا، يعرض الناشر هذه المعلمات في values.yaml. في البداية، تعتمد AOSM على كشف الناشر لهذه القيم بطريقة صارمة، بحيث يمكن استبدالها بقيم Azure المناسبة أثناء النشر. العمل الإضافي، لا يمكن لجميع الناشرين الامتثال بسهولة للتعامل الصارم مع هذه القيم التي تتطلبها AOSM.

  • تخفي بعض المخططات registryUrl و/أو imagePullSecrets خلف الشروط، أو قيود القيم الأخرى، والتي لم يتم استيفاءها دائما.
  • لا تعلن بعض المخططات عن registryUrl و/أو imagePullSecrets كسلسلة مسماة متوقعة، بدلا من ذلك كصفيف.

لتقليل متطلبات التوافق الصارمة على الناشرين، قدمت AOSM لاحقا طريقتين محسنتين للتعامل مع هذه القيم. قم أولا بإدخالArtifactStoreDetail وأخيرا Cluster Registry. لا تعتمد هاتان الطريقتان الأحدث على registryUrl أو imagePullSecrets الصالحة التي تظهر في حزمة Helm. بدلا من ذلك، تقوم هذه الأساليب بإدخال هذه القيم مباشرة في عمليات pod، نيابة عن وظيفة الشبكة.

ملخص الأسلوب ل registryUrl و imagePullSecrets

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

ارث.

  • يتطلب من الناشر وضع معلمات متوافقة ل registryUrl و imagePullSecrets في قيم helm وقوالب التوزيع لاستبدالها.
  • تتم استضافة الصور في Publisher Azure Container Registry (ACR).

InjectArtifactStoreDetail.

  • يستخدم خطاف الويب لإدخال registryUrl و imagePullSecrets مباشرة في عمليات الجراب، مع الحد الأدنى من التبعيات على helm.
  • لا تزال الصور مستضافة في ACR الناشر.

سجل نظام المجموعة.

  • يستخدم خطاف الويب لإدخال registryUrl و imagePullSecrets مباشرة في عمليات الجراب، دون أي تبعية على helm.
  • تتم استضافة الصور في سجل مجموعة ملحق NFO المحلي.

إشعار

في جميع الحالات الثلاث، يقوم AOSM باستبدال قيم AOSM لأي قيم يعرضها الناشر في القوالب. الفرق الوحيد هو طريقة الاستبدال.

المتطلبات القديمة ل registryUrl و imagePullSecrets

يستخدم Azure Operator Service Manager (AOSM) خدمة Network Function Manager (NFM) لنشر وظائف الشبكة الحاوية (CNFs). باستخدام الأسلوب القديم، يستبدل NFM قيم سجل حاوية AOSMUrl و imagePullSecrets في عملية helm أثناء نشر Network Function (NF).

استخدام أسلوب قديم

يوضح قالب نشر helm التالي مثالا على كيفية عرض الناشر ل registryPath و imagePullSecrets للتوافق مع نهج AOSM القديم.

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 مثالا على كيفية تعيين الناشر بسهولة متطلبات registryPath و imagePullSecretsvalue للتوافق مع نهج AOSM القديم.

{ 
  "$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 request payload مثالا على كيفية توفير الناشر لقيم registryPath و imagePullSecretsvalue للتوافق مع نهج AOSM القديم.

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

يوضح التالي values.yaml مثالا على كيفية توفير الناشر لقيم registryPath و imagePullSecretsvalue للتوافق مع نهج AOSM القديم.

global: 
   imagePullSecrets: [] 
   registryPath: “” 

إشعار

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

اعتبارات أخرى مع الأسلوب القديم

يجب أن يأخذ Publisher في الاعتبار التوصيات التالية عند استخدام الأسلوب القديم:

  • تجنب المراجع إلى السجل الخارجي
  • إجراء عمليات التحقق اليدوية
  • ضمان مستودع الصور الثابتة والعلامات

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

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

إجراء عمليات التحقق اليدوية

راجع الصور ومواصفات الحاوية التي تم إنشاؤها للتأكد من أن الصور لها بادئة 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
 image: http://myURL/{{ .Values.image.repository }}:{{ .Values.image.tag}}

متطلبات injectArtifactStoreDetails ل registryUrl و imagePullSecrets

في بعض الحالات، قد لا تكون مخططات helm الخاصة بجهات خارجية متوافقة تماما مع متطلبات AOSM ل registryURL. في هذه الحالة، يمكن استخدام ميزة injectArtifactStoreDetails لتجنب إجراء تغييرات التوافق على حزم helm. مع تمكين injectArtifactStoreDetails، يتم استخدام أسلوب إخطار على الويب لإدخال registryUrl المناسب و imagePullSecrets ديناميكيا أثناء عمليات الجراب. يتجاوز هذا القيم التي تم تكوينها في حزمة helm.

استخدام أسلوب injectArtifactStoreDetails

لتمكين injectArtifactStoreDetails، قم بتعيين المعلمة installOptions في قسم NF resource roleOverrides إلى true، كما هو موضح في المثال التالي.

resource networkFunction 'Microsoft.HybridNetwork/networkFunctions@2023-09-01' = {
  name: nfName
  location: location
  properties: {
    nfviType: 'AzureArcKubernetes'
    networkFunctionDefinitionVersionResourceReference: {
      id: nfdvId
      idType: 'Open'
    }
    allowSoftwareUpdate: true
    nfviId: nfviId
    deploymentValues: deploymentValues
    configurationType: 'Open'
    roleOverrideValues: [
      // Use inject artifact store details feature on test app 1
      '{"name":"testapp1", "deployParametersMappingRuleProfile":{"helmMappingRuleProfile":{"options":{"installOptions":{"atomic":"false","wait":"false","timeout":"60","injectArtifactStoreDetails":"true"},"upgradeOptions": {"atomic": "false", "wait": "true", "timeout": "100", "injectArtifactStoreDetails": "true"}}}}}'
    ]
  }
}

إشعار

يجب أن تعرض حزمة مخطط helm قيم registryURL و imagePullSecrets المنسقة بشكل صحيح.

متطلبات تسجيل نظام المجموعة ل registryUrl و imagePullSecrets

للحصول على معلومات حول استخدام سجل نظام المجموعة، يرجى الاطلاع على وثائق المفهوم.

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

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

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

بيان CRD للمخطط وتقسيم الاستخدام

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