توزيع حاوية الكشف عن اللغة في خدمة Azure Kubernetes
تعرَّف على كيفية توزيع حاوية اكتشاف اللغة. يوضح لك هذا الإجراء كيفية إنشاء حاويات Docker المحلية، ودفع الحاويات إلى سجل الحاويات الخاص بك، وتشغيل الحاوية في مجموعة Kubernetes، واختبارها في مستعرض ويب.
المتطلبات الأساسية
يتطلب هذا الإجراء عدة أدوات يجب تثبيتها وتشغيلها محلياً. لا تستخدم Azure Cloud Shell.
- استخدم اشتراك Azure. إذا لم يكن لديك اشتراك Azure، فأنشئ حساباً مجانياً قبل أن تبدأ.
- Git لنظام التشغيل الخاص بك حتى تتمكن من نسخ العينة المستخدمة في هذا الإجراء.
- Azure CLI.
- محرك Docker وتحقق من أن Docker CLI يعمل في نافذة وحدة التحكم.
- kubectl.
- مورد Azure بمستوى الأسعار الصحيح. لا تعمل جميع مستويات الأسعار مع هذه الحاوية:
- مورد اللغة مع F0 أو مستويات الأسعار القياسي فقط.
- مورد خدمات Azure الذكاء الاصطناعي مع مستوى تسعير S0.
تشغيل العينة
يقوم هذا الإجراء بتحميل وتشغيل نموذج حاوية خدمات azure الذكاء الاصطناعي للكشف عن اللغة. يحتوي النموذج على حاويتين، واحدة لتطبيق العميل وواحدة لحاوية خدمات Azure الذكاء الاصطناعي. سنقوم بدفع كلتا الصورتين إلى Azure Container Registry. بمجرد تسجيلها في السجل الخاص بك، قم بإنشاء خدمة Azure Kubernetes للوصول إلى هذه الصور وتشغيل الحاويات. عند تشغيل الحاويات، استخدم kubectl CLI لمشاهدة أداء الحاويات. قم بالوصول إلى تطبيق العميل مع طلب HTTP وشاهد النتائج.
حاويات العينة
يحتوي النموذج على صورتين للحاوية، واحدة لموقع الواجهة الأمامية. الصورة الثانية هي حاوية اكتشاف اللغة التي تعيد لغة (ثقافة) النص المكتشفة. يمكن الوصول إلى كلتا الحاويتين من عنوان IP خارجي عند الانتهاء.
حاوية الواجهة الأمامية
يعد موقع الويب هذا مكافئاً لتطبيقك الخاص من جانب العميل الذي يقوم بطلبات نقطة نهاية اكتشاف اللغة. عند انتهاء الإجراء، تحصل على اللغة المكتشفة لسلسلة من الأحرف عن طريق الوصول إلى حاوية موقع الويب في متصفح باستخدام http://<external-IP>/<text-to-analyze>
. مثال على عنوان URL هذا هو http://132.12.23.255/helloworld!
. النتيجة في المتصفح هي English
.
حاوية اللغة
يمكن الوصول إلى حاوية اكتشاف اللغة، في هذا الإجراء المحدد، لأي طلب خارجي. لم يتم تغيير الحاوية بأي شكل من الأشكال بحيث تتوفر واجهة برمجة تطبيقات الكشف عن اللغة القياسية لخدمات Azure الذكاء الاصطناعي الخاصة بالحاويات.
بالنسبة لهذه الحاوية، تعد واجهة برمجة التطبيقات هذه عبارة عن طلب POST لاكتشاف اللغة. كما هو الحال مع جميع حاويات خدمات Azure الذكاء الاصطناعي، يمكنك معرفة المزيد حول الحاوية من معلومات Swagger المستضافة الخاصة بها، http://<external-IP>:5000/swagger/index.html
.
المنفذ 5000 هو المنفذ الافتراضي المستخدم مع حاويات خدمات Azure الذكاء الاصطناعي.
أنشئ خدمة تسجيل حاوية Azure
لتوزيع الحاوية في خدمة Azure Kubernetes، يجب أن تكون صور الحاوية قابلة للوصول. قم بإنشاء خدمة Azure Container Registry الخاصة بك لاستضافة الصور.
سجّل الدخول إلى Azure CLI
az login
قم بإنشاء مجموعة موارد باسم
cogserv-container-rg
للاحتفاظ بكل مورد تم إنشاؤه في هذا الإجراء.az group create --name cogserv-container-rg --location westus
أنشئ Azure Container Registry الخاص بك بتنسيق اسمك ثم
registry
، مثلpattyregistry
. لا تستخدم الشرطات أو تسطير الأحرف في الاسم.az acr create --resource-group cogserv-container-rg --name pattyregistry --sku Basic
احفظ النتائج للحصول على خاصية loginServer. سيكون هذا جزءاً من عنوان الحاوية المستضافة، والذي سيتم استخدامه لاحقاً في ملف
language.yml
.az acr create --resource-group cogserv-container-rg --name pattyregistry --sku Basic
{ "adminUserEnabled": false, "creationDate": "2019-01-02T23:49:53.783549+00:00", "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/cogserv-container-rg/providers/Microsoft.ContainerRegistry/registries/pattyregistry", "location": "westus", "loginServer": "pattyregistry.azurecr.io", "name": "pattyregistry", "provisioningState": "Succeeded", "resourceGroup": "cogserv-container-rg", "sku": { "name": "Basic", "tier": "Basic" }, "status": null, "storageAccount": null, "tags": {}, "type": "Microsoft.ContainerRegistry/registries" }
قم بتسجيل الدخول إلى سجل الحاوية الخاص بك. تحتاج إلى تسجيل الدخول قبل أن تتمكن من دفع الصور إلى السجل الخاص بك.
az acr login --name pattyregistry
احصل على صورة Docker لموقع الويب
نموذج التعليمات البرمجية المستخدمة في هذا الإجراء موجود في مستودع عينات حاويات خدمات Azure الذكاء الاصطناعي. نسخ المستودع للحصول على نسخة محلية من العينة.
git clone https://github.com/Azure-Samples/cognitive-services-containers-samples
بمجرد أن يصبح المستودع على جهاز الكمبيوتر المحلي لديك، ابحث عن موقع الويب في دليل dotnet Language FrontendService. يعمل موقع الويب هذا كتطبيق عميل يستدعي واجهة برمجة تطبيقات اكتشاف اللغة المستضافة في حاوية اكتشاف اللغة.
بناء صورة Docker لهذا الموقع. تأكد من أن وحدة التحكم موجودة في دليل FrontendService حيث يوجد ملف Dockerfile عند تشغيل الأمر التالي:
docker build -t language-frontend -t pattiyregistry.azurecr.io/language-frontend:v1 .
لتتبع الإصدار في سجل الحاوية، أضف العلامة بتنسيق إصدار، مثل
v1
.ادفع الصورة إلى سجل الحاوية الخاص بك. قد يستغرق ذلك بضع دقائق.
docker push pattyregistry.azurecr.io/language-frontend:v1
إذا ظهر لك الخطأ
unauthorized: authentication required
، فقم بتسجيل الدخول باستخدام الأمرaz acr login --name <your-container-registry-name>
.عند الانتهاء من العملية، يجب أن تكون النتائج مشابهة لما يلي:
The push refers to repository [pattyregistry.azurecr.io/language-frontend] 82ff52ee6c73: Pushed 07599c047227: Pushed 816caf41a9a1: Pushed 2924be3aed17: Pushed 45b83a23806f: Pushed ef68f6734aa4: Pushed v1: digest: sha256:31930445deee181605c0cde53dab5a104528dc1ff57e5b3b34324f0d8a0eb286 size: 1580
احصل على صورة Docker للكشف عن اللغة
اسحب أحدث إصدار من صورة Docker إلى الجهاز المحلي. قد يستغرق ذلك بضع دقائق. في حالة وجود إصدار أحدث من هذه الحاوية، قم بتغيير القيمة من
1.1.006770001-amd64-preview
إلى الإصدار الأحدث.docker pull mcr.microsoft.com/azure-cognitive-services/language:1.1.006770001-amd64-preview
ضع علامة على الصورة مع سجل الحاوية الخاص بك. ابحث عن أحدث إصدار واستبدل الإصدار
1.1.006770001-amd64-preview
إذا كان لديك إصدار أحدث.docker tag mcr.microsoft.com/azure-cognitive-services/language pattiyregistry.azurecr.io/language:1.1.006770001-amd64-preview
ادفع الصورة إلى سجل الحاوية الخاص بك. قد يستغرق ذلك بضع دقائق.
docker push pattyregistry.azurecr.io/language:1.1.006770001-amd64-preview
احصل على بيانات اعتماد Container Registry
الخطوات التالية ضرورية للحصول على المعلومات المطلوبة لتوصيل سجل الحاوية بخدمة Azure Kubernetes التي تنشئها لاحقاً في هذا الإجراء.
إنشاء مدير الخدمة.
az ad sp create-for-rbac
احفظ قيمة النتائج
appId
للمعلمة المحال إليه في الخطوة 3،<appId>
. احفظpassword
لمعلمة سر العميل للقسم التالي<client-secret>
.{ "appId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "displayName": "azure-cli-2018-12-31-18-39-32", "name": "http://azure-cli-2018-12-31-18-39-32", "password": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "tenant": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" }
احصل على معرف تسجيل الحاوية الخاص بك.
az acr show --resource-group cogserv-container-rg --name pattyregistry --query "id" --o table
احفظ ناتج قيمة معلمة النطاق،
<acrId>
، في الخطوة التالية. ستبدو مثل هذا:/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/cogserv-container-rg/providers/Microsoft.ContainerRegistry/registries/pattyregistry
احفظ القيمة الكاملة للخطوة 3 في هذا القسم.
لمنح الوصول الصحيح لمجموعة AKS لاستخدام الصور المخزنة في سجل الحاوية، قم بإنشاء مهمة تعيين. استبدل
<appId>
و<acrId>
بالقيم التي تم جمعها في الخطوتين السابقتين.az role assignment create --assignee <appId> --scope <acrId> --role Reader
أنشئ خدمة Azure Kubernetes
أنشئ مجموعة Kubernetes. جميع قيم المعلمات من الأقسام السابقة باستثناء معلمة الاسم. اختر اسماً يشير إلى من قام بإنشائه والغرض منه، مثل
patty-kube
.az aks create --resource-group cogserv-container-rg --name patty-kube --node-count 2 --service-principal <appId> --client-secret <client-secret> --generate-ssh-keys
قد تستغرق هذه الخطوة بضع دقائق. النتيجة هي:
{ "aadProfile": null, "addonProfiles": null, "agentPoolProfiles": [ { "count": 2, "dnsPrefix": null, "fqdn": null, "maxPods": 110, "name": "nodepool1", "osDiskSizeGb": 30, "osType": "Linux", "ports": null, "storageProfile": "ManagedDisks", "vmSize": "Standard_DS1_v2", "vnetSubnetId": null } ], "dnsPrefix": "patty-kube--65a101", "enableRbac": true, "fqdn": "patty-kube--65a101-341f1f54.hcp.westus.azmk8s.io", "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/cogserv-container-rg/providers/Microsoft.ContainerService/managedClusters/patty-kube", "kubernetesVersion": "1.9.11", "linuxProfile": { "adminUsername": "azureuser", "ssh": { "publicKeys": [ { "keyData": "ssh-rsa AAAAB3NzaC...ohR2d81mFC } ] } }, "location": "westus", "name": "patty-kube", "networkProfile": { "dnsServiceIp": "10.0.0.10", "dockerBridgeCidr": "172.17.0.1/16", "networkPlugin": "kubenet", "networkPolicy": null, "podCidr": "10.244.0.0/16", "serviceCidr": "10.0.0.0/16" }, "nodeResourceGroup": "MC_patty_westus", "provisioningState": "Succeeded", "resourceGroup": "cogserv-container-rg", "servicePrincipalProfile": { "clientId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "keyVaultSecretRef": null, "secret": null }, "tags": null, "type": "Microsoft.ContainerService/ManagedClusters" }
تم إنشاء الخدمة ولكنها لا تحتوي على حاوية موقع الويب أو حاوية الكشف عن اللغة حتى الآن.
احصل على بيانات اعتماد مجموعة Kubernetes.
az aks get-credentials --resource-group cogserv-container-rg --name patty-kube
قم بتحميل تعريف التزامن في خدمة Kubernetes الخاصة بك
يستخدم هذا القسم واجهة سطر الأوامر kubectl للتحدث مع خدمة Azure Kubernetes.
قبل تحميل تعريف التزامن، تحقق من أن kubectl لديه حق الوصول إلى العقد.
kubectl get nodes
يبدو الرد كما يلي:
NAME STATUS ROLES AGE VERSION aks-nodepool1-13756812-0 Ready agent 6m v1.9.11 aks-nodepool1-13756812-1 Ready agent 6m v1.9.11
انسخ الملف التالي وقم بتسميته
language.yml
. يحتوي الملف على قسمservice
وقسمdeployment
لكلٍّ من نوعي الحاوية،language-frontend
وحاوية موقع الويبlanguage
وحاوية الكشفlanguage
.# A service which exposes the .net frontend app container through a dependable hostname: http://language-frontend:5000 apiVersion: v1 kind: Service metadata: name: language-frontend labels: run: language-frontend spec: selector: app: language-frontend type: LoadBalancer ports: - name: front port: 80 targetPort: 80 protocol: TCP --- # A deployment declaratively indicating how many instances of the .net frontend app container we want up apiVersion: apps/v1beta1 kind: Deployment metadata: name: language-frontend spec: replicas: 1 template: metadata: labels: app: language-frontend spec: containers: - name: language-frontend image: # < URI of the Frontend App image > ports: - name: public-port containerPort: 80 livenessProbe: httpGet: path: /status port: public-port initialDelaySeconds: 30 timeoutSeconds: 1 periodSeconds: 10 imagePullSecrets: - name: # < Name of the registry secret providing access to the frontend image > automountServiceAccountToken: false --- # A service which exposes the cognitive-service containers through a dependable hostname: http://language:5000 apiVersion: v1 kind: Service metadata: name: language labels: run: language spec: selector: app: language type: LoadBalancer ports: - name: language port: 5000 targetPort: 5000 protocol: TCP --- # A deployment declaratively indicating how many instances of the cognitive-service container we want up apiVersion: apps/v1beta1 kind: Deployment metadata: name: language spec: replicas: 1 template: metadata: labels: app: language spec: containers: - name: language image: # < URI of the Language Image > ports: - name: public-port containerPort: 5000 livenessProbe: httpGet: path: /status port: public-port initialDelaySeconds: 30 timeoutSeconds: 1 periodSeconds: 10 args: - "eula=accept" - "apikey=" # < API Key for the Language Service > - "billing=" # < Language billing endpoint URI > imagePullSecrets: - name: # < Name of the registry secret providing access to the Language image > automountServiceAccountToken: false
قم بتغيير سطور توزيع الواجهة الأمامية للغة
language.yml
استناداً إلى الجدول التالي لإضافة أسماء صور تسجيل الحاوية الخاصة بك، وسر العميل، وإعدادات خدمة اللغة.إعدادات توزيع الواجهة الأمامية للغة الغرض السطر 32
image
خاصيةموقع الصورة لصورة الواجهة الأمامية في Container Registry <container-registry-name>.azurecr.io/language-frontend:v1
السطر 44
name
خاصيةسر سجل الحاوية للصورة، والمشار إليه بـ <client-secret>
في قسم سابق.قم بتغيير سطور توزيع اللغة لـ
language.yml
استناداً إلى الجدول التالي لإضافة أسماء صور تسجيل الحاوية الخاصة بك، وسر العميل، وإعدادات خدمة اللغة.إعدادات توزيع اللغة الغرض السطر 78
image
خاصيةموقع الصورة لصورة اللغة في Container Registry <container-registry-name>.azurecr.io/language:1.1.006770001-amd64-preview
السطر 95
name
خاصيةسر سجل الحاوية للصورة، والمشار إليه بـ <client-secret>
في قسم سابق.السطر 91
apiKey
خاصيةمفتاح موارد خدمة اللغة الخاصة بك السطر 92
billing
خاصيةنقطة نهاية الفوترة لمورد خدمة اللغة. https://westus.api.cognitive.microsoft.com/text/analytics/v2.1
نظراً لأنه تم تعيين apiKey ونقطة نهاية الفوترة كجزء من تعريف تزامن Kubernetes، فلن تحتاج حاوية موقع الويب إلى معرفة هذه الأمور أو تمريرها كجزء من الطلب. تشير حاوية موقع الويب إلى حاوية اكتشاف اللغة باسم المنسق
language
.قم بتحميل ملف تعريف التزامن لهذه العينة من المجلد حيث أنشأت وحفظت
language.yml
.kubectl apply -f language.yml
الجواب:
service "language-frontend" created deployment.apps "language-frontend" created service "language" created deployment.apps "language" created
احصل على عناوين IP خارجية للحاويات
بالنسبة للحاويتين، تحقق من تشغيل خدمتي language-frontend
وlanguage
واحصل على عنوان IP الخارجي.
kubectl get all
NAME READY STATUS RESTARTS AGE
pod/language-586849d8dc-7zvz5 1/1 Running 0 13h
pod/language-frontend-68b9969969-bz9bg 1/1 Running 1 13h
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 14h
service/language LoadBalancer 10.0.39.169 104.42.172.68 5000:30161/TCP 13h
service/language-frontend LoadBalancer 10.0.42.136 104.42.37.219 80:30943/TCP 13h
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
deployment.extensions/language 1 1 1 1 13h
deployment.extensions/language-frontend 1 1 1 1 13h
NAME DESIRED CURRENT READY AGE
replicaset.extensions/language-586849d8dc 1 1 1 13h
replicaset.extensions/language-frontend-68b9969969 1 1 1 13h
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
deployment.apps/language 1 1 1 1 13h
deployment.apps/language-frontend 1 1 1 1 13h
NAME DESIRED CURRENT READY AGE
replicaset.apps/language-586849d8dc 1 1 1 13h
replicaset.apps/language-frontend-68b9969969 1 1 1 13h
إذا تم عرض EXTERNAL-IP
للخدمة على أنه معلق، أعد تشغيل الأمر حتى يظهر عنوان IP قبل الانتقال إلى الخطوة التالية.
اختبر حاوية اكتشاف اللغة
افتح متصفحاً وانتقل إلى عنوان IP الخارجي للحاوية language
من القسم السابق: http://<external-ip>:5000/swagger/index.html
. يمكنك استخدام ميزة Try it
الخاصة بواجهة برمجة التطبيقات لاختبار نقطة نهاية اكتشاف اللغة.
اختبر حاوية تطبيق العميل
قم بتغيير عنوان URL في المتصفح إلى عنوان IP الخارجي للحاوية language-frontend
باستخدام التنسيق التالي: http://<external-ip>/helloworld
. تم توقع نص الثقافة الإنجليزية لـ helloworld
كـ English
.
تنظيف الموارد
عند الانتهاء من نظام المجموعة، احذف مجموعة موارد Azure.
az group delete --name cogserv-container-rg
معلومات ذات صلة
الخطوات التالية
الملاحظات
https://aka.ms/ContentUserFeedback.
قريبًا: خلال عام 2024، سنتخلص تدريجيًا من GitHub Issues بوصفها آلية إرسال ملاحظات للمحتوى ونستبدلها بنظام ملاحظات جديد. لمزيد من المعلومات، راجعإرسال الملاحظات وعرضها المتعلقة بـ