Een taaldetectiecontainer implementeren in Azure Kubernetes Service
Meer informatie over het implementeren van de taaldetectiecontainer. In deze procedure ziet u hoe u de lokale Docker-containers maakt, de containers pusht naar uw eigen privécontainerregister, de container uitvoert in een Kubernetes-cluster en deze test in een webbrowser.
Vereisten
Voor deze procedure zijn verschillende hulpprogramma's vereist die lokaal moeten worden geïnstalleerd en uitgevoerd. Gebruik Azure Cloud Shell niet.
- Gebruik een Azure-abonnement. Als u geen Azure-abonnement hebt, maakt u een gratis account voordat u begint.
- Git voor uw besturingssysteem, zodat u het voorbeeld dat in deze procedure wordt gebruikt, kunt klonen.
- Azure CLI.
- Docker-engine en controleer of de Docker CLI werkt in een consolevenster.
- kubectl.
- Een Azure-resource met de juiste prijscategorie. Niet alle prijscategorieën werken met deze container:
- Taalresource met alleen F0- of Standard-prijscategorieën.
- Azure AI-servicesresource met de prijscategorie S0.
Het voorbeeld uitvoeren
Met deze procedure wordt het containervoorbeeld van Azure AI Services geladen en uitgevoerd voor taaldetectie. Het voorbeeld heeft twee containers, één voor de clienttoepassing en één voor de Azure AI-servicescontainer. We pushen beide installatiekopieën naar Azure Container Registry. Zodra ze zich in uw eigen register bevinden, maakt u een Azure Kubernetes Service voor toegang tot deze installatiekopieën en voert u de containers uit. Wanneer de containers worden uitgevoerd, gebruikt u de kubectl CLI om de prestaties van de containers te bekijken. Open de clienttoepassing met een HTTP-aanvraag en bekijk de resultaten.
De voorbeeldcontainers
Het voorbeeld heeft twee containerinstallatiekopieën, één voor de front-endwebsite. De tweede afbeelding is de taaldetectiecontainer die de gedetecteerde taal (cultuur) van tekst retourneert. Beide containers zijn toegankelijk vanaf een extern IP-adres wanneer u klaar bent.
De taalfront-endcontainer
Deze website is gelijk aan uw eigen clienttoepassing die aanvragen doet van het eindpunt voor taaldetectie. Wanneer de procedure is voltooid, krijgt u de gedetecteerde taal van een tekenreeks door toegang te krijgen tot de websitecontainer in een browser met http://<external-IP>/<text-to-analyze>
. Een voorbeeld van deze URL is http://132.12.23.255/helloworld!
. Het resultaat in de browser is English
.
De taalcontainer
De taaldetectiecontainer is in deze specifieke procedure toegankelijk voor elke externe aanvraag. De container is op geen enkele manier gewijzigd, zodat de standaard azure AI Services-containerspecifieke taaldetectie-API beschikbaar is.
Voor deze container is die API een POST-aanvraag voor taaldetectie. Net als bij alle Azure AI-containers vindt u meer informatie over de container op basis van de gehoste Swagger-informatie. http://<external-IP>:5000/swagger/index.html
Poort 5000 is de standaardpoort die wordt gebruikt met de Azure AI-containers.
Azure Container Registry-service maken
Als u de container wilt implementeren in de Azure Kubernetes Service, moeten de containerinstallatiekopieën toegankelijk zijn. Maak uw eigen Azure Container Registry-service om de installatiekopieën te hosten.
Aanmelden bij de Azure CLI
az login
Maak een resourcegroep met de naam
cogserv-container-rg
die elke resource bevat die in deze procedure is gemaakt.az group create --name cogserv-container-rg --location westus
Maak uw eigen Azure Container Registry met de indeling van uw naam,
registry
bijvoorbeeldpattyregistry
. Gebruik geen streepjes of onderstrepingstekens in de naam.az acr create --resource-group cogserv-container-rg --name pattyregistry --sku Basic
Sla de resultaten op om de eigenschap loginServer op te halen. Dit maakt deel uit van het adres van de gehoste container, dat later in het
language.yml
bestand wordt gebruikt.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" }
Meld u aan bij uw containerregister. U moet zich aanmelden voordat u installatiekopieën naar uw register kunt pushen.
az acr login --name pattyregistry
Docker-installatiekopieën van website ophalen
De voorbeeldcode die in deze procedure wordt gebruikt, bevindt zich in de opslagplaats met voorbeelden van Azure AI-containers. Kloon de opslagplaats om een lokale kopie van het voorbeeld te hebben.
git clone https://github.com/Azure-Samples/cognitive-services-containers-samples
Zodra de opslagplaats zich op uw lokale computer bevindt, zoekt u de website in de map \dotnet\Language\FrontendService . Deze website fungeert als de clienttoepassing die de taaldetectie-API aanroept die wordt gehost in de taaldetectiecontainer.
Bouw de Docker-installatiekopieën voor deze website. Zorg ervoor dat de console zich in de map \FrontendService bevindt waar het Dockerfile zich bevindt wanneer u de volgende opdracht uitvoert:
docker build -t language-frontend -t pattiyregistry.azurecr.io/language-frontend:v1 .
Als u de versie in het containerregister wilt bijhouden, voegt u de tag toe met een versie-indeling, zoals
v1
.Push de installatiekopieën naar uw containerregister. Dit kan enkele minuten in beslag nemen.
docker push pattyregistry.azurecr.io/language-frontend:v1
Als er een
unauthorized: authentication required
fout optreedt, meldt u zich aan met deaz acr login --name <your-container-registry-name>
opdracht.Wanneer het proces is voltooid, moeten de resultaten vergelijkbaar zijn met:
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-installatiekopieën voor taaldetectie ophalen
Haal de nieuwste versie van de Docker-installatiekopie op de lokale computer. Dit kan enkele minuten in beslag nemen. Als er een nieuwere versie van deze container is, wijzigt u de waarde van
1.1.006770001-amd64-preview
de nieuwere versie.docker pull mcr.microsoft.com/azure-cognitive-services/language:1.1.006770001-amd64-preview
Tag installatiekopieën met uw containerregister. Zoek de nieuwste versie en vervang de versie
1.1.006770001-amd64-preview
als u een recentere versie hebt.docker tag mcr.microsoft.com/azure-cognitive-services/language pattiyregistry.azurecr.io/language:1.1.006770001-amd64-preview
Push de installatiekopieën naar uw containerregister. Dit kan enkele minuten in beslag nemen.
docker push pattyregistry.azurecr.io/language:1.1.006770001-amd64-preview
Container Registry-referenties ophalen
De volgende stappen zijn nodig om de vereiste informatie op te halen om uw containerregister te verbinden met de Azure Kubernetes Service die u verderop in deze procedure maakt.
Maak een service-principal.
az ad sp create-for-rbac
Sla de resultatenwaarde
appId
op voor de parameter assignee in stap 3<appId>
. Sla de parameter voor hetpassword
clientgeheim van de volgende sectie op<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" }
Haal uw containerregister-id op.
az acr show --resource-group cogserv-container-rg --name pattyregistry --query "id" --output table
Sla de uitvoer voor de waarde van de bereikparameter op
<acrId>
in de volgende stap. Deze ziet er als volgt uit:/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/cogserv-container-rg/providers/Microsoft.ContainerRegistry/registries/pattyregistry
Sla de volledige waarde voor stap 3 in deze sectie op.
Als u de juiste toegang wilt verlenen voor het AKS-cluster om installatiekopieën te gebruiken die zijn opgeslagen in uw containerregister, maakt u een roltoewijzing. Vervang
<appId>
en<acrId>
door de waarden die in de vorige twee stappen zijn verzameld.az role assignment create --assignee <appId> --scope <acrId> --role Reader
Azure Kubernetes Service maken
Maak de Kubernetes-cluster. Alle parameterwaarden zijn afkomstig uit eerdere secties, behalve de naamparameter. Kies een naam die aangeeft wie deze heeft gemaakt en het doel, zoals
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
Deze stap kan enkele minuten in beslag nemen. Het resultaat is:
{ "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" }
De service wordt gemaakt, maar de websitecontainer of taaldetectiecontainer is nog niet beschikbaar.
Haal referenties op van het Kubernetes-cluster.
az aks get-credentials --resource-group cogserv-container-rg --name patty-kube
De indelingsdefinitie laden in uw Kubernetes-service
In deze sectie wordt de kubectl CLI gebruikt om te communiceren met de Azure Kubernetes Service.
Controleer voordat u de indelingsdefinitie laadt, of kubectl toegang heeft tot de knooppunten.
kubectl get nodes
Het antwoord ziet er als volgt uit:
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
Kopieer het volgende bestand en geef het een
language.yml
naam. Het bestand bevat eenservice
sectie en eendeployment
sectie voor de twee containertypen, delanguage-frontend
websitecontainer en delanguage
detectiecontainer.# 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
Wijzig de taal-front-endimplementatieregels op basis van
language.yml
de volgende tabel om uw eigen containerregisterinstallatiekopieën, clientgeheim en taalservice-instellingen toe te voegen.Taal-front-endimplementatie-instellingen Doel Regel 32
image
eigenschapInstallatiekopieënlocatie voor de front-endinstallatiekopieën in uw Container Registry <container-registry-name>.azurecr.io/language-frontend:v1
Regel 44
name
eigenschapContainer Registry-geheim voor de installatiekopieën, aangeduid <client-secret>
als in een vorige sectie.Wijzig de taalimplementatieregels op basis van
language.yml
de volgende tabel om uw eigen containerregisterinstallatiekopieën, clientgeheim en taalservice-instellingen toe te voegen.Taalimplementatie-instellingen Doel Regel 78
image
eigenschapInstallatiekopieënlocatie voor de taalinstallatiekopieën in uw Container Registry <container-registry-name>.azurecr.io/language:1.1.006770001-amd64-preview
Regel 95
name
eigenschapContainer Registry-geheim voor de installatiekopieën, aangeduid <client-secret>
als in een vorige sectie.Regel 91
apiKey
eigenschapUw taalserviceresourcesleutel Regel 92
billing
eigenschapHet factureringseindpunt voor uw Language-serviceresource. https://westus.api.cognitive.microsoft.com/text/analytics/v2.1
Omdat het apiKey - en factureringseindpunt zijn ingesteld als onderdeel van de Definitie van de Kubernetes-indeling, hoeft de websitecontainer deze niet te kennen of door te geven als onderdeel van de aanvraag. De websitecontainer verwijst naar de container voor taaldetectie op basis van de orchestratornaam
language
.Laad het indelingsdefinitiebestand voor dit voorbeeld vanuit de map waarin u het
language.yml
hebt gemaakt en opgeslagen.kubectl apply -f language.yml
Het antwoord is:
service "language-frontend" created deployment.apps "language-frontend" created service "language" created deployment.apps "language" created
Externe IP-adressen van containers ophalen
Controleer voor de twee containers of de language-frontend
services language
actief zijn en haal het externe IP-adres op.
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
Als de EXTERNAL-IP
service wordt weergegeven als in behandeling, voert u de opdracht opnieuw uit totdat het IP-adres wordt weergegeven voordat u naar de volgende stap gaat.
De taaldetectiecontainer testen
Open een browser en navigeer naar het externe IP-adres van de language
container uit de vorige sectie: http://<external-ip>:5000/swagger/index.html
. U kunt de Try it
functie van de API gebruiken om het eindpunt voor taaldetectie te testen.
De clienttoepassingscontainer testen
Wijzig de URL in de browser in het externe IP-adres van de language-frontend
container met behulp van de volgende indeling: http://<external-ip>/helloworld
De Engelse cultuurtekst wordt helloworld
voorspeld als English
.
Resources opschonen
Wanneer u klaar bent met het cluster, verwijdert u de Azure-resourcegroep.
az group delete --name cogserv-container-rg