تمرين - إنشاء إجراء GitHub للنشر إلى AKS
- 10 دقائق
في هذا التمرين، ستكمل المهام التالية:
- تحسين إجراء GitHub الحالي لتضمين مهمة توزيع.
- تحقق من نشر التغييرات إلى نظام مجموعة Azure Kubernetes Service (AKS).
- التراجع عن النشر.
تحديث بيان Kubernetes لخدمة المنتج
لنشر إصدارات جديدة من خدمة منتج eShop، قم بتحرير ملف product.yml للإشارة إلى Azure Container Registry (ACR) الذي استخدمته في الوحدة السابقة.
في المستودع المتشعب، حدد code tab، ثم حدد ملف product.yml.
لتحرير الملف، حدد رمز التحرير (القلم الرصاص).
تحرير السطر:
containers: - image: [replace with your ACR name].azurecr.io/productservice:latestاستبدل باسم
[replace with your ACR name]ACR الخاص بك ، مثل acseshop186748394.في الجزء العلوي الأيسر، حدد تنفيذ التغييرات...، ثم في مربع الحوار، حدد تنفيذ التغييرات.
إنشاء إجراء التوزيع
تضيف التعليمات البرمجية YAML خطوة GitHub التي تحتوي على خطوة واحدة، والتي تنشر صورا جديدة. فيما يلي الخطوات الواردة في مشغل ubuntu-latest:
- التحقق من المستودع الذي يوجد فيه هذا الملف.
- يقوم تسجيل الدخول إلى Azure بتسجيل الدخول إلى Azure باستخدام بيانات اعتماد كيان الخدمة.
- إعداد kubelogin لتسجيل الدخول غير التفاعلي تكوين ملف kubeconfig لمصادقة Azure.
- تعيين سياق تعيين سياق K8s بيانات اعتماد خدمة Azure Kubernetes (AKS) في ملف .kube/config المشغل.
- ينشر التطبيق التطبيق إلى AKS، باستخدام الصورة المضمنة في الخطوة السابقة وملف بيان Kubernetes الذي قمت بتحريره سابقا.
أكمل الخطوات التالية لإنشاء إجراء GitHub الذي ينشر خدمة القسيمة:
في المستودع المتشعب، في code tab، حدد علامة التبويب .github/workflows.
حدد azure-kubernetes-service.yml.
لتحرير الملف، حدد رمز التحرير (القلم الرصاص).
في أسفل الملف، الصق التعليمات البرمجية YAML التالية في المحرر:
deploy: permissions: actions: read contents: read id-token: write runs-on: ubuntu-latest needs: [buildImage] steps: # Checks out the repository this file is in - uses: actions/checkout@v3 # Logs in with your Azure credentials - name: Azure login uses: azure/login@v1.4.6 with: creds: '${{ secrets.AZURE_CREDENTIALS }}' # Use kubelogin to configure your kubeconfig for Azure auth - name: Set up kubelogin for non-interactive login uses: azure/use-kubelogin@v1 with: kubelogin-version: 'v0.0.25' # Retrieves your Azure Kubernetes Service cluster's kubeconfig file - name: Get K8s context uses: azure/aks-set-context@v3 with: resource-group: ${{ env.RESOURCE_GROUP }} cluster-name: ${{ env.CLUSTER_NAME }} admin: 'false' use-kubelogin: 'true' # Deploys application based on given manifest file - name: Deploys application uses: Azure/k8s-deploy@v4 with: action: deploy manifests: ${{ env.DEPLOYMENT_MANIFEST_PATH }} images: | ${{ env.AZURE_CONTAINER_REGISTRY }}.azurecr.io/${{ env.CONTAINER_NAME }}:${{ github.sha }} pull-images: falseفي الجزء العلوي الأيسر، حدد تنفيذ التغييرات...، ثم في مربع الحوار، حدد تنفيذ التغييرات.
تشغيل عملية نشر
يؤدي تحديث ملف azure-kubernetes-service.yml وتثبيت التغييرات إلى تشغيل عملية نشر أخرى تلقائيا. الآن راجع كيف يؤدي إجراء تغيير في التعليمات البرمجية إلى نشر آخر.
لديك منتج جديد يرغب فريق التسويق في إضافته إلى الكتالوج.
في المستودع المتشعب، في code tab، حدد المجلد Products.
حدد المجلد Data.
حدد ملف ProductDataContext.c.
لتحرير الملف، حدد رمز التحرير (القلم الرصاص).
في أسفل الملف، أضف منتجا جديدا إلى مصفوفة المنتجات :
new Product { Name = "Camping Tent 2", Description = "This updated tent is improved and cheaper, perfect for your next trip.", Price = 79.99m, ImageUrl = "product9.png" },في الجزء العلوي الأيسر، حدد تنفيذ التغييرات...، ثم في مربع الحوار، حدد تنفيذ التغييرات.
مراقبة التوزيع
لمراقبة تقدم التوزيع، حدد علامة التبويب Actions.
حدد أحدث تشغيل سير عمل مدرج لسير عمل Build and deploy an app to AKS. اسم التشغيل هو رسالة التثبيت التي استخدمتها في الخطوة السابقة.
حدد مهمة deploy للاطلاع على تفاصيل تشغيل سير العمل هذا.
في المحطة الطرفية، قم بتشغيل الأمر التالي لمراقبة قرون خدمة القسيمة في نظام مجموعة AKS. تقوم علامة
--selectorبتصفية القائمة إلى pods لخدمة القسيمة فقط، وترشد علامة--watchkubectlلمشاهدة التغييرات.kubectl get pods --selector=app=productservice --watchأثناء التوزيع، يظهر تباين للإخراج التالي:
NAME READY STATUS RESTARTS AGE productservice-7979d4c47-xlcrr 1/1 Running 0 17m productservice-ff98b6d8d-7wmsh 0/1 Pending 0 0s productservice-ff98b6d8d-7wmsh 0/1 Pending 0 0s productservice-ff98b6d8d-7wmsh 0/1 ContainerCreating 0 0s productservice-ff98b6d8d-7wmsh 1/1 Running 0 4s productservice-7979d4c47-xlcrr 1/1 Terminating 0 19mفي الإخراج السابق، لاحظ أنه تم إنشاء جراب productservice جديد. عندما يكون الجراب الجديد جاهزا، يتم إنهاء الحاوية القديمة. تجعل هذه العملية الانتقال إلى الإصدار الجديد سلسا قدر الإمكان.
تحقق من التطبيق
أكمل الخطوات التالية للتحقق من أن تطبيقك لا يزال يعمل:
عرض eShop المنشور عن طريق تشغيل هذا الأمر في المحطة الطرفية:
echo "http://$(kubectl get services --namespace ingress-nginx ingress-nginx-controller --output jsonpath='{.status.loadBalancer.ingress[0].ip}')"يقوم الأمر بإرجاع عنوان IP الخارجي لتطبيق الويب. اضغط مع الاستمرار على CTRL وحدد الارتباط لفتح التطبيق في علامة تبويب جديدة.
انتقل إلى صفحة المنتجات لعرض الخيمة الجديدة المدرجة في أسفل الصفحة.
التراجع عن النشر
أحد عوامل التخفيف الشائعة لمشكلات الإنتاج هو العودة إلى نشر جيد معروف. يحتفظ Kubernetes بمحفوظات توزيع يمكنك استخدامها للرجوع إلى إصدار سابق من تطبيقك.
في المحطة الطرفية، قم بتشغيل هذا الأمر لإزالة الخيمة الجديدة التي أضفتها للتو إلى موقع الويب:
kubectl rollout undo deployment/productservice
يجب أن تشاهد رسالة وحدة التحكم هذه:
deployment.apps/productservice rolled back
قم بتحديث صفحة المنتجات في المستعرض، ويجب ألا تكون الخيمة الجديدة مدرجة بعد الآن.
Note
في سيناريو الحياة الحقيقية، يمكنك نشر البيانات الاصطناعية للبناء في بيئات متعددة. على سبيل المثال، قد يكون لديك بيئات التطوير والاختبار والتقسيم المرحلي. يمكنك تشغيل مهام سير عمل التوزيع حسب أحداث مثل دمج PRs. يمكنك إضافة بوابات الجودة أو الموافقة، مثل موافقة PR للمساهم، لمنع عمليات النشر غير المتوقعة إلى الإنتاج.