Delen via


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.

Een diagram met het conceptuele idee van het uitvoeren van een container in Kubernetes

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.

  1. Aanmelden bij de Azure CLI

    az login
    
  2. 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
    
  3. Maak uw eigen Azure Container Registry met de indeling van uw naam, registrybijvoorbeeld pattyregistry. 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"
    }
    
  4. 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

  1. 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.

  2. 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.

  3. 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 de az 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

  1. 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
    
  2. 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
    
  3. 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.

  1. 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 het password 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"
    }
    
  2. 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.

  3. 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

  1. 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.

  2. 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.

  1. 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
    
  2. Kopieer het volgende bestand en geef het een language.ymlnaam. Het bestand bevat een service sectie en een deployment sectie voor de twee containertypen, de language-frontend websitecontainer en de language 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
    
  3. 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 eigenschap
    Installatiekopieënlocatie voor de front-endinstallatiekopieën in uw Container Registry
    <container-registry-name>.azurecr.io/language-frontend:v1
    Regel 44
    name eigenschap
    Container Registry-geheim voor de installatiekopieën, aangeduid <client-secret> als in een vorige sectie.
  4. 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 eigenschap
    Installatiekopieënlocatie voor de taalinstallatiekopieën in uw Container Registry
    <container-registry-name>.azurecr.io/language:1.1.006770001-amd64-preview
    Regel 95
    name eigenschap
    Container Registry-geheim voor de installatiekopieën, aangeduid <client-secret> als in een vorige sectie.
    Regel 91
    apiKey eigenschap
    Uw taalserviceresourcesleutel
    Regel 92
    billing eigenschap
    Het 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.

  5. Laad het indelingsdefinitiebestand voor dit voorbeeld vanuit de map waarin u het language.ymlhebt 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.

Een schermopname van de documentatie van de container

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

Volgende stappen

Azure AI-containers