Kubernetes ve Helm ile Azure AI Vision kapsayıcısı kullanma
Azure AI Vision kapsayıcılarınızı şirket içinde yönetmenin bir seçeneği Kubernetes ve Helm kullanmaktır. Azure AI Vision kapsayıcı görüntüsü tanımlamak için Kubernetes ve Helm kullanarak bir Kubernetes paketi oluşturacağız. Bu paket şirket içi kubernetes kümesine dağıtılacaktır. Son olarak, dağıtılan hizmetleri test etme hakkında bilgi edineceğiz. Kubernetes düzenlemesi olmadan Docker kapsayıcılarını çalıştırma hakkında daha fazla bilgi için bkz. Azure AI Vision kapsayıcılarını yükleme ve çalıştırma.
Önkoşullar
Şirket içi Azure AI Vision kapsayıcılarını kullanmadan önce aşağıdaki önkoşullar:
Gerekli | Amaç |
---|---|
Azure Hesabı | Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun. |
Kubernetes CLI | Kapsayıcı kayıt defterinden paylaşılan kimlik bilgilerini yönetmek için Kubernetes CLI gereklidir. Kubernetes, Kubernetes paket yöneticisi olan Helm'in öncesinde de gereklidir. |
Helm CLI | Helm grafiğini (kapsayıcı paketi tanımı) yüklemek için kullanılan Helm CLI'yi yükleyin. |
Görüntü İşleme kaynağı | Kapsayıcıyı kullanmak için aşağıdakilere sahip olmanız gerekir: Uç nokta URI'sinin Görüntü İşleme kaynağı ve ilişkili API anahtarı. Her iki değer de kaynağın Genel Bakış ve Anahtarlar sayfalarında bulunur ve kapsayıcıyı başlatmak için gereklidir. {API_KEY}: Anahtarlar sayfasındaki kullanılabilir iki kaynak anahtarından biri {ENDPOINT_URI}: Genel Bakış sayfasında sağlanan uç nokta |
Gerekli parametreleri toplama
Tüm Azure AI kapsayıcıları için üç birincil parametre gereklidir. Microsoft Yazılımı Lisans Koşulları kabul değeriyle birlikte mevcut olmalıdır. Bir Uç Nokta URI'si ve API anahtarı da gereklidir.
Uç nokta URI'si
Bu {ENDPOINT_URI}
değere karşılık gelen Azure AI hizmetleri kaynağının Azure portal Genel Bakış sayfasından ulaşabilirsiniz. Genel Bakış sayfasına gidin, uç noktanın üzerine gelin ve Panoya kopyala simgesi görüntülenir. Gerektiğinde uç noktayı kopyalayın ve kullanın.
Anahtarlar
{API_KEY}
Değer kapsayıcıyı başlatmak için kullanılır ve ilgili Azure AI hizmetleri kaynağının Azure portal Anahtarlar sayfasında kullanılabilir. Anahtarlar sayfasına gidin ve Panoya kopyala simgesini seçin.
Önemli
Bu abonelik anahtarları Azure AI hizmetleri API'nize erişmek için kullanılır. Anahtarlarınızı paylaşmayın. Bunları güvenli bir şekilde depolayın. Örneğin Azure Key Vault kullanın. Ayrıca bu anahtarları düzenli olarak yeniden oluşturmanızı öneririz. API çağrısı yapmak için yalnızca bir anahtar gereklidir. İlk anahtarı yeniden oluştururken, hizmete sürekli erişim için ikinci anahtarı kullanabilirsiniz.
Konak bilgisayar
Konak, Docker kapsayıcısını çalıştıran x64 tabanlı bir bilgisayardır. Şirket içi bir bilgisayar veya Azure'da Docker barındırma hizmeti olabilir, örneğin:
- Azure Kubernetes Service.
- Azure Container Instances.
- Azure Stack'e dağıtılan bir Kubernetes kümesi. Daha fazla bilgi için bkz. Kubernetes'i Azure Stack'e dağıtma.
Kapsayıcı gereksinimleri ve önerileri
Not
Gereksinimler ve öneriler, 29 satır ve toplam 803 karakter içeren taranmış bir iş mektubunun 523 KB görüntüsü kullanılarak saniye başına tek istek içeren karşılaştırmaları temel alır. Önerilen yapılandırma, minimum yapılandırmaya kıyasla yaklaşık 2 kat daha hızlı yanıt verdi.
Aşağıdaki tabloda, her Bir Read OCR kapsayıcısı için en düşük ve önerilen kaynak ayırma işlemi açıklanmaktadır.
Kapsayıcı | Minimum | Önerilen |
---|---|---|
Okuma 3.2 2022-04-30 | 4 çekirdek, 8 GB bellek | 8 çekirdek, 16 GB bellek |
Okuma 3.2 2021-04-12 | 4 çekirdek, 16 GB bellek | 8 çekirdek, 24 GB bellek |
- Her çekirdek en az 2,6 gigahertz (GHz) veya daha hızlı olmalıdır.
Çekirdek ve bellek, komutun --cpus
bir parçası olarak kullanılan ve --memory
ayarlarına docker run
karşılık gelir.
Kubernetes kümesine bağlanma
Konak bilgisayarda kullanılabilir bir Kubernetes kümesi olması beklenir. Kubernetes kümesinin bir konak bilgisayara nasıl dağıtılacağına ilişkin kavramsal bir anlayış için Kubernetes kümesini dağıtma öğreticisine bakın. Kubernetes belgelerinde dağıtımlar hakkında daha fazla bilgi bulabilirsiniz.
Dağıtım için Helm grafiği değerlerini yapılandırma
Read adlı bir klasör oluşturarak başlayın. Ardından, aşağıdaki YAML içeriğini adlı chart.yaml
yeni bir dosyaya yapıştırın:
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 grafiğinin varsayılan değerlerini yapılandırmak için aşağıdaki YAML'yi kopyalayıp adlı values.yaml
bir dosyaya yapıştırın. ve # {API_KEY}
açıklamalarını # {ENDPOINT_URI}
kendi değerlerinizle değiştirin. Gerekirse resultExpirationPeriod, Redis ve RabbitMQ'yi yapılandırın.
# 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
Önemli
ve
apikey
değerleri sağlanmazsabilling
, hizmetlerin süresi 15 dakika sonra dolar. Benzer şekilde, hizmetler kullanılamadığından doğrulama başarısız olur.Yük dengeleyici arkasında birden çok Okuma OCR kapsayıcısı dağıtıyorsanız, örneğin Docker Compose veya Kubernetes altında bir dış önbelleğiniz olmalıdır. İşleme kapsayıcısı ve GET isteği kapsayıcısı aynı olmayabileceği için, dış önbellek sonuçları depolar ve bunları kapsayıcılar arasında paylaşır. Önbellek ayarları hakkında ayrıntılı bilgi için bkz. Azure AI Vision Docker kapsayıcılarını yapılandırma.
Okuma dizini altında bir templates klasörü oluşturun. Aşağıdaki YAML'yi kopyalayıp adlı deployment.yaml
bir dosyaya yapıştırın. Dosya deployment.yaml
bir Helm şablonu olarak görev yapacaktır.
Şablonlar, Kubernetes'in anlayabileceği YAML biçimli kaynak açıklamaları olan bildirim dosyaları oluşturur. - Helm Grafiği Şablon Kılavuzu
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
Aynı templates klasöründe aşağıdaki yardımcı işlevleri kopyalayıp içine helpers.tpl
yapıştırın. helpers.tpl
Helm şablonu oluşturmaya yardımcı olmak için yararlı işlevler tanımlar.
{{- define "rabbitmq.hostname" -}}
{{- printf "%s-rabbitmq" .Release.Name -}}
{{- end -}}
{{- define "redis.connStr" -}}
{{- $hostMain := printf "%s-redis-master:6379" .Release.Name }}
{{- $hostReplica := printf "%s-redis-replica: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 -}}
Şablon bir yük dengeleyici hizmeti ve Okuma için kapsayıcınızın/görüntünüzün dağıtımını belirtir.
Kubernetes paketi (Helm grafiği)
Helm grafiği, kapsayıcı kayıt defterinden çekebileceğiniz mcr.microsoft.com
docker görüntü yapılandırmasını içerir.
Helm grafiği, ilgili Kubernetes kaynaklarını açıklayan bir dosya koleksiyonudur. Tek bir grafik, memcached pod gibi basit veya HTTP sunucuları, veritabanları, önbellekler vb. içeren tam bir web uygulaması yığını gibi karmaşık bir şeyi dağıtmak için kullanılabilir.
Sağlanan Helm grafikleri , Azure AI Vision Hizmeti'nin docker görüntülerini ve kapsayıcı kayıt defterinden mcr.microsoft.com
ilgili hizmeti çeker.
Kubernetes kümesine Helm grafiğini yükleme
Helm grafiğini yüklemek için komutunu yürütmemiz helm install
gerekir. Yükleme komutunu klasörün üstündeki read
dizinden yürüttüğünizden emin olun.
helm install read ./read
Aşağıda, başarılı bir yükleme yürütmesinden görmeyi bekleyebileceğiniz örnek bir çıktı verilmiştir:
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 dağıtımının tamamlanması birkaç dakika sürebilir. Hem podların hem de hizmetlerin düzgün bir şekilde dağıtıldığını ve kullanılabilir olduğunu onaylamak için aşağıdaki komutu yürütebilirsiniz:
kubectl get all
Aşağıdaki çıkışa benzer bir şey görmeyi beklemelisiniz:
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
Kubernetes kümesinde birden çok v3 kapsayıcısı dağıtma
Kapsayıcının v3'ünden başlayarak, kapsayıcıları hem görev hem de sayfa düzeyinde paralel olarak kullanabilirsiniz.
Tasarım gereği, her v3 kapsayıcısı bir dağıtıcıya ve bir tanıma çalışanına sahiptir. Dağıtıcı, çok sayfalı bir görevi birden çok tek sayfalı alt göreve bölmekle sorumludur. Tanıma çalışanı, tek sayfalı bir belgeyi tanımak için iyileştirilmiştir. Sayfa düzeyinde paralellik elde etmek için bir yük dengeleyicinin arkasında birden çok v3 kapsayıcısı dağıtın ve kapsayıcıların evrensel bir depolama alanını ve kuyruğu paylaşmasını sağlayın.
Not
Şu anda yalnızca Azure Depolama ve Azure Kuyruğu desteklenmektedir.
İsteği alan kapsayıcı görevi tek sayfalı alt görevlere bölebilir ve evrensel kuyruğa ekleyebilir. Daha az meşgul bir kapsayıcıdaki tüm tanıma çalışanı kuyruktan tek sayfalı alt görevleri kullanabilir, tanıma gerçekleştirebilir ve sonucu depolama alanına yükleyebilir. Aktarım hızı, dağıtılan kapsayıcı sayısına bağlı olarak zamanlara kadar n
geliştirilebilir.
v3 kapsayıcısı, yolun altında canlılık yoklaması API'sini /ContainerLiveness
kullanıma sunar. Kubernetes için canlılık araştırması yapılandırmak için aşağıdaki dağıtım örneğini kullanın.
Aşağıdaki YAML'yi kopyalayıp adlı deployment.yaml
bir dosyaya yapıştırın. ve # {API_KEY}
açıklamalarını # {ENDPOINT_URI}
kendi değerlerinizle değiştirin. Açıklamasını # {AZURE_STORAGE_CONNECTION_STRING}
Azure Depolama Bağlantı Dizenizle değiştirin. Aşağıdaki örnekte olarak ayarlanan istediğiniz sayıya 3
yapılandırınreplicas
.
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
Aşağıdaki komutu çalıştırın.
kubectl apply -f deployment.yaml
Aşağıda başarılı bir dağıtım yürütmesinden görebileceğiniz örnek bir çıktı verilmiştir:
deployment.apps/read created
service/azure-cognitive-service-read created
Kubernetes dağıtımının tamamlanması birkaç dakika sürebilir. Hem podların hem de hizmetlerin düzgün dağıtıldığını ve kullanılabilir olduğunu onaylamak için aşağıdaki komutu yürütebilirsiniz:
kubectl get all
Aşağıdakine benzer bir konsol çıktısı görmeniz gerekir:
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
Kapsayıcının çalıştığını doğrulama
Kapsayıcının çalıştığını doğrulamanın çeşitli yolları vardır. Söz konusu kapsayıcının Dış IP adresini ve kullanıma sunulan bağlantı noktasını bulun ve sık kullandığınız web tarayıcısını açın. Kapsayıcının çalıştığını doğrulamak için aşağıdaki çeşitli istek URL'lerini kullanın. Burada listelenen örnek istek URL'leri şunlardır http://localhost:5000
: ancak kapsayıcınız farklılık gösterebilir. Kapsayıcınızın Dış IP adresine ve kullanıma sunulan bağlantı noktasına bağlı olduğundan emin olun.
İstek URL’si | Amaç |
---|---|
http://localhost:5000/ |
Kapsayıcı bir giriş sayfası sağlar. |
http://localhost:5000/ready |
GET ile istenen bu URL, kapsayıcının modele yönelik bir sorguyu kabul etmeye hazır olduğuna ilişkin bir doğrulama sağlar. Bu istek Kubernetes canlılığı ve hazırlık yoklamaları için kullanılabilir. |
http://localhost:5000/status |
Get ile de istenen bu URL, kapsayıcıyı başlatmak için kullanılan api anahtarının bir uç nokta sorgusuna neden olmadan geçerli olup olmadığını doğrular. Bu istek Kubernetes canlılığı ve hazırlık yoklamaları için kullanılabilir. |
http://localhost:5000/swagger |
Kapsayıcı uç noktalar için tüm belgeleri ve bir de Deneyin özelliği sağlar. Bu özellik sayesinde, ayarlarınızı web tabanlı bir HTML formuna girebilir ve herhangi bir kod yazmak zorunda kalmadan sorguyu yapabilirsiniz. Sorgu döndükten sonra, gerekli HTTP üst bilgilerini ve gövde biçimini göstermek için örnek bir CURL komutu sağlanır. |
Sonraki adımlar
Azure Kubernetes Service'de (AKS) Helm ile uygulama yükleme hakkında daha fazla bilgi için burayı ziyaret edin.