نشر تطبيق السحابة الأصلي يدويا إلى Azure Kubernetes Service
قبل أن تتمكن من أتمتة عمليات نشر موقع الويب الخاص بك، تحتاج إلى نشر تطبيق eShop الحالي يدويا إلى خدمة Azure Kubernetes (AKS). يمكنك إنشاء موارد Azure ونشر التطبيق إلى AKS باستخدام أوامر Azure CLI والبرامج النصية bash. وأخيرا، يمكنك إنشاء كيان خدمة Azure Active Directory (Azure AD) للسماح ل GitHub Actions بالنشر إلى AKS وAzure Container Registry.
تنشئ الأوامر الموارد التالية لنشر إصدار محدث من تطبيق eShop.
- توفير Azure Container Registry (ACR) ثم دفع الصور إلى السجل.
- توفير نظام مجموعة AKS، ثم نشر الحاويات في نظام المجموعة.
- اختبار التوزيع.
- إنشاء كيانات الخدمة للسماح ل GitHub Actions بالنشر في AKS وAzure Container Registry.
Important
تأكد من إكمال المتطلبات الأساسية قبل البدء.
فتح بيئة التطوير
يمكنك اختيار استخدام مساحة التعليمات البرمجية GitHub التي تستضيف التمرين، أو إكمال التمرين محليا في Visual Studio Code.
إعداد GitHub Codespaces
نسخ مستودع https://github.com/MicrosoftDocs/mslearn-dotnet-cloudnative-devops إلى حساب GitHub الخاص بك. ثم على نسختك الجديدة:
- حدد الرمز.
- حدد علامة التبويب Codespaces .
- حدد أيقونة + لإنشاء مساحة التعليمات البرمجية الخاصة بك.
يستغرق GitHub عدة دقائق لإنشاء وتكوين مساحة التعليمات البرمجية. عند اكتمال العملية، سترى ملفات التعليمات البرمجية للتمرين.
اختياري: إعداد Visual Studio Code
لاستخدام Visual Studio Code، قم بنسخ مستودع https://github.com/MicrosoftDocs/mslearn-dotnet-cloudnative-devops إلى حساب GitHub الخاص بك واستنساخه محليا. Then:
- قم بتثبيت أي متطلبات نظام لتشغيل Dev Container في Visual Studio Code.
- تأكد من تشغيل Docker.
- في نافذة Visual Studio Code جديدة، افتح مجلد المستودع المستنسخ
- اضغط على Ctrl+Shift+P لفتح لوحة الأوامر.
- البحث: >حاويات التطوير: إعادة البناء وإعادة الفتح في الحاوية
- ينشئ Visual Studio Code حاوية التطوير محليا.
بناء الحاويات
في جزء المحطة الطرفية، قم بتشغيل أمر dotnet CLI هذا:
dotnet publish /p:PublishProfile=DefaultContainer
إنشاء موارد Azure
في جزء المحطة الطرفية، سجل الدخول إلى Azure باستخدام أمر Azure CLI هذا:
az login --use-device-codeعرض اشتراك Azure المحدد.
az account show -o tableإذا تم تحديد الاشتراك الخطأ، فاستخدم الأمر az account set لتحديد الاشتراك الصحيح.
قم بتشغيل أمر Azure CLI التالي للحصول على قائمة بمناطق Azure والاسم المقترن به:
az account list-locations -o tableحدد موقع أقرب منطقة إليك واستخدمها في الخطوة التالية عن طريق استبدال
[Closest Azure region]قم بتشغيل عبارات bash هذه:
export LOCATION=[Closest Azure region] export RESOURCE_GROUP=rg-eshop export CLUSTER_NAME=aks-eshop export ACR_NAME=acseshop$SRANDOMتنشئ الأوامر السابقة متغيرات البيئة التي ستستخدمها في أوامر Azure CLI التالية. تحتاج إلى تغيير الموقع إلى منطقة Azure قريبة منك مثل eastus. إذا كنت ترغب في اسم مختلف لمجموعة الموارد أو نظام مجموعة AKS أو ACR، فقم بتغيير هذه القيم. لعرض المستودعات الجديدة في مدخل Microsoft Azure، قم بتعيين نفسك كمسؤول أتمتة توافق التطبيقات في التحكم في الوصول (IAM) لسجل الحاوية.
قم بتشغيل أوامر Azure CLI هذه:
az group create --name $RESOURCE_GROUP --location $LOCATION az acr create --resource-group $RESOURCE_GROUP --name $ACR_NAME --sku Basic az acr login --name $ACR_NAMEإذا تلقيت خطأ في المصادقة عند
az acr login --name $ACR_Nameتشغيله، فأنت بحاجة إلى تشغيل مستخدم المسؤول في سجل الحاوية الذي تم إنشاؤه حديثا في Azure ضمن الإعدادات - مفاتيح الوصول. يطالبك Azure بإدخال بيانات الاعتماد هذه للمتابعة. قد تحتاج أيضا إلى المصادقة مرة أخرى باستخدامaz login --use-device-code.تنشئ هذه الأوامر مجموعة موارد لاحتواء موارد Azure و ACR لصورك، ثم تقوم بتسجيل الدخول إلى ACR. قد يستغرق الأمر بضع دقائق حتى ترى هذا الإخراج:
... }, "status": null, "systemData": { "createdAt": "2023-10-19T09:11:51.389157+00:00", "createdBy": "", "createdByType": "User", "lastModifiedAt": "2023-10-19T09:11:51.389157+00:00", "lastModifiedBy": "", "lastModifiedByType": "User" }, "tags": {}, "type": "Microsoft.ContainerRegistry/registries", "zoneRedundancy": "Disabled" } Login Succeededلوضع علامة على الصور ودفعها إلى ACR الذي أنشأته، قم بتشغيل هذه الأوامر:
docker tag store $ACR_NAME.azurecr.io/storeimage:v1 docker tag products $ACR_NAME.azurecr.io/productservice:v1 docker push $ACR_NAME.azurecr.io/storeimage:v1 docker push $ACR_NAME.azurecr.io/productservice:v1يمكنك التحقق من اكتمال دفع الصور بنجاح باستخدام هذا الأمر:
az acr repository list --name $ACR_NAME --output tableأنشئ AKS وقم بتوصيله ب ACR باستخدام هذه الأوامر:
az aks create --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --node-count 1 --generate-ssh-keys --node-vm-size Standard_B2s --network-plugin azure --attach-acr $ACR_NAME az aks get-credentials --name $CLUSTER_NAME --resource-group $RESOURCE_GROUPتنشئ الأوامر نظام مجموعة AKS عقدة واحدة، وتوصيلها ب ACR، ثم قم بتوصيل الجهاز المحلي الخاص بك بمجموعة AKS. قد تستغرق الأوامر بضع دقائق لإكمالها.
تحقق من أن AKS الجديدة يمكنها سحب الصور من ACR باستخدام هذا الأمر:
az aks check-acr --acr $ACR_NAME.azurecr.io --name $CLUSTER_NAME --resource-group $RESOURCE_GROUPيجب أن تشاهد إخراجا مشابها للرسائل التالية:
[2023-10-19T13:33:09Z] Loading azure.json file from /etc/kubernetes/azure.json [2023-10-19T13:33:09Z] Checking managed identity... [2023-10-19T13:33:09Z] Cluster cloud name: AzurePublicCloud [2023-10-19T13:33:09Z] Kubelet managed identity client ID: 00001111-aaaa-2222-bbbb-3333cccc4444 [2023-10-19T13:33:09Z] Validating managed identity existance: SUCCEEDED [2023-10-19T13:33:09Z] Validating image pull permission: SUCCEEDED [2023-10-19T13:33:09Z] Your cluster can pull images from acseshop1251599299.azurecr.io!يمكنك الآن تشغيل أوامر kubectl مقابل نظام مجموعة AKS الجديد. انسخ عنوان URL الكامل ل ACR من الإخراج ؛ على سبيل المثال، يوجد أعلى عنوان URL acseshop1251599299.
تحقق من حالة نظام مجموعة AKS:
kubectl get nodes -Aيجب أن تشاهد إخراجا مشابها للرسائل التالية:
NAME STATUS ROLES AGE VERSION aks-nodepool1-37200563-vmss000000 Ready agent 3h44m v1.26.6
تكوين بيان توزيع Kubernetes
الآن توجد صور eShop في ACR يمكنك تحديث بيان توزيع AKS لاستخدام هذه الصور الجديدة.
في Visual Studio Code أو Codespaces، من لوحة EXPLORER، حدد الملف deployment.yml في جذر المشروع.
استبدل في السطر 17:
- image: [replace with your ACR name].azurecr.io/storeimage:v1الصق اسم ACR المنسخ من الخطوة السابقة - يجب أن يبدو السطر مشابها ل yaml التالي:
- image: acseshop1251599299.azurecr.io/storeimage:v1كرر هذه الخطوات للسطر 65:
- image: [replace with your ACR name].azurecr.io/productservice:v1احفظ الملف باستخدام CTRL+S.
في جزء المحطة الطرفية، انشر وحدة تحكم دخول NGINX باستخدام أمر kubernetes التالي:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.9.3/deploy/static/provider/cloud/deploy.yamlkubectlيضيف الأمر الخدمات والمكونات للسماح بالدخول إلى نظام مجموعة AKS. تحقق من أن الدخول جاهز للتشغيل باستخدام أمر kubernetes التالي:kubectl get services --namespace ingress-nginxيجب أن تشاهد إخراجا مشابها للرسائل التالية:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE ingress-nginx-controller LoadBalancer 10.0.135.51 20.26.154.64 80:32115/TCP,443:32254/TCP 58s ingress-nginx-controller-admission ClusterIP 10.0.137.137 <none> 443/TCP 58sنشر تطبيق eShop باستخدام هذا الأمر:
kubectl apply -f deployment.ymlيقوم الأمر
kubectlapply بنشر تطبيق eShop وتطبيق ويب Blazor الأمامي وخدمة منتج REST API الخلفية وقاعدة دخول لتوجيه نسبة استخدام الشبكة إلى الخدمات الصحيحة إلى نظام مجموعة AKS. أعد تشغيل هذا الأمر إذا تلقيت أي خطأ في عمليات النشر.يجب أن تشاهد إخراجا مشابها للرسائل التالية:
deployment.apps/storeimage created service/eshop-website created deployment.apps/productservice created service/eshop-backend created ingress.networking.k8s.io/eshop-ingress createdتحقق من نشر خدمتين مصغرتين باستخدام هذا الأمر:
kubectl get pods -Aيجب أن تشاهد إخراجا مشابها للرسائل التالية:
NAMESPACE NAME READY STATUS RESTARTS AGE default productservice-7569b8c64-vfbfz 1/1 Running 0 3m56s default storeimage-6c7c999d7c-zsnxd 1/1 Running 0 3m56s ingress-nginx ingress-nginx-admission-create-szb8l 0/1 Completed 0 4m4s ingress-nginx ingress-nginx-admission-patch-czdbv 0/1 Completed 0 4m4s ingress-nginx ingress-nginx-controller-58bf5bf7dc-nwtsr 1/1 Running 0 4m4sعرض eShop المنشور باستخدام هذا الأمر:
echo "http://$(kubectl get services --namespace ingress-nginx ingress-nginx-controller --output jsonpath='{.status.loadBalancer.ingress[0].ip}')"يقوم الأمر بإرجاع عنوان IP الخارجي لتطبيق الويب. اضغط مع الاستمرار على CTRL وانقر فوق الارتباط لفتح التطبيق في علامة تبويب جديدة.
إنشاء كيان خدمة للنشر من GitHub
يمكن ل GitHub Actions نشر صور الحاوية إلى Azure Container Registry. لذلك يجب أن يكون لدى مشغل GitHub أذونات للاتصال ب Azure. تنشئ الخطوات التالية كيان خدمة Azure AD للعمل كهوية GitHub Actions داخل Azure.
لحفظ معرف الاشتراك في متغير بيئة، قم بتشغيل الأمر التالي في المحطة الطرفية:
export SUBS=$(az account show --query 'id' --output tsv)لإنشاء كيان خدمة Azure AD للسماح بالوصول من GitHub، قم بتشغيل الأمر التالي:
az ad sp create-for-rbac --name "eShop" --role contributor --scopes /subscriptions/$SUBS/resourceGroups/$RESOURCE_GROUP --json-authيظهر تباين الإخراج التالي:
Creating 'Contributor' role assignment under scope '/subscriptions/ffffffff-aaaa-bbbb-6666-777777777777' The output includes credentials that you must protect. Be sure that you do not include these credentials in your code or check the credentials into your source control. For more information, see https://aka.ms/azadsp-cli { "clientId": "00001111-aaaa-2222-bbbb-3333cccc4444", "clientSecret": "abc1A~abc123ABC123abc123ABC123abc123ABC1", "subscriptionId": "00000000-0000-0000-0000-000000000000", "tenantId": "00000000-0000-0000-0000-000000000000", "activeDirectoryEndpointUrl": "https://login.microsoftonline.com", "resourceManagerEndpointUrl": "https://management.azure.com/", "activeDirectoryGraphResourceId": "https://graph.windows.net/", "sqlManagementEndpointUrl": "https://management.core.windows.net:8443/", "galleryEndpointUrl": "https://gallery.azure.com/", "managementEndpointUrl": "https://management.core.windows.net/" }انسخ إخراج JSON والأقواس لاستخدامه في الخطوة التالية.
إنشاء أسرار GitHub
يستخدم مشغل GitHub Actions بيانات الاعتماد للتفاعل مع Container Registry وAKS. كيان الخدمة وبيانات الاعتماد الخاصة بسجل الحاوية هي معلومات حساسة. من الأفضل تخزين المعلومات الحساسة كأسرار مشفرة في مكان آمن. يوفر GitHub موقعا مضمنا لتخزين الأسرار والمتغيرات الأخرى.
أكمل الخطوات التالية لتخزين المعلومات الحساسة بشكل آمن كمتغيرات بيئة في المستودع الخاص بك. يجب على مسؤولي المستودع إدارة الأسرار التي يمكن لمشغل GitHub Actions الوصول إليها.
في مستودع GitHub المتشعب، انتقل إلى Settings>Secrets and variables>Actions.
في صفحة Actions secrets and variables، حدد New repository secret.
في New secret الصفحة ، ضمن Name، أدخل AZURE_CREDENTIALS ، وضمن Secret، أدخل إخراج JSON الذي نسخته من المحطة الطرفية.
يجب أن تبدو الإعدادات مشابهة للقطة الشاشة التالية:
حدد Add secret.
ستستخدم سر GitHub هذا في القسم التالي لإنشاء إجراء GitHub لإنشاء صورة الحاوية.