تشغيل سريع: نشر تطبيق باستخدام ملحق مجموعة Dapr لخدمة Azure Kubernetes (AKS) أو Kubernetes التي تدعم Arc

في هذا التشغيل السريع، يمكنك استخدام ملحق نظام مجموعة Dapr في نظام مجموعة Kubernetes الذي يدعم AKS أو Arc. يمكنك نشر hello world مثال، والذي يتكون من تطبيق Python الذي ينشئ رسائل وتطبيق عقدة يستهلك الرسائل ويستمر فيها.

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

نسخ المستودع

  1. استنساخ مستودع التشغيل السريع ل Dapr باستخدام git clone الأمر .

    git clone https://github.com/dapr/quickstarts.git
    
  2. قم بالتغيير hello-kubernetes إلى الدليل باستخدام cd.

    cd quickstarts/tutorials/hello-kubernetes/
    

إنشاء مخزن حالة وتكوينه

يمكن ل Dapr استخدام العديد من مخازن الحالة المختلفة، مثل Redis وAzure Cosmos DB وDynamoDB وCassandra، للاستمرار واسترداد الحالة. على سبيل المثال، نستخدم Redis.

إنشاء مخزن Redis

  1. افتح مدخل Azure لبدء تدفق إنشاء Azure Cache for Redis.

  2. املأ المعلومات الضرورية.

  3. حدد Create لبدء نشر مثيل Redis.

  4. لاحظ اسم مضيف مثيل Redis الخاص بك، والذي يمكنك استرداده من قسم Overview في Azure. قد يكون اسم المضيف مشابها للمثال التالي: xxxxxx.redis.cache.windows.net:6380.

  5. ضمن الإعدادات، انتقل إلى مفاتيح الوصول للحصول على مفاتيح الوصول.

  6. إنشاء سر Kubernetes لتخزين كلمة مرور Redis باستخدام kubectl create secret generic redis الأمر .

    kubectl create secret generic redis --from-literal=redis-password=<your-redis-password>
    

تكوين مكونات Dapr

بمجرد إنشاء متجرك، تحتاج إلى إضافة المفاتيح إلى redis.yaml الملف في دليل توزيع مستودع مرحبًا بالعالم. يمكنك معرفة المزيد هنا.

  1. redisHost استبدل القيمة بعنوان Redis الرئيسي الخاص بك.

  2. redisPassword استبدل ب سرك الخاص.

  3. أضف الخطين التاليين أدناه redisPassword لتمكين الاتصال عبر TLS

    - name: redisPassword
        secretKeyRef:
          name: redis
          key: redis-password
    - name: enableTLS
      value: true
    

تطبيق التكوين

  1. redis.yaml تطبيق الملف باستخدام kubectl apply الأمر .

    kubectl apply -f ./deploy/redis.yaml
    
  2. تحقق من تكوين مخزن الحالة بنجاح باستخدام kubectl get components.redis الأمر .

    kubectl get components.redis -o yaml
    

    يجب أن تشاهد إخراجا مشابها لإخراج المثال التالي:

    component.dapr.io/statestore created
    

نشر التطبيق Node.js مع Dapr الجانبي

  1. تطبيق نشر تطبيق Node.js على نظام المجموعة باستخدام kubectl apply الأمر .

    kubectl apply -f ./deploy/node.yaml
    

    إشعار

    عمليات توزيع Kubernetes غير متزامنة، ما يعني أنك بحاجة إلى انتظار اكتمال النشر قبل الانتقال إلى الخطوات التالية. يمكنك القيام بذلك باستخدام الأمر التالي:

    kubectl rollout status deploy/nodeapp
    

    يؤدي هذا إلى نشر تطبيق Node.js إلى Kubernetes. تقوم وحدة التحكم Dapr تلقائيا بحقن سيارة Dapr الجانبية إلى الجراب. إذا ألقيت نظرة على node.yaml الملف، فسترى كيفية تمكين Dapr لهذا النشر:

    • dapr.io/enabled: true: يخبر وحدة تحكم Dapr بإدخال سيارة جانبية في هذا النشر.
    • dapr.io/app-id: nodeapp: يعين معرفا أو اسما فريدا لتطبيق Dapr، بحيث يمكن إرسال رسائل إليه والتواصل معه بواسطة تطبيقات Dapr الأخرى.
  2. الوصول إلى الخدمة باستخدام kubectl get svc الأمر .

    kubectl get svc nodeapp
    
  3. دون ملاحظة في EXTERNAL-IP الإخراج.

تحقق من الخدمة

  1. اتصل بالخدمة باستخدام curl مع .EXTERNAL-IP

    curl $EXTERNAL_IP/ports
    

    يجب أن تشاهد إخراجا مشابها لإخراج المثال التالي:

    {"DAPR_HTTP_PORT":"3500","DAPR_GRPC_PORT":"50001"}
    
  2. إرسال طلب إلى التطبيق باستخدام curl.

    curl --request POST --data "@sample.json" --header Content-Type:application/json $EXTERNAL_IP/neworder
    
  3. تأكد من استمرار الطلب عن طريق طلبه باستخدام curl.

    curl $EXTERNAL_IP/order
    

    يجب أن تشاهد إخراجا مشابها لإخراج المثال التالي:

    { "orderId": "42" }
    

نشر التطبيق Python باستخدام Dapr sidecar

  1. انتقل إلى دليل التطبيق Python في hello-kubernetes التشغيل السريع والفتح app.py.

    هذا المثال هو تطبيق Python أساسي ينشر رسائل JSON إلى localhost:3500، وهو منفذ الاستماع الافتراضي ل Dapr. يمكنك استدعاء نقطة نهاية التطبيق Node.js neworder عن طريق الترحيل إلى v1.0/invoke/nodeapp/method/neworder. تحتوي الرسالة على بعض البيانات orderIdالتي تزيد مرة واحدة في الثانية:

    n = 0
    while True:
        n += 1
        message = {"data": {"orderId": n}}
    
        try:
            response = requests.post(dapr_url, json=message)
        except Exception as e:
            print(e)
    
        time.sleep(1)
    
  2. نشر تطبيق Python إلى مجموعة Kubernetes باستخدام kubectl apply الأمر .

    kubectl apply -f ./deploy/python.yaml
    

    إشعار

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

    kubectl rollout status deploy/pythonapp
    

مراقبة الرسائل وتأكيد المثابرة

الآن بعد نشر كل من تطبيقي Node.js وPython، يمكنك مشاهدة الرسائل تأتي من خلالها.

  1. احصل على سجلات تطبيق Node.js باستخدام kubectl logs الأمر .

    kubectl logs --selector=app=node -c node --tail=-1
    

    إذا كانت عمليات النشر ناجحة، يجب أن تشاهد سجلات مثل سجلات المثال التالية:

    Got a new order! Order ID: 1
    Successfully persisted state
    Got a new order! Order ID: 2
    Successfully persisted state
    Got a new order! Order ID: 3
    Successfully persisted state
    
  2. اتصل بنقطة نهاية طلب تطبيق Node.js للحصول على أحدث طلب باستخدام curl.

    curl $EXTERNAL_IP/order
    {"orderID":"42"}
    

    يجب أن تشاهد أحدث JSON في الاستجابة.

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

  • قم بإزالة مجموعة الموارد، الكتلة، مساحة الاسم، وجميع الموارد ذات الصلة باستخدام الأمر az group delete .

    az group delete --name MyResourceGroup
    

الخطوات التالية

تعرف على المزيد حول ملحقات نظام المجموعة الأخرى.