Een taaldetectiecontainer implementeren in Azure Kubernetes Service
Meer informatie over het implementeren van de taaldetectiecontainer. Deze procedure laat zien hoe u de lokale Docker-containers maakt, de containers naar uw eigen privécontainerregister pusht, de container in een Kubernetes-cluster uitvoeren en deze in een webbrowser test.
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 nog geen abonnement op Azure hebt, maak dan een gratis account aan voordat u begint.
- Git voor uw besturingssysteem, zodat u het voorbeeld kunt klonen dat in deze procedure wordt gebruikt.
- 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 werkt met deze container:
- Taalresource met alleen de prijscategorie F0 of Standard.
- Cognitive Services resource met de prijscategorie S0.
Het voorbeeld uitvoeren
Met deze procedure wordt het voorbeeld Cognitive Services container voor taaldetectie geladen en uitgevoerd. Het voorbeeld heeft twee containers, één voor de clienttoepassing en één voor de Cognitive Services container. We pushen beide afbeeldingen naar de Azure Container Registry. Zodra ze zich in uw eigen register hebben, maakt u een Azure Kubernetes Service om toegang te krijgen tot deze afbeeldingen en de containers uit te voeren. 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 containerafbeeldingen, één voor de front-endwebsite. De tweede afbeelding is de container voor taaldetectie die de gedetecteerde taal (cultuur) van tekst retourneerd. Beide containers zijn toegankelijk vanaf een extern IP-adres wanneer u klaar bent.
De language-frontend-container
Deze website is gelijk aan uw eigen toepassing aan de clientzijde die aanvragen voor het eindpunt voor taaldetectie doet. Wanneer de procedure is voltooid, krijgt u de gedetecteerde taal van een tekenreeks door de websitecontainer te openen 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, dus de standaard Cognitive Services containerspecifieke taaldetectie-API is beschikbaar.
Voor deze container is die API een POST-aanvraag voor taaldetectie. Net als bij alle Cognitive Services containers, kunt u meer informatie over de container vinden op de gehoste Swagger-informatie, http://<external-IP>:5000/swagger/index.html .
Poort 5000 is de standaardpoort die wordt gebruikt met de Cognitive Services containers.
Een Azure Container Registry maken
Als u de container wilt implementeren in Azure Kubernetes Service, moeten de containerafbeeldingen toegankelijk zijn. Maak uw eigen Azure Container Registry voor het hosten van de afbeeldingen.
Aanmelden bij de Azure CLI
az loginMaak een resourcegroep met de
cogserv-container-rgnaam voor elke resource die in deze procedure is gemaakt.az group create --name cogserv-container-rg --location westusMaak uw eigen Azure Container Registry met de indeling van uw naam en
registryvervolgens , zoalspattyregistry. Gebruik geen streepjes of onderstrepingstekens in de naam.az acr create --resource-group cogserv-container-rg --name pattyregistry --sku BasicSla 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 bestand wordt
language.ymlgebruikt.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 afbeeldingen naar het register kunt pushen.
az acr login --name pattyregistry
Docker-website-afbeelding downloaden
De voorbeeldcode die in deze procedure wordt gebruikt, staat in de opslagplaats Cognitive Services containers samples. Kloon de opslagplaats voor een lokale kopie van het voorbeeld.
git clone https://github.com/Azure-Samples/cognitive-services-containers-samplesZodra de opslagplaats zich op uw lokale computer bevinden, gaat u naar 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-afbeelding voor deze website. Zorg ervoor dat de console zich in de map \FrontendService bevindt waarin de Dockerfile zich bevindt wanneer u de volgende opdracht hebt uitgevoerd:
docker build -t language-frontend -t pattiyregistry.azurecr.io/language-frontend:v1 .Als u de versie in uw containerregister wilt bijhouden, voegt u de tag toe met een versie-indeling, zoals
v1.Push de -afbeelding naar het containerregister. Dit kan enkele minuten duren.
docker push pattyregistry.azurecr.io/language-frontend:v1Als er een
unauthorized: authentication requiredfoutmelding wordt weergegeven, meld u zich aan met deaz acr login --name <your-container-registry-name>opdracht .Wanneer het proces is uitgevoerd, moeten de resultaten er ongeveer als volgen:
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-afbeelding voor taaldetectie op halen
Haal de nieuwste versie van de Docker-afbeelding op naar de lokale computer. Dit kan enkele minuten duren. Als er een nieuwere versie van deze container is, wijzigt u de waarde van
1.1.006770001-amd64-previewin de nieuwere versie.docker pull mcr.microsoft.com/azure-cognitive-services/language:1.1.006770001-amd64-previewTag de afbeelding met uw containerregister. Zoek de nieuwste versie en vervang de versie
1.1.006770001-amd64-previewals u een recentere versie hebt.docker tag mcr.microsoft.com/azure-cognitive-services/language pattiyregistry.azurecr.io/language:1.1.006770001-amd64-previewPush de -afbeelding naar het containerregister. Dit kan enkele minuten duren.
docker push pattyregistry.azurecr.io/language:1.1.006770001-amd64-preview
Uw Container Registry op te halen
De volgende stappen zijn nodig om de vereiste gegevens op te halen om uw containerregister te verbinden met de Azure Kubernetes Service u later in deze procedure maakt.
Maak een service-principal.
az ad sp create-for-rbacSla de waarde
appIdvan de resultaten voor de parameter assignee in stap 3,<appId>op. Sla depasswordop voor de clientgeheimparameter van de volgende<client-secret>sectie.{ "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 de id van het containerregister op.
az acr show --resource-group cogserv-container-rg --name pattyregistry --query "id" --o tableSla de uitvoer voor de waarde van de bereikparameter,
<acrId>, op in de volgende stap. Deze ziet er als volgt uit:/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/cogserv-container-rg/providers/Microsoft.ContainerRegistry/registries/pattyregistrySla de volledige waarde voor stap 3 in deze sectie op.
Maak een roltoewijzing om het AKS-cluster de juiste toegang te verlenen voor het gebruik van afbeeldingen die zijn opgeslagen in uw containerregister. Vervang
<appId>en door de waarden die in de vorige twee stappen zijn<acrId>verzameld.az role assignment create --assignee <appId> --scope <acrId> --role Reader
Een Azure Kubernetes Service
Maak de Kubernetes-cluster. Alle parameterwaarden zijn afkomstig uit de vorige secties, met uitzondering van de naamparameter. Kies een naam die aangeeft wie deze heeft gemaakt en het doel ervan, 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-keysDeze stap kan enkele minuten duren. 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 is gemaakt, maar de websitecontainer of taaldetectiecontainer is nog niet beschikbaar.
Haal referenties van het Kubernetes-cluster op.
az aks get-credentials --resource-group cogserv-container-rg --name patty-kube
De orchestration-definitie laden in uw Kubernetes-service
In deze sectie wordt de kubectl CLI gebruikt om te praten met de Azure Kubernetes Service.
Voordat u de orchestration-definitie laadt, controleert u of kubectl toegang heeft tot de knooppunten.
kubectl get nodesHet antwoord ziet er als volgende 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.11Kopieer het volgende bestand en noem het
language.yml. Het bestand heeft een sectie en een sectie voor de tweeservicedeploymentcontainertypen, delanguage-frontendwebsitecontainer en delanguagedetectiecontainer.# 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: falseWijzig de taal-front-en-front-front-implementatieregels van op basis van de volgende tabel om uw eigen
language.ymlnamen van containerregisters, clientgeheimen en taalservice-instellingen toe te voegen.Implementatie-instellingen voor taal-front-en-front-en Doel Regel 32
imageEigenschapLocatie van de afbeelding voor de front-Container Registry <container-registry-name>.azurecr.io/language-frontend:v1Regel 44
nameEigenschapContainer Registry geheim voor de afbeelding, zoals in <client-secret>een vorige sectie is genoemd.Wijzig de taalimplementatieregels van op basis van de volgende tabel om uw eigen namen van
language.ymlcontainerregisters, clientgeheimen en taalservice-instellingen toe te voegen.Taalimplementatie-instellingen Doel Regel 78
imageEigenschapLocatie van de afbeelding voor de taalafbeelding in uw Container Registry <container-registry-name>.azurecr.io/language:1.1.006770001-amd64-previewRegel 95
nameEigenschapContainer Registry geheim voor de afbeelding, zoals in <client-secret>een vorige sectie is genoemd.Regel 91
apiKeyEigenschapDe resourcesleutel van uw Taalservice Regel 92
billingEigenschapHet facturerings-eindpunt voor uw Language Service-resource. https://westus.api.cognitive.microsoft.com/text/analytics/v2.1Omdat de apiKey en het facturerings-eindpunt zijn ingesteld als onderdeel van de Kubernetes-orchestrationdefinitie, hoeft de websitecontainer deze niet te weten of door te geven als onderdeel van de aanvraag. De websitecontainer verwijst naar de taaldetectiecontainer met de orchestratornaam
language.Laad het orchestration-definitiebestand voor dit voorbeeld vanuit de map waarin u de hebt gemaakt en
language.ymlopgeslagen.kubectl apply -f language.ymlHet antwoord is:
service "language-frontend" created deployment.apps "language-frontend" created service "language" created deployment.apps "language" created
Externe IP's van containers op halen
Controleer voor de twee containers of de language-frontend services en worden uitgevoerd en haal het externe language 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 voor de service wordt weergegeven als in behandeling, moet u de opdracht opnieuw uitvoeren totdat het IP-adres wordt weergegeven EXTERNAL-IP 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 functie Try it 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 de volgende indeling: http://<external-ip>/helloworld . De Engelse cultuurtekst van helloworld wordt voorspeld als English .
Resources opschonen
Wanneer u klaar bent met het cluster, verwijdert u de Azure-resourcegroep.
az group delete --name cogserv-container-rg