استخدام حاوية Computer Vision مع Kubernetes و Helm
أحد الخيارات لإدارة حاويات Computer Vision المحلية هو استخدام Kubernetes و Helm. باستخدام Kubernetes و Helm لتحديد صورة حاوية Computer Vision، سنقوم بإنشاء حزمة Kubernetes. سيتم نشر هذه الحزمة إلى مجموعة Kubernetes المحلية. وأخيرا، سنستكشف كيفية اختبار الخدمات المنشورة. لمزيد من المعلومات حول تشغيل حاويات Docker دون تزامن Kubernetes، راجع تثبيت حاويات Computer Vision وتشغيلها.
المتطلبات الأساسية
المتطلبات الأساسية التالية قبل استخدام حاويات Computer Vision المحلية:
| مطلوب | الغرض |
|---|---|
| حساب Azure | إذا لم يكن لديك اشتراك Azure، فأنشئ حساباً مجانياً قبل أن تبدأ. |
| Kubernetes CLI | مطلوب Kubernetes CLI لإدارة بيانات الاعتماد المشتركة من سجل الحاوية. مطلوب أيضا Kubernetes قبل Helm، وهو مدير حزمة Kubernetes. |
| Helm CLI | قم بتثبيت Helm CLI، والذي يستخدم لتثبيت مخطط helm (تعريف حزمة الحاوية). |
| مورد Computer Vision | لاستخدام الحاوية، يجب أن يكون لديك: مورد Azure Computer Vision ومفتاح API المقترن بنقطة النهاية URI. تتوفر كلتا القيمتين في صفحات Overview و Keys للمورد وهي مطلوبة لبدء الحاوية. {API_KEY}: أحد مفتاحي الموارد المتوفرين في صفحة المفاتيح {ENDPOINT_URI}: نقطة النهاية كما هو متوفر في صفحة نظرة عامة |
جمع المعلمات المطلوبة
هناك حاجة إلى ثلاث معلمات أساسية لجميع حاويات الخدمات المعرفية. يجب أن تكون شروط ترخيص برامج Microsoft موجودة بقيمة قبول. هناك حاجة أيضا إلى URI نقطة النهاية ومفتاح API.
URI نقطة النهاية
{ENDPOINT_URI} تتوفر القيمة في صفحة نظرة عامة على مدخل Microsoft Azure لمورد الخدمات المعرفية المقابل. انتقل إلى صفحة نظرة عامة ، مرر مؤشر الماوس فوق نقطة النهاية، وتظهر أيقونة نسخ إلى الحافظة . انسخ نقطة النهاية واستخدمها عند الحاجة.

المفاتيح
{API_KEY} يتم استخدام القيمة لبدء الحاوية وهي متوفرة في صفحة مفاتيح مدخل Microsoft Azure لمورد الخدمات المعرفية المقابل. انتقل إلى صفحة Keys ، وحدد أيقونة Copy to clipboard .

هام
يتم استخدام مفاتيح الاشتراك هذه للوصول إلى واجهة برمجة تطبيقات الخدمات المعرفية. لا تشارك مفاتيحك. قم بتخزينها بأمان. على سبيل المثال، استخدم Azure Key Vault. نوصي أيضا بإعادة إنشاء هذه المفاتيح بانتظام. مفتاح واحد فقط ضروري لإجراء استدعاء واجهة برمجة التطبيقات. عند إعادة إنشاء المفتاح الأول، يمكنك استخدام المفتاح الثاني للوصول المستمر إلى الخدمة.
الكمبيوتر المضيف
المضيف هو كمبيوتر يستند إلى x64 يقوم بتشغيل حاوية Docker. يمكن أن يكون جهاز كمبيوتر في أماكن عملك أو خدمة استضافة Docker في Azure، مثل:
- خدمة Azure Kubernetes.
- مثيلات حاوية Azure.
- نظام مجموعة Kubernetes تم نشره في Azure Stack. لمزيد من المعلومات، راجع نشر Kubernetes إلى Azure Stack.
متطلبات الحاوية وتوصياتها
ملاحظة
تستند المتطلبات والتوصيات إلى معايير ذات طلب واحد في الثانية، باستخدام صورة 523 كيلوبايت لرسالة عمل ممسوحة ضوئيا تحتوي على 29 سطرا وإجمالي 803 أحرف. أدى التكوين الموصى به إلى استجابة أسرع بنسبة 2x تقريبا مقارنة بالحد الأدنى للتكوين.
يصف الجدول التالي تخصيص الحد الأدنى والموصى به للموارد لكل من حاويات Read OCR.
| الحاوية | الحدّ الأدنى | المستحسنة |
|---|---|---|
| قراءة 3.2 2022-04-30 | 4 ذاكرات أساسية، ذاكرة 8 غيغابايت | 8 نواة، ذاكرة 16 غيغا بايت |
| قراءة 3.2 2021-04-12 | 4 ذاكرات أساسية، ذاكرة 16 غيغابايت | 8 نواة، ذاكرة 24 غيغابايت |
| قراءة 2.0-معاينة | ذاكرة أساسية واحدة، 8 غيغابايت | 8 نواة، ذاكرة 16 غيغا بايت |
- يجب أن يكون كل نواة 2.6 غيغاهيرتز على الأقل (غيغاهرتز) أو أسرع.
تتوافق الذاكرة والذاكرة مع --cpus الإعدادات و --memory ، والتي يتم استخدامها كجزء من docker run الأمر.
الاتصال إلى مجموعة Kubernetes
من المتوقع أن يكون للكمبيوتر المضيف مجموعة Kubernetes متوفرة. راجع هذا البرنامج التعليمي حول نشر مجموعة Kubernetes للحصول على فهم مفاهيمي لكيفية نشر مجموعة Kubernetes على كمبيوتر مضيف. يمكنك العثور على مزيد من المعلومات حول عمليات النشر في وثائق Kubernetes.
تكوين قيم مخطط Helm للنشر
ابدأ بإنشاء مجلد يسمى read. بعد ذلك، الصق محتوى YAML التالي في ملف جديد يسمى chart.yaml:
apiVersion: v2
name: read
version: 1.0.0
description: A Helm chart to deploy the Read OCR container to a Kubernetes cluster
dependencies:
- name: rabbitmq
condition: read.image.args.rabbitmq.enabled
version: ^6.12.0
repository: https://kubernetes-charts.storage.googleapis.com/
- name: redis
condition: read.image.args.redis.enabled
version: ^6.0.0
repository: https://kubernetes-charts.storage.googleapis.com/
لتكوين القيم الافتراضية لمخطط Helm، انسخ والصق YAML التالي في ملف يسمى values.yaml. استبدل التعليقات # {ENDPOINT_URI} و # {API_KEY} بقيمك الخاصة. تكوين resultExpirationPeriod وRedis و RabbitMQ إذا لزم الأمر.
# These settings are deployment specific and users can provide customizations
read:
enabled: true
image:
name: cognitive-services-read
registry: mcr.microsoft.com/
repository: azure-cognitive-services/vision/read
tag: 3.2-preview.1
args:
eula: accept
billing: # {ENDPOINT_URI}
apikey: # {API_KEY}
# Result expiration period setting. Specify when the system should clean up recognition results.
# For example, resultExpirationPeriod=1, the system will clear the recognition result 1hr after the process.
# resultExpirationPeriod=0, the system will clear the recognition result after result retrieval.
resultExpirationPeriod: 1
# Redis storage, if configured, will be used by read OCR container to store result records.
# A cache is required if multiple read OCR containers are placed behind load balancer.
redis:
enabled: false # {true/false}
password: password
# RabbitMQ is used for dispatching tasks. This can be useful when multiple read OCR containers are
# placed behind load balancer.
rabbitmq:
enabled: false # {true/false}
rabbitmq:
username: user
password: password
هام
billingإذا لم يتم توفير القيمتين وapikey، تنتهي صلاحية الخدمات بعد 15 دقيقة. وبالمثل، يفشل التحقق لأن الخدمات غير متوفرة.إذا قمت بنشر حاويات قراءة OCR متعددة خلف موازن تحميل، على سبيل المثال، ضمن Docker Compose أو Kubernetes، يجب أن يكون لديك ذاكرة تخزين مؤقت خارجية. نظرا لأن حاوية المعالجة وحاوية طلب GET قد لا تكون متماثلة، تقوم ذاكرة التخزين المؤقت الخارجية بتخزين النتائج ومشاركتها عبر الحاويات. للحصول على تفاصيل حول إعدادات ذاكرة التخزين المؤقت، راجع تكوين حاويات Computer Vision Docker.
إنشاء مجلد قوالب ضمن دليل القراءة . انسخ والصق YAML التالي في ملف يسمى deployment.yaml. deployment.yaml سيكون الملف بمثابة قالب Helm.
تنشئ القوالب ملفات بيان، وهي أوصاف موارد بتنسيق YAML يمكن أن يفهمها Kubernetes. - دليل قالب مخطط Helm
apiVersion: apps/v1
kind: Deployment
metadata:
name: read
labels:
app: read-deployment
spec:
selector:
matchLabels:
app: read-app
template:
metadata:
labels:
app: read-app
spec:
containers:
- name: {{.Values.read.image.name}}
image: {{.Values.read.image.registry}}{{.Values.read.image.repository}}
ports:
- containerPort: 5000
env:
- name: EULA
value: {{.Values.read.image.args.eula}}
- name: billing
value: {{.Values.read.image.args.billing}}
- name: apikey
value: {{.Values.read.image.args.apikey}}
args:
- ReadEngineConfig:ResultExpirationPeriod={{ .Values.read.image.args.resultExpirationPeriod }}
{{- if .Values.read.image.args.rabbitmq.enabled }}
- Queue:RabbitMQ:HostName={{ include "rabbitmq.hostname" . }}
- Queue:RabbitMQ:Username={{ .Values.read.image.args.rabbitmq.rabbitmq.username }}
- Queue:RabbitMQ:Password={{ .Values.read.image.args.rabbitmq.rabbitmq.password }}
{{- end }}
{{- if .Values.read.image.args.redis.enabled }}
- Cache:Redis:Configuration={{ include "redis.connStr" . }}
{{- end }}
imagePullSecrets:
- name: {{.Values.read.image.pullSecret}}
---
apiVersion: v1
kind: Service
metadata:
name: read-service
spec:
type: LoadBalancer
ports:
- port: 5000
selector:
app: read-app
في مجلد القوالب نفسه، انسخ وظائف المساعد التالية والصقها في helpers.tpl. helpers.tpl يحدد الوظائف المفيدة للمساعدة في إنشاء قالب Helm.
ملاحظة
تحتوي هذه المقالة على مراجع لمصطلح slave، هو مصطلح لم تعد Microsoft تستخدمه. عند إزالة المصطلح من البرنامج، سنزيله من هذه المقالة.
{{- define "rabbitmq.hostname" -}}
{{- printf "%s-rabbitmq" .Release.Name -}}
{{- end -}}
{{- define "redis.connStr" -}}
{{- $hostMain := printf "%s-redis-master:6379" .Release.Name }}
{{- $hostReplica := printf "%s-redis-slave:6379" .Release.Name -}}
{{- $passWord := printf "password=%s" .Values.read.image.args.redis.password -}}
{{- $connTail := "ssl=False,abortConnect=False" -}}
{{- printf "%s,%s,%s,%s" $hostMain $hostReplica $passWord $connTail -}}
{{- end -}}
يحدد القالب خدمة موازن التحميل ونشر الحاوية/الصورة للقراءة.
حزمة Kubernetes (مخطط Helm)
يحتوي مخطط Helm على تكوين صورة (صور) docker التي سيتم سحبها من سجل الحاوية mcr.microsoft.com .
مخطط Helm هو مجموعة من الملفات التي تصف مجموعة ذات صلة من موارد Kubernetes. قد يتم استخدام مخطط واحد لنشر شيء بسيط، مثل جراب memcached، أو شيء معقد، مثل مكدس تطبيق ويب كامل مع خوادم HTTP وقواعد البيانات وذاكرة التخزين المؤقت وما إلى ذلك.
تسحب مخططات Helm المتوفرة صور docker لخدمة Computer Vision، والخدمة المقابلة من سجل الحاوية mcr.microsoft.com .
تثبيت مخطط Helm على نظام مجموعة Kubernetes
لتثبيت مخطط helm، سنحتاج إلى تنفيذ helm install الأمر . تأكد من تنفيذ أمر التثبيت من الدليل أعلى read المجلد.
helm install read ./read
فيما يلي مثال على الإخراج الذي قد تتوقع رؤيته من تنفيذ التثبيت الناجح:
NAME: read
LAST DEPLOYED: Thu Sep 04 13:24:06 2019
NAMESPACE: default
STATUS: DEPLOYED
RESOURCES:
==> v1/Pod(related)
NAME READY STATUS RESTARTS AGE
read-57cb76bcf7-45sdh 0/1 ContainerCreating 0 0s
==> v1/Service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
read LoadBalancer 10.110.44.86 localhost 5000:31301/TCP 0s
==> v1beta1/Deployment
NAME READY UP-TO-DATE AVAILABLE AGE
read 0/1 1 0 0s
يمكن أن يستغرق نشر Kubernetes أكثر من عدة دقائق لإكماله. للتأكد من نشر كل من القرون والخدمات بشكل صحيح وإتاحتها، قم بتنفيذ الأمر التالي:
kubectl get all
يجب أن تتوقع رؤية شيء مشابه للإخراج التالي:
kubectl get all
NAME READY STATUS RESTARTS AGE
pod/read-57cb76bcf7-45sdh 1/1 Running 0 17s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 45h
service/read LoadBalancer 10.110.44.86 localhost 5000:31301/TCP 17s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/read 1/1 1 1 17s
NAME DESIRED CURRENT READY AGE
replicaset.apps/read-57cb76bcf7 1 1 1 17s
نشر حاويات v3 متعددة على مجموعة Kubernetes
بدءا من الإصدار 3 من الحاوية، يمكنك استخدام الحاويات بالتوازي على كل من مستوى المهمة والصفحة.
حسب التصميم، تحتوي كل حاوية v3 على مرسل وعامل التعرف. المرسل مسؤول عن تقسيم مهمة متعددة الصفحات إلى مهام فرعية متعددة في صفحة واحدة. تم تحسين عامل التعرف للتعرف على مستند صفحة واحدة. لتحقيق التوازي على مستوى الصفحة، قم بنشر حاويات v3 متعددة خلف موازن التحميل والسماح للحاويات بمشاركة التخزين العالمي وقوائم الانتظار.
ملاحظة
حاليا يتم دعم Azure Storage وAzure Queue فقط.
يمكن للحاوية التي تتلقى الطلب تقسيم المهمة إلى مهام فرعية في صفحة واحدة، وإضافتها إلى قائمة الانتظار العامة. يمكن لأي عامل التعرف من حاوية أقل انشغالا استهلاك المهام الفرعية لصفحة واحدة من قائمة الانتظار، وإجراء التعرف، وتحميل النتيجة إلى التخزين. يمكن تحسين معدل النقل حتى n الأوقات، اعتمادا على عدد الحاويات التي يتم نشرها.
تعرض حاوية v3 واجهة برمجة تطبيقات فحص الحياة تحت /ContainerLiveness المسار. استخدم مثال التوزيع التالي لتكوين فحص حية ل Kubernetes.
انسخ والصق YAML التالي في ملف يسمى deployment.yaml. استبدل التعليقات # {ENDPOINT_URI} و # {API_KEY} بقيمك الخاصة. # {AZURE_STORAGE_CONNECTION_STRING} استبدل التعليق بسلسلة اتصال تخزين Azure. قم بتكوين replicas الرقم الذي تريده، والذي تم تعيينه إلى 3 في المثال التالي.
apiVersion: apps/v1
kind: Deployment
metadata:
name: read
labels:
app: read-deployment
spec:
selector:
matchLabels:
app: read-app
replicas: # {NUMBER_OF_READ_CONTAINERS}
template:
metadata:
labels:
app: read-app
spec:
containers:
- name: cognitive-services-read
image: mcr.microsoft.com/azure-cognitive-services/vision/read
ports:
- containerPort: 5000
env:
- name: EULA
value: accept
- name: billing
value: # {ENDPOINT_URI}
- name: apikey
value: # {API_KEY}
- name: Storage__ObjectStore__AzureBlob__ConnectionString
value: # {AZURE_STORAGE_CONNECTION_STRING}
- name: Queue__Azure__ConnectionString
value: # {AZURE_STORAGE_CONNECTION_STRING}
livenessProbe:
httpGet:
path: /ContainerLiveness
port: 5000
initialDelaySeconds: 60
periodSeconds: 60
timeoutSeconds: 20
---
apiVersion: v1
kind: Service
metadata:
name: azure-cognitive-service-read
spec:
type: LoadBalancer
ports:
- port: 5000
targetPort: 5000
selector:
app: read-app
شغّل الأمر التالي:
kubectl apply -f deployment.yaml
فيما يلي مثال على المخرجات التي قد تراها من تنفيذ توزيع ناجح:
deployment.apps/read created
service/azure-cognitive-service-read created
يمكن أن يستغرق نشر Kubernetes عدة دقائق لإكماله. للتأكد من نشر كل من القرون والخدمات بشكل صحيح وإتاحتها، قم بتنفيذ الأمر التالي:
kubectl get all
يجب أن تشاهد إخراج وحدة التحكم مشابها للآتي:
kubectl get all
NAME READY STATUS RESTARTS AGE
pod/read-6cbbb6678-58s9t 1/1 Running 0 3s
pod/read-6cbbb6678-kz7v4 1/1 Running 0 3s
pod/read-6cbbb6678-s2pct 1/1 Running 0 3s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/azure-cognitive-service-read LoadBalancer 10.0.134.0 <none> 5000:30846/TCP 17h
service/kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 78d
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/read 3/3 3 3 3s
NAME DESIRED CURRENT READY AGE
replicaset.apps/read-6cbbb6678 3 3 3 3s
التحقق من تشغيل حاوية
هناك عدة طرق للتحقق من تشغيل الحاوية. حدد موقع عنوان IP الخارجي والمنفذ المكشوف للحاوية المعنية، وافتح مستعرض الويب المفضل لديك. استخدم عناوين URL للطلب المختلفة التي تلي للتحقق من تشغيل الحاوية. عناوين URL لطلب المثال المذكورة هنا هي http://localhost:5000، ولكن قد تختلف الحاوية المحددة. تأكد من الاعتماد على عنوان IP الخارجي للحاوية والمنفذ المكشوف.
| URL للطلب | الغرض |
|---|---|
http://localhost:5000/ |
توفر الحاوية صفحةً رئيسيةً. |
http://localhost:5000/ready |
عند طلب الحصول على، يوفر عنوان URL هذا التحقق من أن الحاوية جاهزة لقبول استعلام مقابل النموذج. يمكن استخدام هذا الطلب لفحوصات فعالية Kubernetes واستعداده. |
http://localhost:5000/status |
مطلوب أيضا مع GET، يتحقق عنوان URL هذا مما إذا كان مفتاح api المستخدم لبدء الحاوية صالحا دون التسبب في استعلام نقطة النهاية. يمكن استخدام هذا الطلب لفحوصات فعالية Kubernetes واستعداده. |
http://localhost:5000/swagger |
توفر الحاوية مجموعةً كاملةً من الوثائق لنقاط النهاية وميزة Try it out. باستخدام هذه الميزة، يمكنك إدخال إعداداتك في نموذج HTML مستند إلى الويب وإجراء الاستعلام دون الحاجة إلى كتابة أي تعليمة برمجية. بعد إرجاع الاستعلام، يتم توفير مثال لأمر CURL لتوضيح عناوين HTTP وتنسيق النص الأساسي المطلوب. |

الخطوات التالية
لمزيد من التفاصيل حول تثبيت التطبيقات باستخدام Helm في خدمة Azure Kubernetes (AKS)، تفضل بزيارة هنا.