Použití kontejneru Azure AI Vision s Kubernetes a Helmem
Jednou z možností správy kontejnerů Azure AI Vision v místním prostředí je použití Kubernetes a Helmu. Pomocí Kubernetes a Helmu definujeme image kontejneru Azure AI Vision, vytvoříme balíček Kubernetes. Tento balíček se nasadí do místního clusteru Kubernetes. Nakonec prozkoumáme, jak otestovat nasazené služby. Další informace o spouštění kontejnerů Dockeru bez orchestrace Kubernetes najdete v tématu Instalace a spuštění kontejnerů Azure AI Vision.
Požadavky
Před použitím kontejnerů Azure AI Vision v místním prostředí jsou splněné následující požadavky:
Požaduje se | Účel |
---|---|
Azure Account | Pokud ještě nemáte předplatné Azure, vytvořte si napřed bezplatný účet. |
Rozhraní příkazového řádku Kubernetes | Rozhraní příkazového řádku Kubernetes se vyžaduje ke správě sdílených přihlašovacích údajů z registru kontejneru. Kubernetes je také potřeba před Helmem, což je správce balíčků Kubernetes. |
Rozhraní příkazového řádku Helm | Nainstalujte rozhraní příkazového řádku Helm, které se používá k instalaci chartu Helm (definice balíčku kontejneru). |
prostředek Počítačové zpracování obrazu | Abyste mohli kontejner používat, musíte mít: Prostředek Počítačové zpracování obrazu a přidružený klíč rozhraní API identifikátor URI koncového bodu. Obě hodnoty jsou k dispozici na stránkách Přehled a Klíče pro prostředek a jsou potřeba ke spuštění kontejneru. {API_KEY}: Jeden ze dvou dostupných klíčů prostředků na stránce Klíče {ENDPOINT_URI}: Koncový bod uvedený na stránce Přehled |
Shromáždění požadovaných parametrů
Jsou vyžadovány tři primární parametry pro všechny kontejnery Azure AI. Licenční podmínky pro software společnosti Microsoft musí být k dispozici s hodnotou přijetí. Vyžaduje se také identifikátor URI koncového bodu a klíč rozhraní API.
Identifikátor URI koncového bodu
Tato {ENDPOINT_URI}
hodnota je k dispozici na stránce Přehled webu Azure Portal odpovídajícího prostředku služeb Azure AI. Přejděte na stránku Přehled, najeďte myší na koncový bod a zobrazí se ikona Kopírovat do schránky. Zkopírujte koncový bod a použijte ho tam, kde je to potřeba.
Klávesy
Hodnota {API_KEY}
se používá ke spuštění kontejneru a je k dispozici na stránce Klíče webu Azure Portal odpovídajícího prostředku služeb Azure AI. Přejděte na stránku Klíče a vyberte ikonu Kopírovat do schránky.
Důležité
Tyto klíče předplatného se používají pro přístup k rozhraní API služeb Azure AI. Nesdílejte klíče. Bezpečně je uložte. Použijte například Azure Key Vault. Doporučujeme tyto klíče pravidelně znovu vygenerovat. K volání rozhraní API je nutný jenom jeden klíč. Při opětovném vygenerování prvního klíče můžete pro pokračování přístupu ke službě použít druhý klíč.
Hostitelský počítač
Hostitel je počítač založený na platformě x64, na kterém běží kontejner Dockeru. Může to být počítač v místním prostředí nebo hostitelská služba Dockeru v Azure, například:
- Azure Kubernetes Service.
- Azure Container Instances.
- Cluster Kubernetes nasazený do služby Azure Stack. Další informace najdete v tématu Nasazení Kubernetes do služby Azure Stack.
Požadavky na kontejnery a doporučení
Poznámka:
Požadavky a doporučení jsou založeny na srovnávacích testech s jedním požadavkem za sekundu pomocí 523kB obrázku naskenovaného obchodního dopisu, který obsahuje celkem 29 řádků a celkem 803 znaků. Doporučená konfigurace způsobila přibližně 2x rychlejší odezvu v porovnání s minimální konfigurací.
Následující tabulka popisuje minimální a doporučené přidělení prostředků pro každý kontejner OCR pro čtení.
Kontejner | Minimum | Doporučeno |
---|---|---|
Čtení 3.2 2022-04-30 | 4 jádra, 8 GB paměti | 8 jader, 16 GB paměti |
Čtení 3.2 2021-04-12 | 4 jádra, 16 GB paměti | 8 jader, 24 GB paměti |
- Každé jádro musí mít alespoň 2,6 gigahertz (GHz) nebo rychlejší.
Jádro a paměť odpovídají hodnotám --cpus
a --memory
nastavením, které se používají jako součást docker run
příkazu.
Připojení ke clusteru Kubernetes
Očekává se, že hostitelský počítač bude mít dostupný cluster Kubernetes. V tomto kurzu o nasazení clusteru Kubernetes se dozvíte, jak na hostitelský počítač nasadit cluster Kubernetes. Další informace o nasazeních najdete v dokumentaci k Kubernetes.
Konfigurace hodnot chartu Helm pro nasazení
Začněte vytvořením složky s názvem read. Potom vložte následující obsah YAML do nového souboru s názvem 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/
Pokud chcete nakonfigurovat výchozí hodnoty chartu Helm, zkopírujte a vložte následující YAML do souboru s názvem values.yaml
. # {ENDPOINT_URI}
Nahraďte komentáře # {API_KEY}
vlastními hodnotami. V případě potřeby nakonfigurujte výsledekExpirationPeriod, Redis a 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
Důležité
billing
Pokud tyto hodnoty aapikey
hodnoty nejsou k dispozici, vyprší platnost služeb po 15 minutách. Podobně se ověření nezdaří, protože služby nejsou dostupné.Pokud za nástrojem pro vyrovnávání zatížení nasadíte několik kontejnerů OCR pro čtení, například v rámci Docker Compose nebo Kubernetes, musíte mít externí mezipaměť. Protože kontejner zpracování a kontejner požadavku GET nemusí být stejné, externí mezipaměť ukládá výsledky a sdílí je mezi kontejnery. Podrobnosti o nastavení mezipaměti najdete v tématu Konfigurace kontejnerů Dockeru ve službě Azure AI Vision.
Vytvořte složku šablon v adresáři pro čtení . Zkopírujte a vložte následující YAML do souboru s názvem deployment.yaml
. Soubor deployment.yaml
bude sloužit jako šablona Helmu.
Šablony generují soubory manifestu, což jsou popisy prostředků ve formátu YAML, kterým Může Kubernetes rozumět. – Průvodce šablonou chartu 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
Ve stejné složce šablon zkopírujte a vložte následující pomocné funkce do helpers.tpl
složky . helpers.tpl
definuje užitečné funkce, které pomáhají generovat šablonu Helm.
{{- 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 -}}
Šablona určuje službu nástroje pro vyrovnávání zatížení a nasazení kontejneru nebo image pro čtení.
Balíček Kubernetes (chart Helm)
Chart Helm obsahuje konfiguraci, ze které se mají image Dockeru načíst z registru kontejnerumcr.microsoft.com
.
Chart Helm je kolekce souborů, které popisují související sadu prostředků Kubernetes. Jeden graf se může použít k nasazení něčeho jednoduchého, například podu memcached nebo něčeho složitého, například kompletního zásobníku webových aplikací se servery HTTP, databázemi, mezipaměťmi atd.
Poskytnuté grafy Helm načítá image Dockeru služby Azure AI Vision Service a odpovídající službu z registru kontejnerumcr.microsoft.com
.
Instalace chartu Helm v clusteru Kubernetes
Pokud chcete nainstalovat chart Helm, budeme muset tento příkaz spustit helm install
. Ujistěte se, že chcete spustit příkaz install z adresáře nad složkou read
.
helm install read ./read
Tady je příklad výstupu, který byste mohli očekávat od úspěšného spuštění instalace:
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
Dokončení nasazení Kubernetes může trvat několik minut. Pokud chcete ověřit, že jsou pody i služby správně nasazené a dostupné, spusťte následující příkaz:
kubectl get all
Měli byste očekávat, že se zobrazí něco podobného následujícímu výstupu:
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
Nasazení několika kontejnerů v3 v clusteru Kubernetes
Počínaje verzí 3 kontejneru můžete kontejnery používat paralelně na úrovni úlohy i stránky.
Každý kontejner v3 má podle návrhu dispečer a pracovník rozpoznávání. Dispečer zodpovídá za rozdělení vícestráenkového úkolu na několik dílčích úkolů na jednu stránku. Pracovní proces rozpoznávání je optimalizovaný pro rozpoznávání jednoho stránkového dokumentu. Pokud chcete dosáhnout paralelismu na úrovni stránky, nasaďte několik kontejnerů v3 za nástrojem pro vyrovnávání zatížení a nechte kontejnery sdílet univerzální úložiště a frontu.
Poznámka:
V současné době se podporují jenom Azure Storage a Fronta Azure.
Kontejner, který přijímá požadavek, může úkol rozdělit na dílčí úkoly na jedné stránce a přidat je do univerzální fronty. Každý pracovní proces rozpoznávání z méně zaneprázdněného kontejneru může využívat dílčí úlohy na jedné stránce z fronty, provádět rozpoznávání a nahrávat výsledek do úložiště. Propustnost lze v závislosti na počtu nasazených kontejnerů vylepšit až n
kolikrát.
Kontejner v3 zveřejňuje rozhraní API sondy aktivity v /ContainerLiveness
rámci cesty. Pomocí následujícího příkladu nasazení nakonfigurujte sondu aktivity pro Kubernetes.
Zkopírujte a vložte následující YAML do souboru s názvem deployment.yaml
. # {ENDPOINT_URI}
Nahraďte komentáře # {API_KEY}
vlastními hodnotami. # {AZURE_STORAGE_CONNECTION_STRING}
Nahraďte komentář připojovacím řetězcem služby Azure Storage. Nakonfigurujte replicas
požadované číslo, které je nastavené 3
v následujícím příkladu.
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
Spusťte následující příkaz:
kubectl apply -f deployment.yaml
Níže je příklad výstupu, který se může zobrazit z úspěšného spuštění nasazení:
deployment.apps/read created
service/azure-cognitive-service-read created
Dokončení nasazení Kubernetes může trvat několik minut. Pokud chcete ověřit, že jsou pody i služby správně nasazené a dostupné, spusťte následující příkaz:
kubectl get all
Měl by se zobrazit výstup konzoly podobný následujícímu:
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
Ověření, že je kontejner spuštěný
Existuje několik způsobů, jak ověřit, že je kontejner spuštěný. Vyhledejte externí IP adresu a vystavený port kontejneru a otevřete svůj oblíbený webový prohlížeč. Pomocí různých adres URL požadavků, které následují, ověřte, že kontejner běží. Tady jsou uvedené http://localhost:5000
ukázkové adresy URL požadavků, ale váš konkrétní kontejner se může lišit. Ujistěte se, že spoléháte na externí IP adresu kontejneru a vystavený port.
Další kroky
Další podrobnosti o instalaci aplikací s Helmem ve službě Azure Kubernetes Service (AKS) najdete tady.
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro