تمرين - إنشاء مخطط Helm للنشر
في هذه الوحدة، يمكنك إنشاء مخطط Helm لنشره في Azure Kubernetes Service (AKS) باستخدام GitHub Actions. لإنشاء مخطط Helm، يمكنك إكمال المهام التالية:
- تحقق من تثبيت Helm.
- إنشاء مخطط.
- تكوين المخطط.
- إنشاء نشر.
- إنشاء ملف YAML فارغ.
- إضافة محتويات إلى ملف YAML.
- إنشاء خدمة.
- إنشاء دخول.
- إنشاء اسم منطقة DNS.
تحقق من تثبيت Helm وقم بتحديث المستودع
تم تثبيت Helm CLI بالفعل في Azure Cloud Shell. إذا لم يكن لديك Cloud Shell مفتوح بالفعل، فقم بتسجيل الدخول إلى Cloud Shell وتأكد من تعيين Bash كمحطة Cloud Shell الطرفية.
قم بتشغيل
helm version
للتأكد من أن إصدار Helm المعروض أكبر من 3.قم بالتبديل إلى المستودع المتشعب لهذه الوحدة النمطية عن طريق تشغيل
cd mslearn-aks-deployment-pipeline-github-actions
.قم بتشغيل
git pull origin main
لسحب التغييرات من الوحدات السابقة.
إنشاء مخطط Helm
إنشاء قالب Helm المتداول في دليل kubernetes لمستودعك.
في Cloud Shell، قم بالتبديل إلى دليل kubernetes :
cd kubernetes
استخدم
helm create
لإنشاء دليل جديد يسمى contoso-website في دليل kubernetes :helm create contoso-website
قم بالتبديل إلى الدليل الجديد باستخدام
cd
.cd contoso-website
احذف المخططات ومجلدات القوالب في هذا الدليل.
rm -r charts templates
إنشاء مجلد قوالب فارغ جديد.
mkdir templates
لبدء إنشاء أحمال العمل في المخطط الفارغ، قم بإنشاء مجموعة جديدة من ملفات YAML عن طريق نقل الملفات الموجودة في kubernetes إلى مجلد القوالب الجديد:
mv ../*.yaml ./templates
لديك الآن مخطط Helm جديد. بعد ذلك، قم بتكوين المخطط.
تكوين المخطط
قم بتشغيل
cd ../..
للتبديل إلى جذر المستودع الخاص بك.قم بتشغيل
code .
لفتح محرر التعليمات البرمجية في الدليل الحالي.في القائمة اليسرى، قم بتوسيع المجلد kubernetes/contoso-website ، وافتح ملف Chart.yaml . Chart.yaml هو الملف الذي يسمي المخطط وهو المكان الذي يبحث فيه Helm عن معلومات حول المخطط.
قم بإزالة كافة محتويات الملف باستثناء الأسطر الثلاثة الأولى وإصدار المخطط، ثم قم بتحرير الوصف بحيث يبدو الملف مثل هذا المثال:
apiVersion: v2 name: contoso-website description: Chart for the Contoso company website version: 0.1.0
احفظ الملف عن طريق تحديد الزاوية العلوية اليسرى من شريط أدوات المحرر ثم تحديد حفظ، أو بالضغط على Ctrl+S.
إنشاء توزيع
إضافة قوالب لهذا النشر.
من القائمة اليسرى، افتح ملف deployment.yaml في مجلد kubernetes/templates .
في القسم الرئيسي
metadata
، أضف مفتاحا جديدا يسمىnamespace
بالقيمة{{ default "staging" .Release.Namespace }}
.metadata
يجب أن يبدو المقطع مثل هذا المثال:metadata: name: contoso-website namespace: {{ default "staging" .Release.Namespace }}
بشكل افتراضي، يوزع سير العمل هذا المورد إلى
staging
مساحة الاسم، ولكن إذا كانhelm install
الأمر يحتوي على خيارNamespace
، فإن سير العمل يستخدم مساحة الاسم هذه بدلا من ذلك.ضمن
template
/containers
/spec
القسم ، استبدل!IMAGE!
بالإصداراتlatest
أوtag
من نظام مجموعة AKS.من الممارسات الجيدة تقسيم
registry
image
أجزاء و وtag
من اسم الصورة للعمل معها بسهولة أكبر. أضف ثلاثة متغيرات قالب جديدة تستخدم قيمValues.image.registry
وValues.image.name
و.Values.image.tag
- image: {{ .Values.image.registry }}.azurecr.io/{{ .Values.image.name }}:{{ default "latest" .Values.image.tag }}
يجب أن يبدو ملف deployment.yaml الخاص بك مثل المثال التالي:
apiVersion: apps/v1 kind: Deployment metadata: name: contoso-website namespace: {{ default "staging" .Release.Namespace }} spec: selector: matchLabels: app: contoso-website template: metadata: labels: app: contoso-website spec: containers: - image: {{ .Values.image.registry }}.azurecr.io/{{ .Values.image.name }}:{{ default "latest" .Values.image.tag }} name: contoso-website resources: requests: cpu: 100m memory: 128Mi limits: cpu: 250m memory: 256Mi ports: - containerPort: 80 name: http
احفظ الملف.
إضافة محتوى إلى ملف values.yaml
في وقت سابق، استخدمت {{ .Release.Namespace }}
، لذلك Release
هو نطاق متغير. كل نطاق متغير له قيم افتراضية مختلفة ومتغيرات. ملف values.yaml هو نطاق متغير آخر. يستخدم Helm ملف values.yaml لاسترداد جميع قيم القالب التي تبدأ ب {{ .Values }}
.
يجب أن يكون لهذا الملف نفس بنية الملف الذي تستخدمه لاستدعاء المتغيرات. ألق نظرة سريعة على ملف deployment.yaml الذي تم تحريره لمشاهدة البنية. لاحظ أنك استخدمت .Values.image.registry
و .Values.image.name
و .Values.image.tag
في ملف deployment.yaml .
في جذر دليل contoso-website ، افتح الملف values.yaml .
حذف جميع المحتويات في الملف، بحيث يكون لديك ملف YAML فارغ.
أضف المحتوى التالي إلى الملف الفارغ، واستبدل
<ACR-NAME>
العنصر النائب باسم Azure Container Registry.image: registry: <ACR-NAME> name: contoso-website tag: latest
هذه القيم هي القيمة الافتراضية إذا لم تقم بتمرير قيمة مختلفة كمعلمة باستخدام
--set
خيار أمر Helm.احفظ الملف.
إنشاء خدمة
افتح ملف service.yaml في مجلد القوالب.
في
metadata
قسم من الملف، أضف مفتاحا جديدا يسمىnamespace
يستخدم نفس القيمة التي استخدمتها في ملف deployment.yaml .namespace: {{ default "staging" .Release.Namespace }}
يجب أن يبدو ملف service.yaml الخاص بك مثل المثال التالي:
apiVersion: v1 kind: Service metadata: name: contoso-website namespace: {{ default "staging" .Release.Namespace }} spec: ports: - port: 80 protocol: TCP targetPort: http name: http selector: app: contoso-website type: ClusterIP
احفظ الملف.
إنشاء دخول
افتح ملف ingress.yaml .
في
metadata
قسم من الملف، أضفnamespace
مرة أخرى القيمة التي استخدمتها في ملف deployment.yaml .اذهب إلى المفتاح
host
. يمكنك إنشاء مضيفين منفصلين لنشر التقسيم المرحلي والإنتاج، بحيث لا يمكن للمستخدمين الوصول إلىstaging
مساحة الاسم باستخدام عناوين URL للإنتاج. قم بـتسلسل مساحة الاسم في اسم المضيف. المكون الإضافي لتوجيه تطبيق HTTP في نظام مجموعة AKS يعالج تحليل الاسم.- host: contoso-{{ default "staging" .Release.Namespace }}.!DNS!
استبدل
!DNS!
بمتغير قالب جديد لاسم منطقة DNS.- host: contoso-{{ default "staging" .Release.Namespace }}.{{ .Values.dns.name }}
يجب أن يبدو ملف ingress.yaml النهائي مثل المثال التالي:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: contoso-website namespace: {{ default "staging" .Release.Namespace }} annotations: kubernetes.io/ingress.class: addon-http-application-routing spec: rules: - host: contoso-{{ default "staging" .Release.Namespace }}.{{ .Values.dns.name }} http: paths: - backend: service: name: contoso-website port: name: http path: / pathType: Prefix
احفظ الملف.
إضافة قيمة اسم منطقة DNS
افتح الملف values.yaml وأضف مفتاحا
dns.name
بعدimage
المفتاح. استبدل<ACR-NAME>
باسم سجل الحاوية الخاص بك و<DNS-NAME>
باسم منطقة DNS AKS من إخراج البرنامج النصي للإعداد. يجب أن يبدو الملف الخاص بك مثل المثال التالي:image: registry: <ACR-NAME> name: contoso-website tag: latest dns: name: <DNS-NAME>
إذا لم يكن لديك اسم منطقة DNS من إخراج البرنامج النصي للإعداد الأصلي، فقم بتشغيل استعلام Azure CLI التالي في نافذة Cloud Shell مختلفة للحصول عليه، واستبدال
<resource-group-name>
العنصر النائب باسم مجموعة الموارد الخاصة بك.az aks show -g <resource-group-name> -n contoso-website -o tsv --query addonProfiles.httpApplicationRouting.config.HTTPApplicationRoutingZoneName
احفظ الملف.
دفع التغييرات
أغلق محرر Cloud Shell عن طريق تحديد الزاوية العلوية اليسرى من شريط أدوات المحرر ثم تحديد إغلاق المحرر.
لدفع جميع التغييرات إلى نسختك الفرعية، قم بتشغيل الأوامر التالية في Cloud Shell بالترتيب:
git add .
git commit -m "Add helm"
git push -u origin main
عند المطالبة، قم بتوفير PAT الذي أنشأته سابقا ككلمة مرور.
انتقل إلى الوحدة التالية لنشر مخطط Helm والتطبيق الخاص بك إلى AKS باستخدام GitHub Actions.