الإنشاء والتوزيع إلى خدمة Azure Kubernetes باستخدام Azure Pipelines

خدمات Azure DevOps

استخدم Azure Pipelines للتوزيع تلقائيًا إلى Azure Kubernetes Service (AKS). يتيح لك Azure Pipelines الإنشاء والاختبار والنشر باستخدام التكامل المستمر (CI) والتسليم المستمر (CD) باستخدام Azure DevOps.

في هذه المقالة، ستتعلم كيفية إنشاء مسار يقوم بإنشاء تطبيقك ونشره باستمرار. في كل مرة تقوم فيها بتغيير التعليمات البرمجية في مستودع يحتوي على Dockerfile، يتم دفع الصور إلى سجل حاويات Azure الخاص بك، ثم يتم نشر البيانات إلى نظام مجموعة AKS.

المتطلبات الأساسية

الحصول على الرمز

نسخ المستودع التالي الذي يحتوي على نموذج تطبيق وDockerfile:

https://github.com/MicrosoftDocs/pipelines-javascript-docker

إنشاء موارد Azure

سجل الدخول إلى مدخل Microsoft Azure، ثم حدد الزر Cloud Shell في الزاوية العلوية اليسرى. استخدم Azure CLI أو PowerShell لإنشاء نظام مجموعة AKS.

إنشاء سجل حاويات

# Create a resource group
az group create --name myapp-rg --location eastus

# Create a container registry
az acr create --resource-group myapp-rg --name mycontainerregistry --sku Basic

# Create a Kubernetes cluster
az aks create \
    --resource-group myapp-rg \
    --name myapp \
    --node-count 1 \
    --enable-addons monitoring \
    --generate-ssh-keys

تسجيل الدخول إلى Azure Pipelines

سجل الدخول إلى Azure Pipelines. بعد تسجيل الدخول، ينتقل المستعرض إلى https://dev.azure.com/my-organization-name ويعرض لوحة معلومات Azure DevOps.

ضمن مؤسستك المحددة، قم بإنشاء مشروع. إذا لم يكن لديك أي مشاريع في مؤسستك، فسترى شاشة إنشاء مشروع لبدء الاستخدام. وإلا، حدد الزر إنشاء مشروع في الزاوية العلوية اليسرى من لوحة المعلومات.

إنشاء البنية الأساسية لبرنامج ربط العمليات التجارية

الاتصال بالمستودع وتحديده

  1. سجل الدخول إلى مؤسسة Azure DevOps، وانتقل إلى مشروعك.

  2. انتقل إلى Pipelines، ثم حدد New pipeline.

  3. قم بخطوات المعالج عن طريق تحديد GitHub كموقع للتعليمات البرمجية المصدر.

  4. قد تتم إعادة توجيهك إلى GitHub لتسجيل الدخول. إذا كان الأمر كذلك،‏ فأدخل بيانات اعتماد GitHub.

  5. عندما ترى قائمة مستودعات، حدد مستودعك.

  6. قد تتم إعادة توجيهك إلى GitHub لتثبيت تطبيق Azure Pipelines. إذا كان الأمر كذلك، فحدد Approve & install.

  7. حدد النشر في Azure Kubernetes Service.

  8. إذا تمت مطالبتك، فحدد الاشتراك الذي أنشأت فيه السجل والكتلة.

  9. حدد نظام المجموعة myapp.

  10. بالنسبة إلى Namespace، حدد Existing، ثم حدد default.

  11. حدد اسم سجل الحاوية الخاص بك.

  12. يمكنك ترك اسم الصورة معينًا إلى الافتراضي.

  13. تعيين منفذ الخدمة إلى 8080.

  14. قم بتعيين خانة الاختيار تمكين تطبيق المراجعة لطلبات السحب لمراجعة التكوين المتعلق بالتطبيق ليتم تضمينه في البنية الأساسية لبرنامج ربط العمليات التجارية YAML التي تم إنشاؤها تلقائيا في الخطوات اللاحقة.

  15. حدد Validate and configure.

    بينما تنشئ البنية الأساسية لبرنامج ربط العمليات التجارية Azure البنية الأساسية لبرنامج ربط العمليات التجارية الخاصة بك، سوف تقوم العملية بما يلي:

    • إنشاء اتصال خدمة سجل Docker لتمكين البنية الأساسية لبرنامج ربط العمليات التجارية الخاصة بك لدفع الصور إلى سجل الحاوية.

    • إنشاء بيئة ومورد Kubernetes داخل البيئة. بالنسبة إلى نظام المجموعة الذي يدعم التحكم في الوصول استنادًا إلى الدور، ينشئ مورد Kubernetes الذي تم إنشاؤه ضمنيًا كائنات ServiceAccount وRoleBinding في نظام المجموعة بحيث لا يمكن لـServiceAccount الذي تم إنشاؤه تنفيذ عمليات خارج مساحة الاسم المختارة.

    • قم بإنشاء ملف azure-pipelines.yml، والذي يحدد البنية الأساسية لبرنامج ربط العمليات التجارية الخاصة بك.

    • إنشاء ملف بيان Kubernetes. يتم إنشاء هذه الملفات عن طريق ترطيب قوالب deployment.ymlوservice.yml استنادًا إلى التحديدات التي أجريتها. عندما تكون جاهزًا، حدد حفظ وتشغيل.

  16. حدد حفظ وتشغيل.

  17. يمكنك تغيير رسالة Commit إلى شيء مثل Add pipeline to our repository. عندما تكون جاهزًا، حدد حفظ وتشغيل لتثبيت البنية الأساسية لبرنامج ربط العمليات التجارية الجديدة في المستودع الخاص بك، ثم ابدأ التشغيل الأول للبنية الأساسية لبرنامج ربط العمليات التجارية الجديدة!

الاطلاع على نشر التطبيق

بينما يتم تشاغيل خط الأنابيب الخاص بك، شاهد مرحلة البناء⁧⁩ الخاصة بك، ثم مرحلة ⁧⁩النشر⁧⁩ الخاصة بك، وانتقل من الأزرق (تشغيل) إلى الأخضر (الانتهاء). يمكنك تحديد المراحل والوظائف لمشاهدة المسار الخاص بك في أثناء العمل.

إشعار

إذا كنت تستخدم وكيلًا مستضافًا من Microsoft، فيجب إضافة نطاق IP للعامل المستضاف من Microsoft إلى جدار الحماية الخاص بك. احصل على القائمة الأسبوعية لنطاقات IP من ملف JSON الأسبوعي، والذي يتم نشره كل يوم أربعاء. تصبح نطاقات IP الجديدة فعالة في يوم الاثنين التالي. لمزيد من المعلومات راجع، عوامل مستضافة من Microsoft. للعثور على نطاقات IP المطلوبة لمؤسسة Azure DevOps، تعرف على كيفية تحديد نطاقات IP المحتملة للوكلاء المستضافين من Microsoft.

بعد الانتهاء من تشغيل البنية الأساسية لبرنامج ربط العمليات التجارية، استكشف ما حدث ثم انتقل إلى رؤية تطبيقك المنشور. من ملخص البنية الأساسية لبرنامج ربط العمليات التجارية:

  1. حدد علامة التبويب البيئات.

  2. حدد عرض البيئة.

  3. حدد مثيل التطبيق الخاص بك لمساحة الاسم التي قمت بنشرها. إذا استخدمت الإعدادات الافتراضية، فهذا هو تطبيق myapp في مساحة الاسم الافتراضية.

  4. حدد علامة التبويب الخدمات.

  5. اختر عنوان IP الخارجي وانسخه إلى حافظتك.

  6. افتح علامة تبويب أو نافذة مستعرض جديدة وأدخل <عنوان> IP:8080.

إذا كنت تقوم بإنشاء نموذج التطبيق الخاص بنا، فسيظهر Hello world في المستعرض الخاص بك.

كيفية بناء البنية الأساسية لبرنامج ربط العمليات التجارية

عند الانتهاء من تحديد الخيارات ثم تابعت للتحقق من صحة وتكوين البنية الأساسية لبرنامج ربط العمليات التجارية Azure البنية الأساسية لبرنامج ربط العمليات التجارية التي أنشأت مسارًا لك، باستخدام قالب Deploy to Azure Kubernetes Service.

تستخدم مرحلة الإنشاء مهمة Docker لإنشاء الصورة ودفعها إلى Azure Container Registry.

- stage: Build
  displayName: Build stage
  jobs:  
  - job: Build
    displayName: Build job
    pool:
      vmImage: $(vmImageName)
    steps:
    - task: Docker@2
      displayName: Build and push an image to container registry
      inputs:
        command: buildAndPush
        repository: $(imageRepository)
        dockerfile: $(dockerfilePath)
        containerRegistry: $(dockerRegistryServiceConnection)
        tags: |
          $(tag)

    - task: PublishPipelineArtifact@1
      inputs:
        artifactName: 'manifests'
        path: 'manifests'

تستخدم مهمة التوزيع مهمة بيان Kubernetes لإنشاء imagePullSecret ما تتطلبه عقد نظام مجموعة Kubernetes للسحب من مورد Azure Container Registry. ثم يتم استخدام ملفات البيان بواسطة مهمة بيان Kubernetes للنشر إلى مجموعة Kubernetes. تم إنشاء ملفات البيان و service.ymldeployment.ymlعند استخدام قالب Deploy to Azure Kubernetes Service .

- stage: Deploy
  displayName: Deploy stage
  dependsOn: Build
  jobs:
  - deployment: Deploy
    displayName: Deploy job
    pool:
      vmImage: $(vmImageName)
    environment: 'myenv.aksnamespace' #customize with your environment
    strategy:
      runOnce:
        deploy:
          steps:
          - task: DownloadPipelineArtifact@2
            inputs:
              artifactName: 'manifests'
              downloadPath: '$(System.ArtifactsDirectory)/manifests'

          - task: KubernetesManifest@0
            displayName: Create imagePullSecret
            inputs:
              action: createSecret
              secretName: $(imagePullSecret)
              namespace: $(k8sNamespace)
              dockerRegistryEndpoint: $(dockerRegistryServiceConnection)

          - task: KubernetesManifest@0
            displayName: Deploy to Kubernetes cluster
            inputs:
              action: deploy
              namespace: $(k8sNamespace)
              manifests: |
                $(System.ArtifactsDirectory)/manifests/deployment.yml
                $(System.ArtifactsDirectory)/manifests/service.yml
              imagePullSecrets: |
                $(imagePullSecret)
              containers: |
                $(containerRegistry)/$(imageRepository):$(tag)

تنظيف الموارد

كلما انتهيت من الموارد التي أنشأتها، يمكنك استخدام الأمر التالي لحذفها:

az group delete --name myapp-rg

أدخل y عندما تتم مطالبتك.

Azure DevOps Services | Azure DevOps Server 2020 | Azure DevOps Server 2019

استخدم Azure Pipelines للتوزيع تلقائيًا إلى Azure Kubernetes Service (AKS). يتيح لك Azure Pipelines الإنشاء والاختبار والنشر باستخدام التكامل المستمر (CI) والتسليم المستمر (CD) باستخدام Azure DevOps.

في هذه المقالة، ستتعلم كيفية إنشاء مسار يقوم بإنشاء تطبيقك ونشره باستمرار. في كل مرة تقوم فيها بتغيير التعليمات البرمجية في مستودع يحتوي على Dockerfile، يتم دفع الصور إلى سجل حاويات Azure الخاص بك، ثم يتم نشر البيانات إلى نظام مجموعة AKS.

المتطلبات الأساسية

الحصول على الرمز

نسخ المستودع التالي الذي يحتوي على نموذج تطبيق وDockerfile:

https://github.com/MicrosoftDocs/pipelines-javascript-docker

إنشاء موارد Azure

سجل الدخول إلى مدخل Microsoft Azure، ثم حدد الزر Cloud Shell في الزاوية العلوية اليسرى. استخدم Azure CLI أو PowerShell لإنشاء نظام مجموعة AKS.

إنشاء سجل حاويات

# Create a resource group
az group create --name myapp-rg --location eastus

# Create a container registry
az acr create --resource-group myapp-rg --name mycontainerregistry --sku Basic

# Create a Kubernetes cluster
az aks create \
    --resource-group myapp-rg \
    --name myapp \
    --node-count 1 \
    --enable-addons monitoring \
    --generate-ssh-keys 

تكوين المصادقة

عند استخدام Azure Container Registry (ACR) مع Azure Kubernetes Service (AKS)، يجب عليك إنشاء آلية مصادقة. يمكن تحقيق ذلك بطريقتين:

  1. منح AKS حق الوصول إلى ACR. راجع المصادقة باستخدام Azure Container Registry من Azure Kubernetes Service.

  2. استخدم سر سحب صورة Kubernetes. يمكن إنشاء سر سحب صورة باستخدام مهمة نشر Kubernetes.

قم بإنشاء مسار خط أنابيب

بنيت البنية الأساسية لبرنامج ربط العمليات التجارية المستخدمة لإعداد CI بالفعل صورة Docker ودفعتها إلى Azure Container Registry. كما قام أيضًا بتعبئة ونشر مخطط Helm كأداة. في البنية الأساسية لبرنامج ربط العمليات التجارية للإصدار، سنقوم بنشر صورة الحاوية كتطبيق Helm إلى نظام مجموعة AKS.

  1. في Azure Pipelines، افتح ملخص البناء الخاص بك.

  2. في ملخص البناء، اختر أيقونة الإصدار لبدء مسار إصدار جديد.

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

  3. حدد قالب المهمة الفارغة.

  4. افتح صفحة Tasks وحدد Agent job.

  5. اختر + إضافة مهمة جديدة وإضافة مهمة مثبت أداة Helm. وهذا يضمن أن العامل الذي يقوم بتشغيل المهام اللاحقة مثبت عليه Helm وKubectl.

  6. اختر + مرة أخرى وأضف حزمة وانشر مهمة مخططات Helm. تكوين إعدادات هذه المهمة كما يلي:

    • نوع الاتصال: حدد Azure Resource Manager للاتصال بمجموعة AKS باستخدام اتصال خدمة Azure. بدلًا من ذلك، إذا كنت تريد الاتصال بأي نظام مجموعة Kubernetes باستخدام kubeconfig أو حساب خدمة، يمكنك تحديد اتصال خدمة Kubernetes. في هذه الحالة، ستحتاج إلى إنشاء اتصال خدمة Kubernetes وتحديده بدلًا من اشتراك Azure للإعداد التالي.

    • اشتراك Azure: حدد اتصالًا من القائمة ضمن اتصالات خدمة Azure المتوفرة أو أنشئ اتصال أذونات أكثر تقييدًا باشتراك Azure الخاص بك. إذا رأيت زر تخويل بجوار الإدخال، فاستخدمه لتخويل الاتصال باشتراك Azure الخاص بك. إذا كنت لا ترى اشتراك Azure المطلوب في قائمة الاشتراكات، فشاهد إنشاء اتصال خدمة Azure لإعداد الاتصال يدويًا.

    • مجموعة الموارد: أدخل مجموعة الموارد التي تحتوي على نظام مجموعة AKS أو حددها.

    • نظام مجموعة Kubernetes: أدخل مجموعة AKS التي أنشأتها أو حددها.

    • الأمر: حدد init كأمر Helm. يؤدي هذا إلى تثبيت Tiller على نظام مجموعة Kubernetes قيد التشغيل. كما سيقوم بإعداد أي تكوين محلي ضروري. حدد استخدام إصدار صورة الكناري لتثبيت أحدث إصدار من الإصدار التجريبي من Tiller. يمكنك أيضا اختيار ترقية Tiller إذا تم تثبيته مسبقا عن طريق وضع علامة على Upgrade Tiller. إذا تم تمكين هذه الخيارات، يتم تشغيل المهمة helm init --canary-image --upgrade

  7. اختر + في مهمة العامل وأضف حزمة أخرى وانشر مهمة مخططات Helm. تكوين إعدادات هذه المهمة كما يلي:

    • نظام مجموعة Kubernetes: أدخل مجموعة AKS التي أنشأتها أو حددها.

    • مساحة الاسم: أدخل مساحة اسم مجموعة Kubernetes حيث تريد نشر التطبيق الخاص بك. يدعم Kubernetes مجموعات ظاهرية متعددة مدعومة بنفس المجموعة الفعلية. تسمى هذه المجموعات الظاهرية مساحات الأسماء. يمكنك استخدام مساحات الأسماء لإنشاء بيئات مختلفة مثل التطوير والاختبار والتقسيم المرحلي في نفس المجموعة.

    • الأمر: حدد الترقية كأمر Helm. يمكنك تشغيل أي أمر Helm باستخدام هذه المهمة وتمرير خيارات الأمر كوسيطات. عند تحديد الترقية، تعرض المهمة بعض الحقول التالية:

      • نوع المخطط: حدد مسار الملف. بدلًا من ذلك، يمكنك تحديد اسم المخطط إذا كنت تريد تحديد عنوان URL أو اسم مخطط. على سبيل المثال، إذا كان اسم المخطط هو stable/mysql، يتم تنفيذ المهمة helm upgrade stable/mysql

      • مسار المخطط: يمكن أن يكون هذا مسارًا إلى مخطط معبئ أو مسارًا إلى دليل مخطط غير معبأة. في هذا المثال، تقوم بنشر المخطط باستخدام بنية CI، لذا حدد حزمة الملفات باستخدام أداة انتقاء الملفات أو أدخل $(System.DefaultWorkingDirectory)/**/*.tgz

      • اسم الإصدار: أدخل اسما للإصدار الخاص بك؛ على سبيل المثال، azuredevops

      • إعادة إنشاء Pods: حدد خانة الاختيار هذه إذا كان هناك تغيير في التكوين أثناء الإصدار وتريد استبدال جراب قيد التشغيل بالتكوين الجديد.

      • إعادة تعيين القيم: حدد خانة الاختيار هذه إذا كنت تريد أن تتجاوز القيم المضمنة في المخطط كافة القيم التي توفرها المهمة.

      • Force: حدد خانة الاختيار هذه إذا أردت الترقية والإعادة إلى الحالة السابقة للحذف وإعادة إنشاء المورد وإعادة تثبيت الإصدار الكامل في حالة حدوث تعارضات. وهذا مفيد في السيناريوهات التي يمكن أن يفشل فيها تطبيق التصحيحات (على سبيل المثال، للخدمات لأن عنوان IP لنظام المجموعة غير قابل للتغيير).

      • الوسيطات: أدخل وسيطات أمر Helm وقيمها؛ لهذا المثال --set image.repository=$(imageRepoName) --set image.tag=$(Build.BuildId) راجع هذا القسم للحصول على وصف لسبب استخدامنا لهذه الوسيطات.

      • تمكين TLS: حدد خانة الاختيار هذه لتمكين الاتصالات القوية المستندة إلى TLS بين Helm وTiller.

      • شهادة المرجع المصدق: حدد شهادة CA ليتم تحميلها واستخدامها لإصدار شهادات لعميل Tiller وHelm.

      • الشهادة: حدد شهادة Tiller أو شهادة عميل Helm

      • المفتاح: حدد مفتاح Tiller أو مفتاح عميل Helm

  8. في صفحة المتغيرات للبنية الأساسية لبرنامج ربط العمليات التجارية، أضف متغيرًا باسم imageRepoName وقم بتعيين القيمة إلى اسم مستودع صور Helm الخاص بك. عادة ما يكون هذا بالتنسيق example.azurecr.io/coderepository

  9. احفظ مسار الإصدار.

الوسيطات المستخدمة في مهمة ترقية Helm

في البنية الأساسية لبرنامج ربط العمليات التجارية للبناء، يتم وضع علامة على صورة الحاوية مع $(Build.BuildId) ويتم دفع هذا إلى Azure Container Registry. في مخطط Helm، يمكنك تحديد معلمات تفاصيل صورة الحاوية مثل الاسم والعلامة لأنه يمكن استخدام نفس المخطط للنشر في بيئات مختلفة. يمكن أيضا تحديد هذه القيم في ملف values.yaml أو تجاوزها بواسطة ملف قيم يوفره المستخدم، والذي يمكن بدوره تجاوزه بواسطة المعلمات --set أثناء تثبيت Helm أو ترقيته.

في هذا المثال، نمرر الوسيطات التالية:

--set image.repository=$(imageRepoName) --set image.tag=$(Build.BuildId)

تم تعيين قيمة $(imageRepoName) في صفحة المتغيرات (أو قسم المتغيرات في ملف YAML الخاص بك). بدلًا من ذلك، يمكنك استبداله مباشرة باسم مستودع الصور في قيمة الوسيطات --set أو ملف values.yaml. على سبيل المثال:

  image:
    repository: VALUE_TO_BE_OVERRIDDEN
    tag: latest

بديل آخر هو تعيين الخيار تعيين القيم للمهمة لتحديد قيم الوسيطة كأزواج قيم مفاتيح مفصولة بفواصل.

إنشاء إصدار لنشر تطبيقك

أنت الآن جاهز لإنشاء إصدار، ما يعني بدء عملية تشغيل البنية الأساسية لبرنامج ربط العمليات التجارية للإصدار مع البيانات الاصطناعية التي تنتجها بنية معينة. يؤدي هذا إلى نشر البنية:

  1. اختر + Release وحدد Create a release.

  2. في لوحة Create a release، تحقق من تحديد إصدار البيانات الاصطناعية الذي تريد استخدامه واختر Create.

  3. اختر ارتباط الإصدار في رسالة شريط المعلومات. على سبيل المثال: "تم إنشاء Release-1".

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