تمرين - إنشاء مخطط 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 الطرفية.

  1. قم بتشغيل helm version للتأكد من أن إصدار Helm المعروض أكبر من 3.

  2. قم بالتبديل إلى المستودع المتشعب لهذه الوحدة النمطية عن طريق تشغيل cd mslearn-aks-deployment-pipeline-github-actions.

  3. قم بتشغيل git pull origin main لسحب التغييرات من الوحدات السابقة.

إنشاء مخطط Helm

إنشاء قالب Helm المتداول في دليل kubernetes لمستودعك.

  1. في Cloud Shell، قم بالتبديل إلى دليل kubernetes :

    cd kubernetes
    
  2. استخدم helm create لإنشاء دليل جديد يسمى contoso-website في دليل kubernetes :

    helm create contoso-website
    
  3. قم بالتبديل إلى الدليل الجديد باستخدام cd.

    cd contoso-website
    
  4. احذف المخططات ومجلدات القوالب في هذا الدليل.

    rm -r charts templates
    
  5. إنشاء مجلد قوالب فارغ جديد.

    mkdir templates
    
  6. لبدء إنشاء أحمال العمل في المخطط الفارغ، قم بإنشاء مجموعة جديدة من ملفات YAML عن طريق نقل الملفات الموجودة في kubernetes إلى مجلد القوالب الجديد:

    mv ../*.yaml ./templates
    

لديك الآن مخطط Helm جديد. بعد ذلك، قم بتكوين المخطط.

تكوين المخطط

  1. قم بتشغيل cd ../.. للتبديل إلى جذر المستودع الخاص بك.

  2. قم بتشغيل code . لفتح محرر التعليمات البرمجية في الدليل الحالي.

  3. في القائمة اليسرى، قم بتوسيع المجلد kubernetes/contoso-website ، وافتح ملف Chart.yaml . Chart.yaml هو الملف الذي يسمي المخطط وهو المكان الذي يبحث فيه Helm عن معلومات حول المخطط.

  4. قم بإزالة كافة محتويات الملف باستثناء الأسطر الثلاثة الأولى وإصدار المخطط، ثم قم بتحرير الوصف بحيث يبدو الملف مثل هذا المثال:

    apiVersion: v2
    name: contoso-website
    description: Chart for the Contoso company website
    version: 0.1.0
    
  5. احفظ الملف عن طريق تحديد الزاوية العلوية اليسرى من شريط أدوات المحرر ثم تحديد حفظ، أو بالضغط على Ctrl+S.

إنشاء توزيع

إضافة قوالب لهذا النشر.

  1. من القائمة اليسرى، افتح ملف deployment.yaml في مجلد kubernetes/templates .

  2. في القسم الرئيسي metadata ، أضف مفتاحا جديدا يسمى namespace بالقيمة {{ default "staging" .Release.Namespace }}. metadata يجب أن يبدو المقطع مثل هذا المثال:

    metadata:
      name: contoso-website
      namespace: {{ default "staging" .Release.Namespace }}
    

    بشكل افتراضي، يوزع سير العمل هذا المورد إلى staging مساحة الاسم، ولكن إذا كان helm install الأمر يحتوي على خيار Namespace ، فإن سير العمل يستخدم مساحة الاسم هذه بدلا من ذلك.

  3. ضمن template/containers/specالقسم ، استبدل !IMAGE! بالإصدارات latest أو tag من نظام مجموعة AKS.

    من الممارسات الجيدة تقسيم registryimageأجزاء و و 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
    
  4. احفظ الملف.

إضافة محتوى إلى ملف values.yaml

في وقت سابق، استخدمت {{ .Release.Namespace }}، لذلك Release هو نطاق متغير. كل نطاق متغير له قيم افتراضية مختلفة ومتغيرات. ملف values.yaml هو نطاق متغير آخر. يستخدم Helm ملف values.yaml لاسترداد جميع قيم القالب التي تبدأ ب {{ .Values }}.

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

  1. في جذر دليل contoso-website ، افتح الملف values.yaml .

  2. حذف جميع المحتويات في الملف، بحيث يكون لديك ملف YAML فارغ.

  3. أضف المحتوى التالي إلى الملف الفارغ، واستبدل <ACR-NAME> العنصر النائب باسم Azure Container Registry.

    image:
      registry: <ACR-NAME>
      name: contoso-website
      tag: latest
    

    هذه القيم هي القيمة الافتراضية إذا لم تقم بتمرير قيمة مختلفة كمعلمة باستخدام --set خيار أمر Helm.

  4. احفظ الملف.

إنشاء خدمة

  1. افتح ملف service.yaml في مجلد القوالب.

  2. في 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
    
  3. احفظ الملف.

إنشاء دخول

  1. افتح ملف ingress.yaml .

  2. في metadata قسم من الملف، أضف namespace مرة أخرى القيمة التي استخدمتها في ملف deployment.yaml .

  3. اذهب إلى ⁧المفتاح host. يمكنك إنشاء مضيفين منفصلين لنشر التقسيم المرحلي والإنتاج، بحيث لا يمكن للمستخدمين الوصول إلى staging مساحة الاسم باستخدام عناوين URL للإنتاج. قم بـتسلسل مساحة الاسم في اسم المضيف. المكون الإضافي لتوجيه تطبيق HTTP في نظام مجموعة AKS يعالج تحليل الاسم.

           - host: contoso-{{ default "staging" .Release.Namespace }}.!DNS!
    
  4. استبدل !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
    
  5. احفظ الملف.

إضافة قيمة اسم منطقة DNS

  1. افتح الملف 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
    
  2. احفظ الملف.

دفع التغييرات

أغلق محرر Cloud Shell عن طريق تحديد الزاوية العلوية اليسرى من شريط أدوات المحرر ثم تحديد إغلاق المحرر.

لدفع جميع التغييرات إلى نسختك الفرعية، قم بتشغيل الأوامر التالية في Cloud Shell بالترتيب:

git add .
git commit -m "Add helm"
git push -u origin main

عند المطالبة، قم بتوفير PAT الذي أنشأته سابقا ككلمة مرور.

انتقل إلى الوحدة التالية لنشر مخطط Helm والتطبيق الخاص بك إلى AKS باستخدام GitHub Actions.