التشغيل السريع: استخدام تكوين تطبيق 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

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

إنشاء تطبيق قيد التشغيل في AKS

في هذا القسم، ستقوم بإنشاء تطبيق ويب بسيط ASP.NET Core يعمل في Azure Kubernetes Service (AKS). يقرأ التطبيق التكوين من ملف JSON محلي. في القسم التالي، ستقوم بتمكينه من استهلاك التكوين من Azure App Configuration دون تغيير التعليمات البرمجية للتطبيق. إذا كان لديك بالفعل تطبيق AKS يقرأ التكوين من ملف، فتخط هذا القسم وانتقل إلى استخدام موفر Kubernetes لتكوين التطبيق. تحتاج فقط إلى التأكد من أن ملف التكوين الذي تم إنشاؤه بواسطة الموفر يطابق مسار الملف المستخدم من قبل التطبيق الخاص بك.

إنشاء تطبيق

  1. استخدم واجهة سطر الأوامر .NET (CLI) وقم بتشغيل الأمر التالي لإنشاء مشروع تطبيق ويب جديد ASP.NET Core في دليل MyWebApp جديد:

    dotnet new webapp --output MyWebApp --framework net6.0
    
  2. افتح 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>
    
  3. إنشاء دليل تكوين في جذر المشروع الخاص بك وإضافة ملف mysettings.json إليه بالمحتوى التالي.

    {
      "Settings": {
        "FontColor": "Black",
        "Message": "Message from the local configuration"
      }
    }
    
  4. افتح 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
    // ... ...
    

ضع التطبيق في حاوية

  1. قم بتشغيل الأمر dotnet publish لإنشاء التطبيق في وضع الإصدار وإنشاء الأصول في الدليل المنشور.

    dotnet publish -c Release -o published
    
  2. أنشئ ملفا باسم Dockerfile في جذر دليل المشروع، وافتحه في محرر نص، وأدخل المحتوى التالي. Dockerfile هو ملف نصي لا يحتوي على ملحق ويستخدم لإنشاء صورة حاوية.

    FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS runtime
    WORKDIR /app
    COPY published/ ./
    ENTRYPOINT ["dotnet", "MyWebApp.dll"]
    
  3. إنشاء صورة حاوية باسم aspnetapp عن طريق تشغيل الأمر التالي.

    docker build --tag aspnetapp .
    

ادفع الصورة لـ Azure Container Registry

  1. قم بتشغيل الأمر az acr login لتسجيل الدخول إلى سجل الحاوية. يسجل المثال التالي في سجل يسمى myregistry. استبدل اسم التسجيل باسمك.

    az acr login --name myregistry
    

    يرجع Login Succeeded الأمر بمجرد نجاح تسجيل الدخول.

  2. استخدم علامة docker لإنشاء علامة myregistry.azurecr.io/aspnetapp:v1 للصورة aspnetapp.

    docker tag aspnetapp myregistry.azurecr.io/aspnetapp:v1
    

    تلميح

    لمراجعة قائمة صور وعلامات docker الموجودة، قم بتشغيل docker image ls. في هذا السيناريو، يجب أن تشاهد صورتين على الأقل: aspnetapp و myregistry.azurecr.io/aspnetapp.

  3. استخدم دفع docker لتحميل الصورة إلى سجل الحاوية. على سبيل المثال، يدفع الأمر التالي الصورة إلى مستودع يسمى aspnetapp مع العلامة v1 ضمن السجل myregistry.

    docker push myregistry.azurecr.io/aspnetapp:v1
    

قم بنشر التطبيق

  1. إنشاء دليل نشر في الدليل الجذر لمشروعك.

  2. أضف ملف 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
    
  3. أضف ملف service.yaml إلى دليل النشر بالمحتوى التالي لإنشاء خدمة LoadBalancer.

    apiVersion: v1
    kind: Service
    metadata:
      name: aspnetapp-demo-service
    spec:
      type: LoadBalancer
      ports:
      - port: 80
      selector:
        app: aspnetapp-demo
    
  4. قم بتشغيل الأمر التالي لنشر التطبيق إلى نظام مجموعة AKS.

    kubectl create namespace appconfig-demo
    kubectl apply -f ./Deployment -n appconfig-demo
    
  5. قم بتشغيل الأمر التالي والحصول على عنوان IP الخارجي الذي تعرضه خدمة LoadBalancer.

    kubectl get service aspnetapp-demo-service -n appconfig-demo
    
  6. افتح نافذة مستعرض، وانتقل إلى عنوان IP الذي تم الحصول عليه في الخطوة السابقة. تبدو صفحة الويب كما يلي:

    لقطة شاشة تعرض موفر Kubernetes قبل استخدام configMap.

استخدام موفر 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 لتكوين التطبيق

  1. قم بتشغيل الأمر التالي للحصول على بيانات اعتماد الوصول لمجموعة AKS الخاصة بك. استبدل قيمة name المعلمات و resource-group بمثيل AKS الخاص بك:

    az aks get-credentials --name <your-aks-instance-name> --resource-group <your-aks-resource-group>
    
  2. تثبيت 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.

  3. أضف ملف 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.
  4. اتبع الإرشادات لاستخدام هوية حمل العمل للمصادقة مع متجر App Configuration. قم بتحديث ملف appConfigurationProvider.yaml عن طريق استبدال serviceAccountName الحقل باسم حساب الخدمة الذي أنشأته. لمزيد من المعلومات حول أساليب المصادقة الأخرى، راجع الأمثلة في قسم المصادقة .

  5. قم بتحديث ملف 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
    
  6. قم بتشغيل الأمر التالي لنشر التغييرات. استبدل مساحة الاسم إذا كنت تستخدم تطبيق AKS الحالي.

    kubectl apply -f ./Deployment -n appconfig-demo
    
  7. حدّث المستعرض. تعرض الصفحة محتوى محدثا.

    لقطة شاشة تعرض موفر Kubernetes بعد استخدام configMap.

استكشاف الأخطاء وإصلاحها

إذا كنت لا ترى تطبيقك يلتقط البيانات من متجر 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

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

هام

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

  1. سجل الدخول إلى مدخل Microsoft Azure، وحدد Resource groups.
  2. في المربع تصفية حسب الاسم ، أدخل اسم مجموعة الموارد الخاصة بك.
  3. في قائمة النتائج، حدد اسم مجموعة الموارد لاستعراض نظرة عامة.
  4. حدد Delete resource group.
  5. يُطلب منك تأكيد حذف مجموعة الموارد. أدخل اسم مجموعة الموارد للتأكيد وحدد "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.