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.

Uç nokta URI'sini daha sonra kullanmak üzere toplamayı gösteren ekran görüntüsü.

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.

Daha sonra kullanmak üzere iki anahtardan birini almayı gösteren ekran görüntüsü.

Ö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:

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.yamlyeni 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.yamlbir 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.yamlbir 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.tplyapış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.yamlbir 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.

Kapsayıcının giriş sayfası

Sonraki adımlar

Azure Kubernetes Service'de (AKS) Helm ile uygulama yükleme hakkında daha fazla bilgi için burayı ziyaret edin.