التشغيل السريع: استخدام تكوين تطبيق Azure في خدمة Azure Kubernetes
في Kubernetes، يمكنك إعداد pods لاستهلاك التكوين من ConfigMaps. يتيح لك فصل التكوين عن صور الحاوية الخاصة بك، ما يجعل تطبيقاتك قابلة للنقل بسهولة. يمكن لموفر Kubernetes تكوين تطبيق Azure إنشاء ConfigMaps والأسرار من قيم المفاتيح ومراجع Key Vault في تكوين تطبيق Azure. يمكنك من الاستفادة من Azure App Configuration للتخزين المركزي وإدارة التكوين الخاص بك دون أي تغييرات على التعليمات البرمجية للتطبيق الخاص بك.
يمكن استهلاك ConfigMap كمتغيرات بيئة أو ملف مثبت. في هذا التشغيل السريع، يمكنك دمج Azure App Configuration Kubernetes Provider في حمل عمل Azure Kubernetes Service حيث تقوم بتشغيل تكوين بسيط ASP.NET Core app المستهلك من ملف JSON.
تلميح
راجع خيارات أحمال العمل المستضافة في Kubernetes للوصول إلى تكوين تطبيق Azure.
إشعار
سيرشدك هذا التشغيل السريع خلال إعداد موفر Kubernetes لتكوين تطبيقات Azure. اختياريا، يمكنك استخدام أوامر Azure Developer CLI التالية مع القالب azure-appconfig-aks
لتوفير موارد Azure ونشر نموذج التطبيق المستخدم بواسطة هذا التشغيل السريع. لمزيد من المعلومات حول هذا القالب، تفضل بزيارة مستودع azure-appconfig-aks على GitHub.
azd init -t azure-appconfig-aks
azd up
المتطلبات الأساسية
- متجر App Configuration. إنشاء متجر.
- An Azure Container Registry. إنشاء سجل.
- مجموعة Azure Kubernetes Service (AKS) التي تم منحها الإذن لسحب الصور من Azure Container Registry. إنشاء نظام مجموعة AKS.
- .NET SDK 6.0 أو أحدث
- Azure CLI
- Docker Desktop
- دومان
- kubectl
إنشاء تطبيق قيد التشغيل في AKS
في هذا القسم، ستقوم بإنشاء تطبيق ويب بسيط ASP.NET Core يعمل في Azure Kubernetes Service (AKS). يقرأ التطبيق التكوين من ملف JSON محلي. في القسم التالي، ستقوم بتمكينه من استهلاك التكوين من Azure App Configuration دون تغيير التعليمات البرمجية للتطبيق. إذا كان لديك بالفعل تطبيق AKS يقرأ التكوين من ملف، فتخط هذا القسم وانتقل إلى استخدام موفر Kubernetes لتكوين التطبيق. تحتاج فقط إلى التأكد من أن ملف التكوين الذي تم إنشاؤه بواسطة الموفر يطابق مسار الملف المستخدم من قبل التطبيق الخاص بك.
إنشاء تطبيق
استخدم واجهة سطر الأوامر .NET (CLI) وقم بتشغيل الأمر التالي لإنشاء مشروع تطبيق ويب جديد ASP.NET Core في دليل MyWebApp جديد:
dotnet new webapp --output MyWebApp --framework net6.0
افتح Index.cshtml في دليل Pages، وقم بتحديث المحتوى بالتعليمات البرمجية التالية.
@page @model IndexModel @using Microsoft.Extensions.Configuration @inject IConfiguration Configuration @{ ViewData["Title"] = "Home page"; } <style> h1 { color: @Configuration["Settings:FontColor"]; } </style> <div class="text-center"> <h1>@Configuration["Settings:Message"]</h1> </div>
إنشاء دليل تكوين في جذر المشروع الخاص بك وإضافة ملف mysettings.json إليه بالمحتوى التالي.
{ "Settings": { "FontColor": "Black", "Message": "Message from the local configuration" } }
افتح program.cs وأضف ملف JSON إلى مصدر التكوين عن طريق استدعاء
AddJsonFile
الأسلوب .// Existing code in Program.cs // ... ... // Add a JSON configuration source builder.Configuration.AddJsonFile("config/mysettings.json", reloadOnChange: true, optional: false); var app = builder.Build(); // The rest of existing code in program.cs // ... ...
ضع التطبيق في حاوية
قم بتشغيل الأمر dotnet publish لإنشاء التطبيق في وضع الإصدار وإنشاء الأصول في الدليل المنشور.
dotnet publish -c Release -o published
أنشئ ملفا باسم Dockerfile في جذر دليل المشروع، وافتحه في محرر نص، وأدخل المحتوى التالي. Dockerfile هو ملف نصي لا يحتوي على ملحق ويستخدم لإنشاء صورة حاوية.
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS runtime WORKDIR /app COPY published/ ./ ENTRYPOINT ["dotnet", "MyWebApp.dll"]
إنشاء صورة حاوية باسم aspnetapp عن طريق تشغيل الأمر التالي.
docker build --tag aspnetapp .
ادفع الصورة لـ Azure Container Registry
قم بتشغيل الأمر az acr login لتسجيل الدخول إلى سجل الحاوية. يسجل المثال التالي في سجل يسمى myregistry. استبدل اسم التسجيل باسمك.
az acr login --name myregistry
يرجع
Login Succeeded
الأمر بمجرد نجاح تسجيل الدخول.استخدم علامة docker لإنشاء علامة myregistry.azurecr.io/aspnetapp:v1 للصورة aspnetapp.
docker tag aspnetapp myregistry.azurecr.io/aspnetapp:v1
تلميح
لمراجعة قائمة صور وعلامات docker الموجودة، قم بتشغيل
docker image ls
. في هذا السيناريو، يجب أن تشاهد صورتين على الأقل:aspnetapp
وmyregistry.azurecr.io/aspnetapp
.استخدم دفع docker لتحميل الصورة إلى سجل الحاوية. على سبيل المثال، يدفع الأمر التالي الصورة إلى مستودع يسمى aspnetapp مع العلامة v1 ضمن السجل myregistry.
docker push myregistry.azurecr.io/aspnetapp:v1
قم بنشر التطبيق
إنشاء دليل نشر في الدليل الجذر لمشروعك.
أضف ملف deployment.yaml إلى دليل النشر بالمحتوى التالي لإنشاء عملية نشر. استبدل قيمة
template.spec.containers.image
بالصورة التي أنشأتها في الخطوة السابقة.apiVersion: apps/v1 kind: Deployment metadata: name: aspnetapp-demo labels: app: aspnetapp-demo spec: replicas: 1 selector: matchLabels: app: aspnetapp-demo template: metadata: labels: app: aspnetapp-demo spec: containers: - name: aspnetapp image: myregistry.azurecr.io/aspnetapp:v1 ports: - containerPort: 80
أضف ملف service.yaml إلى دليل النشر بالمحتوى التالي لإنشاء خدمة LoadBalancer.
apiVersion: v1 kind: Service metadata: name: aspnetapp-demo-service spec: type: LoadBalancer ports: - port: 80 selector: app: aspnetapp-demo
قم بتشغيل الأمر التالي لنشر التطبيق إلى نظام مجموعة AKS.
kubectl create namespace appconfig-demo kubectl apply -f ./Deployment -n appconfig-demo
قم بتشغيل الأمر التالي والحصول على عنوان IP الخارجي الذي تعرضه خدمة LoadBalancer.
kubectl get service aspnetapp-demo-service -n appconfig-demo
افتح نافذة مستعرض، وانتقل إلى عنوان IP الذي تم الحصول عليه في الخطوة السابقة. تبدو صفحة الويب كما يلي:
استخدام موفر Kubernetes لتكوين التطبيق
الآن بعد أن أصبح لديك تطبيق يعمل في AKS، ستقوم بنشر App Configuration Kubernetes Provider إلى نظام مجموعة AKS الخاص بك الذي يعمل كوحدة تحكم Kubernetes. يسترد الموفر البيانات من متجر App Configuration الخاص بك وينشئ ConfigMap، والذي يمكن استهلاكه كملف JSON مثبت في وحدة تخزين بيانات.
إعداد مخزن Azure App Configuration
أضف قيم المفاتيح التالية إلى متجر App Configuration واترك Label و Content Type بقيمهما الافتراضية. لمزيد من المعلومات حول كيفية إضافة قيم المفاتيح إلى مخزن باستخدام مدخل Microsoft Azure أو CLI، انتقل إلى إنشاء قيمة مفتاح.
المفتاح | القيمة |
---|---|
الإعدادات:لون الخط | Green |
الإعدادات:رسالة | مرحبا من تكوين تطبيق Azure |
إعداد موفر Kubernetes لتكوين التطبيق
قم بتشغيل الأمر التالي للحصول على بيانات اعتماد الوصول لمجموعة AKS الخاصة بك. استبدل قيمة
name
المعلمات وresource-group
بمثيل AKS الخاص بك:az aks get-credentials --name <your-aks-instance-name> --resource-group <your-aks-resource-group>
تثبيت Azure App Configuration Kubernetes Provider إلى نظام مجموعة AKS باستخدام
helm
:helm install azureappconfiguration.kubernetesprovider \ oci://mcr.microsoft.com/azure-app-configuration/helmchart/kubernetes-provider \ --namespace azappconfig-system \ --create-namespace
تلميح
يتوفر موفر تكوين التطبيق Kubernetes أيضا كملحق AKS. يسمح هذا التكامل بالتثبيت والإدارة السلسين عبر Azure CLI أو قوالب ARM أو قوالب Bicep. يؤدي استخدام ملحق AKS إلى تسهيل التحديثات التلقائية للإصدار الثانوي/الجزئي، مما يضمن تحديث النظام دائما. للحصول على إرشادات التثبيت التفصيلية ، يرجى الرجوع إلى ملحق Azure App Configuration لخدمة Azure Kubernetes.
أضف ملف appConfigurationProvider.yaml إلى دليل النشر بالمحتوى التالي لإنشاء
AzureAppConfigurationProvider
مورد.AzureAppConfigurationProvider
هو مورد مخصص يحدد البيانات التي يجب تنزيلها من مخزن Azure App Configuration وينشئ ConfigMap.apiVersion: azconfig.io/v1 kind: AzureAppConfigurationProvider metadata: name: appconfigurationprovider-sample spec: endpoint: <your-app-configuration-store-endpoint> target: configMapName: configmap-created-by-appconfig-provider configMapData: type: json key: mysettings.json auth: workloadIdentity: serviceAccountName: <your-service-account-name>
استبدل قيمة
endpoint
الحقل بنقطة نهاية مخزن Azure App Configuration. انتقل إلى الخطوة التالية لتحديثauth
القسم بمعلومات المصادقة الخاصة بك.إشعار
AzureAppConfigurationProvider
هو كائن واجهة برمجة تطبيقات تعريفي. وهو يحدد الحالة المطلوبة من ConfigMap التي تم إنشاؤها من البيانات في متجر App Configuration الخاص بك مع السلوك التالي:- سيفشل إنشاء ConfigMap إذا كان ConfigMap بنفس الاسم موجودا بالفعل في نفس مساحة الاسم.
- ستتم إعادة تعيين ConfigMap استنادا إلى البيانات الحالية في متجر App Configuration إذا تم حذفه أو تعديله بأي وسيلة أخرى.
- سيتم حذف ConfigMap إذا تم إلغاء تثبيت موفر تكوين التطبيق Kubernetes.
اتبع الإرشادات لاستخدام هوية حمل العمل للمصادقة مع متجر App Configuration. قم بتحديث ملف appConfigurationProvider.yaml عن طريق استبدال
serviceAccountName
الحقل باسم حساب الخدمة الذي أنشأته. لمزيد من المعلومات حول أساليب المصادقة الأخرى، راجع الأمثلة في قسم المصادقة .قم بتحديث ملف deployment.yaml في دليل Deployment لاستخدام ConfigMap
configmap-created-by-appconfig-provider
كحجم بيانات مثبت. من المهم التأكد من أن يطابقvolumeMounts.mountPath
WORKDIR
المحدد في Dockerfile ودليل التكوين الذي تم إنشاؤه من قبل.apiVersion: apps/v1 kind: Deployment metadata: name: aspnetapp-demo labels: app: aspnetapp-demo spec: replicas: 1 selector: matchLabels: app: aspnetapp-demo template: metadata: labels: app: aspnetapp-demo spec: containers: - name: aspnetapp image: myregistry.azurecr.io/aspnetapp:v1 ports: - containerPort: 80 volumeMounts: - name: config-volume mountPath: /app/config volumes: - name: config-volume configMap: name: configmap-created-by-appconfig-provider
قم بتشغيل الأمر التالي لنشر التغييرات. استبدل مساحة الاسم إذا كنت تستخدم تطبيق AKS الحالي.
kubectl apply -f ./Deployment -n appconfig-demo
حدّث المستعرض. تعرض الصفحة محتوى محدثا.
استكشاف الأخطاء وإصلاحها
إذا كنت لا ترى تطبيقك يلتقط البيانات من متجر App Configuration، فقم بتشغيل الأمر التالي للتحقق من إنشاء ConfigMap بشكل صحيح.
kubectl get configmap configmap-created-by-appconfig-provider -n appconfig-demo
إذا لم يتم إنشاء ConfigMap، فقم بتشغيل الأمر التالي للحصول على حالة استرداد البيانات.
kubectl get AzureAppConfigurationProvider appconfigurationprovider-sample -n appconfig-demo -o yaml
إذا قام موفر Azure App Configuration Kubernetes باسترداد البيانات من متجر App Configuration بنجاح، phase
يجب أن تكون COMPLETE
الخاصية ضمن قسم الحالة للإخراج ، كما هو موضح في المثال التالي.
$ kubectl get AzureAppConfigurationProvider appconfigurationprovider-sample -n appconfig-demo -o yaml
apiVersion: azconfig.io/v1
kind: AzureAppConfigurationProvider
... ... ...
status:
lastReconcileTime: "2023-04-06T06:17:06Z"
lastSyncTime: "2023-04-06T06:17:06Z"
message: Complete sync settings to ConfigMap or Secret
phase: COMPLETE
إذا لم تكن COMPLETE
المرحلة ، فلن يتم تنزيل البيانات من متجر App Configuration بشكل صحيح. قم بتشغيل الأمر التالي لإظهار سجلات Azure App Configuration Kubernetes Provider.
kubectl logs deployment/az-appconfig-k8s-provider -n azappconfig-system
استخدم السجلات لمزيد من استكشاف الأخطاء وإصلاحها. راجع قسم الأسئلة المتداولة لمعرفة المشكلات الشائعة.
الأسئلة المتداولة
لماذا لا يتم إنشاء ConfigMap أو Secret؟
يمكنك اتباع الخطوات الواردة في دليل استكشاف الأخطاء وإصلاحها لجمع السجلات للحصول على معلومات مفصلة عن الخطأ. فيما يلي بعض الأسباب الشائعة.
- الاستجابة 403: 403 ممنوع: الهوية المكونة تفتقر إلى الأذونات اللازمة للوصول إلى متجر App Configuration. راجع قسم المصادقة للحصول على أمثلة تطابق الهوية التي تستخدمها.
- تم العثور على مرجع Key Vault في تكوين التطبيق، ولكن لم يتم تكوين "spec.secret": يتم تضمين واحد أو أكثر من مراجع Key Vault في قيم المفاتيح المحددة، ولكن لم يتم توفير معلومات المصادقة ل Key Vaults. للحفاظ على تكامل التكوين، يفشل التكوين بأكمله في التحميل. قم بتكوين
spec.secret
القسم لتوفير معلومات المصادقة الضرورية. للحصول على أمثلة والمزيد من المعلومات، راجع مرجع Key Vault .
لماذا لا يحتوي ConfigMap الذي تم إنشاؤه على البيانات المتوقعة؟
تأكد من تحديد محددات قيمة المفتاح الصحيحة لمطابقة البيانات المتوقعة. إذا لم يتم تحديد محددات، تنزيل جميع قيم المفاتيح بدون تسمية من متجر App Configuration. عند استخدام عامل تصفية مفتاح، تحقق من أنه يطابق بادئة قيم المفاتيح المتوقعة. إذا كانت قيم المفاتيح تحتوي على تسميات، فتأكد من تحديد عامل تصفية التسمية في المحددات. لمزيد من الأمثلة، راجع وثائق تحديد قيمة المفتاح.
كيف يمكنني تخصيص تثبيت Azure App Configuration Kubernetes Provider؟
يمكنك تخصيص التثبيت عن طريق توفير قيم Helm إضافية عند تثبيت موفر Kubernetes لتكوين تطبيق Azure. على سبيل المثال، يمكنك تعيين مستوى السجل أو تكوين الموفر للتشغيل على عقدة معينة أو تعطيل هوية حمل العمل. راجع دليل التثبيت للحصول على مزيد من المعلومات.
لماذا لا يمكنني المصادقة باستخدام Azure App Configuration باستخدام هوية حمل العمل بعد ترقية الموفر إلى الإصدار 2.0.0؟
بدءا من الإصدار 2.0.0، يلزم حساب خدمة يوفره المستخدم للمصادقة مع Azure App Configuration باستخدام هوية حمل العمل. يعزز هذا التغيير الأمان من خلال عزل مساحة الاسم. في السابق، تم استخدام حساب خدمة موفر Kubernetes لجميع مساحات الأسماء. للحصول على إرشادات محدثة، راجع الوثائق المتعلقة باستخدام هوية حمل العمل. إذا كنت بحاجة إلى وقت للترحيل عند الترقية إلى الإصدار 2.0.0، يمكنك تعيينه workloadIdentity.globalServiceAccountEnabled=true
مؤقتا أثناء تثبيت الموفر. يرجى ملاحظة أنه سيتم إهمال دعم استخدام حساب خدمة الموفر في إصدار مستقبلي.
تنظيف الموارد
قم بإلغاء تثبيت App Configuration Kubernetes Provider من مجموعة AKS إذا كنت تريد الاحتفاظ بنظام مجموعة AKS.
helm uninstall azureappconfiguration.kubernetesprovider --namespace azappconfig-system
إذا كنت لا تريد مواصلة استخدام الموارد التي تم إنشاؤها في هذه المقالة، يوصى بحذف مجموعة الموارد التي أنشأتها هنا لتجنب الرسوم.
هام
حذف مجموعة الموارد لا يمكن التراجع عنه. يتم حذف مجموعة الموارد وجميع الموارد المضمنة فيها نهائيًا. تأكد من عدم حذفك للموارد أو مجموعة المورد الخاطئة عن غير قصد. في حالة إنشاء الموارد لهذه المقالة داخل مجموعة موارد تشتمل على موارد أخرى تريد الاحتفاظ بها، احذف كل مورد على حدة من الجزء الخاص به بدلًا من حذف مجموعة الموارد.
- سجل الدخول إلى مدخل Microsoft Azure، وحدد Resource groups.
- في المربع تصفية حسب الاسم ، أدخل اسم مجموعة الموارد الخاصة بك.
- في قائمة النتائج، حدد اسم مجموعة الموارد لاستعراض نظرة عامة.
- حدد Delete resource group.
- يُطلب منك تأكيد حذف مجموعة الموارد. أدخل اسم مجموعة الموارد للتأكيد وحدد "Delete".
بعد بضع لحظات، يتم حذف مجموعة الموارد وكافة مواردها.
إشعار
إذا كنت تستخدم Azure Developer CLI لإعداد الموارد، يمكنك تشغيل azd down
الأمر لحذف كافة الموارد التي تم إنشاؤها بواسطة القالب azure-appconfig-aks
.
الخطوات التالية
في هذه البداية السريعة، قمت بـ:
- إنشاء تطبيق يعمل في Azure Kubernetes Service (AKS).
- توصيل نظام مجموعة AKS بمخزن App Configuration الخاص بك باستخدام App Configuration Kubernetes Provider.
- إنشاء ConfigMap مع بيانات من متجر App Configuration.
- شغل التطبيق مع التكوين من متجر App Configuration الخاص بك دون تغيير التعليمات البرمجية للتطبيق الخاص بك.
لمعرفة كيفية تحديث أحمال عمل AKS لتحديث التكوين ديناميكيا، تابع إلى البرنامج التعليمي التالي.
لمعرفة المزيد حول موفر Kubernetes لتكوين تطبيق Azure، راجع مرجع موفر Kubernetes لتكوين تطبيق Azure.