نظرة عامة على متطلبات 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