البرنامج التعليمي - إعداد تطبيق خدمة Azure Kubernetes ‏(AKS)

Tip

إجابة قصيرة: استخدم Kompose للتدعيم السريع، Move2Kube للتحديث الأوسع، جسر Docker Compose إذا كنت تستخدم Docker Desktop، وPodman للتصدير من حاويات أو حاويات قيد التشغيل. ثم قم بحزم النتائج باستخدام Helm أو Kustomize وتكرارها باستخدام Skaffold أو إمالة.

أهم الأدوات: Kompose و Move2Kube و Docker Compose Bridge و Podman و Helm و Kustomize و Skaffold و Tilt و التحويل بمساعدة الذكاء الاصطناعي.

في هذا البرنامج التعليمي، يمكنك إعداد تطبيق متعدد الحاويات لاستخدامه في Kubernetes. يمكنك استخدام هذا البرنامج التعليمي سواء كنت تبدأ بتطبيق عينة جديد أو تتكيف مع مفاهيم Docker Compose لتطبيق تخطط لترحيله إلى خدمة Azure Kubernetes ‏(AKS). يمكنك استخدام أدوات التطوير الموجودة مثل Docker Compose لإنشاء التطبيق واختباره محليا. ‏‫ستتعلم كيفية:

  • استنساخ نموذج لمصدر تطبيق من GitHub.
  • إنشاء صورة حاوية من مصدر التطبيق النموذجي.
  • اختبر التطبيق متعدد الحاويات في بيئة Docker محلية.

Important

هل تبدأ من جديد؟ استخدم هذا البرنامج التعليمي لإعداد نموذج تطبيق ل AKS واختباره. هل تستخدم Docker Compose بالفعل؟ راجع وثائق Kubernetes لترحيل Docker Compose إلى Kubernetesونظرة عامة على ترحيل AKS للحصول على إرشادات تخطيط أوسع.

بمجرد الانتهاء من ذلك، يتم تشغيل التطبيق التالي في بيئة التطوير المحلية:

لقطة شاشة تظهر تطبيق واجهة المتجر Azure يعمل محليا مفتوحا في متصفح ويب محلي.

في الدروس اللاحقة، تقوم برفع صورة الحاوية إلى Azure Container Registry (ACR)، ثم تنشرها في مجموعة AKS.

قبل البدء

يفترض هذا البرنامج التعليمي فهما أساسيا لمفاهيم Docker الأساسية مثل الحاويات وصور الحاوية والأوامر docker . للحصول على نظرة تمهيدية على أساسيات الحاوية، راجع بدء استخدام Docker.

لإكمال هذا البرنامج التعليمي، تحتاج إلى بيئة تطوير Docker محلي تشغل حاويات Linux. يوفر دوكر حزما تضبط دوكر على نظام Mac، Windows، أو Linux.

Note

لا يتضمن Azure Cloud Shell مكونات Docker المطلوبة لإكمال كل خطوة في هذه الدروس. لذلك، نوصي باستخدام بيئة تطوير Docker كاملة.


الحصول على التعليمة البرمجية للتطبيق

تطبيق sample المستخدم في هذا الدرس هو تطبيق أساسي لواجهة المتجر يتضمن عمليات نشر وخدمات Kubernetes التالية:

لقطة شاشة لمعمارية نموذج Azure Store.

  • واجهة المتجر: تطبيق ويب للعملاء لعرض المنتجات وتقديم الطلبات.
  • خدمة المنتج: تعرض معلومات المنتج.
  • خدمة الطلب: يضع الطلبات.
  • RabbitMQ: قائمة الانتظار للرسائل لقائمة الطلبات.
  1. أنشئ مجلد على جهازك وانتقل إليه في جلسة الطرفية، مثل Bash. يستخدم هذا المثال دليلا يسمى demorepo لكن يمكنك استخدام أي اسم تريده.

    mkdir demorepo
    cd demorepo
    
  2. استخدم git لاستنساخ نموذج التطبيق إلى بيئة التطوير الخاصة بك.

    git clone https://github.com/Azure-Samples/aks-store-demo.git
    
  3. انتقل إلى المجلد المستنسخ.

    cd aks-store-demo
    

مراجعة ملف Docker Compose

التطبيق النموذجي الذي تنشئه في هذا الدرس يستخدم ملف docker-compose-quickstart ملف YAML من repository الذي قمت باسنساخه.

يلخص الجدول التالي الإعدادات الافتراضية الرئيسية من نموذج ملف الإنشاء حتى تتمكن من رؤية الخدمات والمنافذ والتبعيات التي يستخدمها البرنامج التعليمي بسرعة:

خدمة المصدر منفذ مكشوف إعدادات المفتاح
RabbitMQ rabbitmq:4.3.2-management-alpine الصوره 15672، 5672 اسم المستخدم usernameالافتراضي وكلمة المرور password
خدمة الطلب src/order-service 3000 الاتصال ب RabbitMQ على المنفذ 5672 ويستخدم قائمة الانتظار orders
خدمة المنتج src/product-service 3002 يستخدم AI_SERVICE_URL=http://ai-service:5001/
واجهة المتجر src/store-front 8080 استدعاء خدمة المنتج على 3002 وخدمة الطلب على 3000
services:
  rabbitmq:
    image: rabbitmq:4.3.2-management-alpine
    container_name: 'rabbitmq'
    restart: always
    environment:
      - "RABBITMQ_DEFAULT_USER=username"
      - "RABBITMQ_DEFAULT_PASS=password"
    ports:
      - 15672:15672
      - 5672:5672
    healthcheck:
      test: ["CMD", "rabbitmqctl", "status"]
      interval: 30s
      timeout: 10s
      retries: 5
    networks:
      - backend_services
  order-service:
    build: src/order-service
    container_name: 'order-service'
    restart: always
    ports:
      - 3000:3000
    healthcheck:
      test: ["CMD", "wget", "-O", "/dev/null", "-q", "http://order-service:3000/health"]
      interval: 30s
      timeout: 10s
      retries: 5
    environment:
      - ORDER_QUEUE_HOSTNAME=rabbitmq
      - ORDER_QUEUE_PORT=5672
      - ORDER_QUEUE_USERNAME=username
      - ORDER_QUEUE_PASSWORD=password
      - ORDER_QUEUE_NAME=orders
    networks:
      - backend_services
    depends_on:
      rabbitmq:
        condition: service_healthy
  product-service:
    build: src/product-service
    container_name: 'product-service'
    restart: always
    ports:
      - 3002:3002
    healthcheck:
      test: ["CMD", "wget", "-O", "/dev/null", "-q", "http://product-service:3002/health"]
      interval: 30s
      timeout: 10s
      retries: 5
    environment:
      - AI_SERVICE_URL=http://ai-service:5001/
    networks:
      - backend_services
  store-front:
    build: src/store-front
    container_name: 'store-front'
    restart: always
    ports:
      - 8080:8080
    healthcheck:
      test: ["CMD", "wget", "-O", "/dev/null", "-q", "http://store-front:80/health"]
      interval: 30s
      timeout: 10s
      retries: 5
    environment:
      - VUE_APP_PRODUCT_SERVICE_URL=http://product-service:3002/
      - VUE_APP_ORDER_SERVICE_URL=http://order-service:3000/
    networks:
      - backend_services
    depends_on:
      - product-service
      - order-service
networks:
  backend_services:
    driver: bridge

إنشاء صور الحاوية وتشغيل التطبيق

يمكنك استخدام Docker Compose لأتمتة بناء صور الحاويات ونشر تطبيقات الحاويات المتعددة.

تأكد من تشغيل Docker في وضع حاوية Linux قبل تشغيل الأوامر التالية.

  1. من جذر المستودع المستنسخ aks-store-demo ، أنشئ صورة الحاوية، وقم بتنزيل صورة RabbitMQ، وابدأ التطبيق باستخدام docker compose الأمر :

    docker compose -f docker-compose-quickstart.yml up -d
    
  2. عرض الصور التي تم إنشاؤها docker images باستخدام الأمر .

    docker images
    

    يظهر إخراج المثال المكثف التالي الصور التي تم إنشاؤها:

    REPOSITORY                        TAG                          IMAGE ID
    aks-store-demo-product-service    latest                       72f5cd7e6b84
    aks-store-demo-order-service      latest                       54ad5de546f9
    aks-store-demo-store-front        latest                       1125f85632ae
    ...
    
  3. عرض الحاويات قيد التشغيل باستخدام docker ps الأمر .

    docker ps
    

    يظهر إخراج المثال المكثف التالي أربع حاويات قيد التشغيل:

    CONTAINER ID        IMAGE
    f27fe74cfd0a        aks-store-demo-product-service
    df1eaa137885        aks-store-demo-order-service
    b3ce9e496e96        aks-store-demo-store-front
    31df28627ffa        rabbitmq:4.3.2-management-alpine
    

قم باختبار التطبيق محليًا

لمشاهدة التطبيق قيد التشغيل، انتقل إلى http://localhost:8080 في مستعرض ويب محلي. يقوم تطبيق العينة بالتحميل كما هو موضح في المثال التالي:

لقطة شاشة تظهر تطبيق واجهة المتجر Azure مفتوحا في متصفح محلي.

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

ترحيل ملفات الإنشاء الخاصة بك

إذا كان لديك بالفعل تطبيق معرف في ملف Docker Compose، يمكنك استخدام هذا البرنامج التعليمي كمرجع للتحقق المحلي، ثم تحويل تكوين Compose الموجود إلى بيانات Kubernetes. استخدم أدوات مثل Kompose أو Move2Kube أو Docker Compose Bridge أو Podman لتحويل تعريفات Docker Compose إلى موارد Kubernetes. للحصول على مسار التحويل الكامل من طرف إلى طرف، راجع وثائق Kubernetes لترحيل Docker Compose إلى Kubernetesونظرة عامة على ترحيل AKS إذا كنت تنتقل أيضا من منسق آخر أو سير عمل تحديث.

اختيار أداة تحويل

استخدم هذا الجدول عندما تحتاج إلى مقارنة سريعة لخيارات Compose-to-Kubernetes الأكثر شيوعا.

الأداة ملخص من سطر واحد
كومبس Fast Compose-to-Kubernetes scaffold; تشغيل kompose convert؛ توقع التنظيف اليدوي للتخزين والتحقيقات.
Move2Kube سير عمل تحديث أوسع؛ تشغيل move2kube plan -s ./path && move2kube transform؛ أثقل من محولات الملفات الواحدة.
جسر Docker Compose مسار التحويل الموجه لسطح المكتب ل Docker؛ تشغيل docker compose bridge convert -o ./k8s/؛ راجع Docker docs للحصول على تفاصيل الدعم الحالية.
Podman تصدير YAML من حاويات أو حاويات قيد التشغيل؛ تشغيل podman kube generate mypod > k8s.yaml؛ الأفضل لسير العمل المستند إلى Podman.
دومان بيانات القالب والحزمة للنشر المتكرر؛ تشغيل helm create mychart؛ الأفضل بعد التحويل.
Kustomize تراكب التغييرات الخاصة بالبيئة؛ تشغيل kubectl apply -k .؛ الأفضل بعد التحويل.
Skaffold إنشاء حلقة تطوير داخلية ل Kubernetes؛ تشغيل skaffold init؛ وليس محول مباشر.
الإمالة تحديث مباشر لتطوير Kubernetes المحلي؛ تشغيل tilt up؛ يتطلب سير عمل يركز على Kubernetes.
التحويل بمساعدة الذكاء الاصطناعي مسودة أو مقارنة البيانات بالذكاء الاصطناعي، ثم التحقق من صحة الإخراج قبل النشر.

ما الأداة التي يجب أن أختارها؟

  • إذا كنت تريد دليلا سريعا على المفهوم أو بيانات البداية، فاستخدم Kompose.
  • إذا كنت تستخدم Docker Desktop وتريد مسار Docker الأصلي، فاستخدم Docker Compose Bridge.
  • إذا كان لديك جهد أكبر للترحيل متعدد الخدمات أو التحديث، فاستخدم Move2Kube.
  • إذا كنت ترغب في التصدير من تشغيل حاويات أو حاويات، فاستخدم Podman.
  • إذا كان لديك بيانات بالفعل وتحتاج إلى تغليف أو تراكبات، فاستخدم Helm أو Kustomize.
  • إذا كنت بحاجة إلى حلقة تطوير Kubernetes محلية بعد التحويل، فاستخدم Skaffold أو إمالة.
  • إذا كنت تريد مسودة البيانات أو تفسيرات الترحيل، فاستخدم مساعدة الذكاء الاصطناعي وتحقق من صحة النتيجة مقابل إرشادات Kubernetes وAKS الرسمية.

أدوات أخرى يجب مراعاتها:

  • 8gwifi.org محول Kubernetes YAML: مفيد للتجارب السريعة عبر الإنترنت مع ملفات الإنشاء الصغيرة.
  • Okteto: مفيد عندما تريد حلقة تطوير سحابة أو حلقة تطوير Kubernetes بعيدة لفرق التطبيقات.
  • Devtron: مفيد عندما تريد سير عمل النظام الأساسي حول تسليم Kubernetes بعد التحويل.
  • Portainer: مفيد عندما تريد حاوية تستند إلى واجهة المستخدم وتجربة إدارة Kubernetes.

تحويل ملفات الإنشاء

استخدم الأوامر القابلة للنسخ التالية كنقطة بداية:

kompose convert
move2kube plan -s ./path && move2kube transform
docker compose bridge convert -o ./k8s/
podman kube generate mypod > k8s.yaml
skaffold init

مثال على تحويل Kompose

تحول أداة Kompose مفتوحة المصدر إعدادات Docker Compose الشائعة إلى كائنات Kubernetes مثل عمليات النشر والخدمات.

  1. في Windows، قم بتثبيت Kompose باستخدام الأمر التالي:

    curl -L https://github.com/kubernetes/kompose/releases/latest/download/kompose-windows-amd64.exe -o kompose.exe
    

    للحصول على خيارات التثبيت الأخرى، راجع إرشادات تثبيت Kompose.

  2. قم بتشغيل Kompose من الدليل الذي يحتوي على الملف الخاص بك docker-compose.yml .

    kompose convert
    
  3. راجع ملفات Kubernetes YAML التي تم إنشاؤها قبل نشرها إلى AKS.

التحويل بمساعدة الذكاء الاصطناعي

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

مثال عام على المطالبة:

Convert this docker-compose.yml into production-ready Kubernetes manifests. Use Apps/v1, move secrets to Kubernetes Secret objects, map local volumes to PersistentVolumeClaims, and add readiness and liveness probes for the web service.

موجه مثال مستهدف من AKS:

Convert this docker-compose.yml into AKS-ready Kubernetes manifests. Target an AKS cluster, push images to Azure Container Registry, use Apps/v1 objects, move secrets to Kubernetes Secret objects, map local volumes to Azure Files or Azure Disks-backed PersistentVolumeClaims, and add readiness and liveness probes for the web service.

راجع دائما إخراج الذكاء الاصطناعي قبل تطبيقه. apiVersion التحقق من صحة القيم وطلبات الموارد وحدودها وفئات التخزين والتعرض للخدمة وفحوصات السلامة.

معالجة مشكلات الترجمة الشائعة

كيف تتم معالجة وحدات التخزين؟

غالبا ما يحتاج الإنشاء volumes إلى وحدات تخزين Kubernetes ثابتة وفئة تخزين. في AKS، استبدل التحميلات المحلية فقط بخدمات مثل Azure Disks أو ملفات Azure.

ما الذي يحل محل depends_on؟

depends_on لا يفرض الإنشاء الجاهزية لوقت التشغيل في Kubernetes. استبدله بفحوصات الجاهزية أو تحقيقات بدء التشغيل أو منطق حاوية التهيئة عند الحاجة.

كيف يجب التعامل مع الأسرار وقيم البيئة؟

غالبا ما تصبح إنشاء قيم البيئة Kubernetes ConfigMap أو Secret الموارد، أو Azure Key Vault التكاملات.

ماذا يحدث للمنافذ والدخول؟

إنشاء ports خريطة لكائنات Kubernetes Service وأحيانا الدخول أو موارد واجهة برمجة تطبيقات البوابة، اعتمادا على كيفية نشر التطبيق.

كيف تترجم الفحوصات الصحية؟

عادة ما تصبح إعدادات الإنشاء healthcheck فحوصات حيوية واستعداد Kubernetes.

ماذا يحدث لإنشاء الشبكات؟

عادة ما تترجم إنشاء الشبكات إلى اكتشاف خدمة Kubernetes من خلال الخدمات و DNS للمجموعة بدلا من شبكات الجسر المخصصة.

كيف يمكنني الاختبار محليا باستخدام Kubernetes؟

بعد التحويل، انشر البيانات التي تم إنشاؤها إلى بيئة Kubernetes محلية مثل النوع أو minikube، ثم استخدم Skaffold أو إمالة إذا كنت تريد تكرار حلقي أسرع للتحرير-البناء-النشر.

تطبيق التعديلات الخاصة ب AKS بعد التحويل

يمنحك Kompose نقطة بداية، ولكن عادة ما تحتاج إلى إجراء تغييرات يدوية ل AKS:

  • قم بتحديث مراجع الصور للإشارة إلى Azure Container Registry (ACR).
  • استبدل التخزين المحلي فقط وربط التحميلات بالتخزين المستمر مثل Azure الأقراص أو ملفات Azure، اعتمادا على احتياجات حمل العمل.
  • استبدل إنشاء أسرار أو قيم خاصة بالبيئة بأسرار Kubernetes أو ConfigMaps أو عمليات تكامل Azure Key Vault.
  • راجع إعدادات الشبكات والتعرض، مثل LoadBalancer، أو الدخول، أو تكوين البوابة، استنادا إلى الطريقة التي تريد بها نشر التطبيق في AKS.
  • تحقق مما إذا كان يجب أن تظل المكونات ذات الحالة الخاصة عمليات نشر أو تنتقل إلى أنماط مثل StatefulSets عندما تحتاج إلى هوية مستقرة أو سلوك تخزين.
  • تحقق من صحة طلبات الموارد والتحقيقات وأي افتراضات لترتيب بدء التشغيل لأن إنشاء سلوكيات مثل depends_on لا تترجم مباشرة إلى سلوك وقت تشغيل Kubernetes.

سير عمل ما بعد التحويل

  1. تحويل ملف Compose باستخدام أداة مثل Kompose أو Move2Kube أو Docker Compose Bridge أو Podman أو مسودة مراجعة الذكاء الاصطناعي.
  2. راجع البيانات وتصلبها عن طريق إصلاح التخزين والأسرار والتعرض للخدمة والتحقيقات ومراجع الصور.
  3. قم بحزم البيانات مع تغييرات Helm أو التغييرات الخاصة ببيئة الطبقة باستخدام Kustomize.
  4. ادفع صورك إلى سجل مثل ACR، ثم انشر باستخدام GitOps أو CI/CD أو مهام سير العمل المباشرة kubectl .

مثال التسلسل: kompose convert -> مراجعة البيانات -> دفع الصور إلى ACR -> تحديث مراجع الصور ->kubectl apply أو helm install.

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

إذا اتبعت سير عمل Docker Compose، يمكنك إيقاف الحاويات قيد التشغيل وإزالتها. لا تحذف صور الحاوية لأنك تستخدمها في البرنامج التعليمي التالي. إذا اتبعت سير عمل Azure Developer CLI، فاستخدم azd down بدلا من docker compose down.

قم بإيقاف وإزالة مثيلات الحاوية والموارد باستخدام docker compose down الأمر .

docker compose down

أوامر Azure Developer CLI

عند استخدام azd، لا توجد تبعيات يدوية لصورة الحاوية. azd يعالج توفير التطبيقات والمجموعات ونشرها وتنظيفها باستخدام azd up الأوامر و azd down ، على غرار Docker.

يمكنك تخصيص خطوات التحضير لاستخدام Terraform أو Bicep قبل نشر العنقود داخل قسم infra في azure.yaml. بشكل افتراضي، يستخدم هذا المشروع Terraform:

infra:
  provider: terraform
  path: infra/terraform

إذا أردت تغيير مزود الخدمة إلى Bicep، قم بتحديث ملف azure.yaml كما يلي:

infra:
  provider: bicep
  path: infra/bicep

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

Azure CLI

في هذا البرنامج التعليمي، قمت بإنشاء نموذج تطبيق، وإنشاء صور حاوية للتطبيق، ثم اختبار التطبيق. لقد تعرفت على كيفية:

  • استنساخ نموذج لمصدر تطبيق من GitHub.
  • إنشاء صورة حاوية من مصدر التطبيق النموذجي.
  • اختبر التطبيق متعدد الحاويات في بيئة Docker محلية.

في البرنامج التعليمي التالي، ستتعلم كيفية تخزين صور الحاوية في ACR.

Azure Developer CLI

في هذا البرنامج التعليمي، قمت باستنساخ نموذج تطبيق باستخدام azd. لقد تعرفت على كيفية:

  • قم باستنساخ نموذج azd من GitHub.
  • عرض مكان استخدام صور الحاوية من مصدر التطبيق النموذجي.

في البرنامج التعليمي التالي، ستتعلم كيفية إنشاء نظام مجموعة باستخدام القالب الذي azd نسخته.