Aracılığıyla paylaş


dil algılama kapsayıcısını Azure Kubernetes Service dağıtma

Dil algılama kapsayıcısını dağıtmayı öğrenin. Bu yordamda yerel Docker kapsayıcılarını oluşturma, kapsayıcıları kendi özel kapsayıcı kayıt defterinize gönderme, kapsayıcıyı kubernetes kümesinde çalıştırma ve web tarayıcısında test etme işlemleri gösterilir.

Önkoşullar

Bu yordam, yerel olarak yüklenmesi ve çalıştırılması gereken birkaç araç gerektirir. Azure Cloud Shell kullanmayın.

  • Azure aboneliği kullanma. Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.
  • Bu yordamda kullanılan örneği kopyalayabilmeniz için işletim sisteminiz için Git.
  • Azure CLI.
  • Docker altyapısı ve Docker CLI'nın bir konsol penceresinde çalıştığını doğrulayın.
  • kubectl.
  • Doğru fiyatlandırma katmanına sahip bir Azure kaynağı. Tüm fiyatlandırma katmanları bu kapsayıcıyla çalışmaz:
    • Yalnızca F0 veya Standart fiyatlandırma katmanlarına sahip dil kaynağı.
    • S0 fiyatlandırma katmanına sahip Azure AI hizmetleri kaynağı.

Örneği çalıştırma

Bu yordam, dil algılama için Azure AI hizmetleri kapsayıcı örneğini yükler ve çalıştırır. Örnekte biri istemci uygulaması, diğeri de Azure AI hizmetleri kapsayıcısı olmak üzere iki kapsayıcı vardır. Bu görüntülerin ikisini de Azure Container Registry göndereceğiz. Kendi kayıt defterinize eklendikten sonra bu görüntülere erişmek ve kapsayıcıları çalıştırmak için bir Azure Kubernetes Service oluşturun. Kapsayıcılar çalışırken kapsayıcı performansını watch için kubectl CLI'sini kullanın. İstemci uygulamasına bir HTTP isteğiyle erişin ve sonuçları görün.

Kubernetes'te kapsayıcı çalıştırmanın kavramsal fikrini gösteren diyagram

Örnek kapsayıcılar

Örnekte biri ön uç web sitesi için olan iki kapsayıcı görüntüsü vardır. İkinci görüntü, algılanan metin dilini (kültürü) döndüren dil algılama kapsayıcısıdır. İşiniz bittiğinde her iki kapsayıcıya da dış IP'den erişilebilir.

Language-frontend kapsayıcısı

Bu web sitesi, dil algılama uç noktasının isteklerini yapan kendi istemci tarafı uygulamanızla eşdeğerdir. Yordam tamamlandığında, ile http://<external-IP>/<text-to-analyze>bir tarayıcıdaki web sitesi kapsayıcıya erişerek bir karakter dizesinin algılanan dilini elde edersiniz. Bu URL'ye örnek olarak verilmiştir http://132.12.23.255/helloworld!. Tarayıcıdaki sonuç şeklindedir English.

Dil kapsayıcısı

Bu yordamda dil algılama kapsayıcısına tüm dış istekler erişebilir. Kapsayıcı hiçbir şekilde değiştirilmediğinden standart Azure AI hizmetleri kapsayıcıya özgü dil algılama API'sini kullanabilirsiniz.

Bu kapsayıcı için bu API, dil algılamaya yönelik bir POST isteğidir. Tüm Azure AI kapsayıcıları gibi kapsayıcı hakkında da barındırılan Swagger bilgilerinden http://<external-IP>:5000/swagger/index.htmldaha fazla bilgi edinebilirsiniz.

5000 numaralı bağlantı noktası, Azure AI kapsayıcılarıyla kullanılan varsayılan bağlantı noktasıdır.

Azure Container Registry hizmeti oluşturma

Kapsayıcıyı Azure Kubernetes Service dağıtmak için kapsayıcı görüntülerinin erişilebilir olması gerekir. Görüntüleri barındırmak için kendi Azure Container Registry hizmetinizi oluşturun.

  1. Azure CLI'da oturum açma

    az login
    
  2. Bu yordamda oluşturulan her kaynağı tutmak için adlı cogserv-container-rg bir kaynak grubu oluşturun.

    az group create --name cogserv-container-rg --location westus
    
  3. Kendi Azure Container Registry oluşturun ve ardından registrypattyregistrygibi adınızın biçimiyle oluşturun. Adında kısa çizgiler veya altı çizili karakterler kullanmayın.

    az acr create --resource-group cogserv-container-rg --name pattyregistry --sku Basic
    

    loginServer özelliğini almak için sonuçları kaydedin. Bu, daha sonra dosyada kullanılan barındırılan kapsayıcı adresinin language.yml bir parçası olacaktır.

    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. Kapsayıcı kayıt defterinizde oturum açın. Kayıt defterinize görüntü gönderebilmek için önce oturum açmanız gerekir.

    az acr login --name pattyregistry
    

Web sitesi Docker görüntüsü alma

  1. Bu yordamda kullanılan örnek kod, Azure AI kapsayıcıları örnek deposundadır. Örneğin yerel bir kopyasına sahip olmak için depoyu kopyalayın.

    git clone https://github.com/Azure-Samples/cognitive-services-containers-samples
    

    Depo yerel bilgisayarınıza yüklendikten sonra web sitesini \dotnet\Language\FrontendService dizininde bulun. Bu web sitesi, dil algılama kapsayıcısında barındırılan dil algılama API'sini çağıran istemci uygulaması işlevi görür.

  2. Bu web sitesi için Docker görüntüsünü oluşturun. Aşağıdaki komutu çalıştırdığınızda konsolun Dockerfile dosyasının bulunduğu \FrontendService dizininde olduğundan emin olun:

    docker build -t language-frontend -t pattiyregistry.azurecr.io/language-frontend:v1 .
    

    Kapsayıcı kayıt defterinizdeki sürümü izlemek için etiketi gibi v1bir sürüm biçimiyle ekleyin.

  3. Görüntüyü kapsayıcı kayıt defterinize gönderin. Bu birkaç dakika sürebilir.

    docker push pattyregistry.azurecr.io/language-frontend:v1
    

    Hata unauthorized: authentication required alırsanız komutuyla az acr login --name <your-container-registry-name> oturum açın.

    İşlem tamamlandığında sonuçlar şuna benzer olmalıdır:

    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
    

Dil algılama Docker görüntüsü alma

  1. Docker görüntüsünün en son sürümünü yerel makineye çekin. Bu birkaç dakika sürebilir. Bu kapsayıcının daha yeni bir sürümü varsa değerini 1.1.006770001-amd64-preview yeni sürüm olarak değiştirin.

    docker pull mcr.microsoft.com/azure-cognitive-services/language:1.1.006770001-amd64-preview
    
  2. Görüntüyü kapsayıcı kayıt defterinizle etiketleyin. En son sürümü bulun ve daha yeni bir sürümünüz varsa sürümü 1.1.006770001-amd64-preview değiştirin.

    docker tag mcr.microsoft.com/azure-cognitive-services/language pattiyregistry.azurecr.io/language:1.1.006770001-amd64-preview
    
  3. Görüntüyü kapsayıcı kayıt defterinize gönderin. Bu birkaç dakika sürebilir.

    docker push pattyregistry.azurecr.io/language:1.1.006770001-amd64-preview
    

Container Registry kimlik bilgilerini alma

Kapsayıcı kayıt defterinizi bu yordamın ilerleyen bölümlerinde oluşturduğunuz Azure Kubernetes Service bağlamak için gerekli bilgileri almak için aşağıdaki adımlar gereklidir.

  1. Hizmet sorumlusu oluşturun.

    az ad sp create-for-rbac
    

    3<appId>. adımda assignee parametresinin sonuç appId değerini kaydedin. password Sonraki bölümün istemci gizli anahtarı parametresi için öğesini <client-secret>kaydedin.

    {
      "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. Kapsayıcı kayıt defteri kimliğinizi alın.

    az acr show --resource-group cogserv-container-rg --name pattyregistry --query "id" --output table
    

    Sonraki adımda kapsam parametresi değerinin <acrId>çıkışını kaydedin. Şuna benzer:

    /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/cogserv-container-rg/providers/Microsoft.ContainerRegistry/registries/pattyregistry
    

    Bu bölümdeki 3. adım için tam değeri kaydedin.

  3. AKS kümesine kapsayıcı kayıt defterinizde depolanan görüntüleri kullanmak üzere doğru erişimi vermek için bir rol ataması oluşturun. ve <acrId> değerlerini önceki iki adımda toplanan değerlerle değiştirin<appId>.

    az role assignment create --assignee <appId> --scope <acrId> --role Reader
    

Azure Kubernetes Service oluşturma

  1. Kubernetes kümesi oluşturun. Ad parametresi dışındaki tüm parametre değerleri önceki bölümlerden alınıyor. Kim tarafından oluşturulduğunu ve amacını gösteren bir ad seçin, örneğin 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
    

    Bu adım birkaç dakika sürebilir. Sonuç:

    {
      "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"
    }
    

    Hizmet oluşturuldu ancak henüz web sitesi kapsayıcısı veya dil algılama kapsayıcısı yok.

  2. Kubernetes kümesinin kimlik bilgilerini alın.

    az aks get-credentials --resource-group cogserv-container-rg --name patty-kube
    

Düzenleme tanımını Kubernetes hizmetinize yükleme

Bu bölümde Azure Kubernetes Service ile konuşmak için kubectl CLI kullanılır.

  1. Düzenleme tanımını yüklemeden önce kubectl'nin düğümlere erişimi olup olmadığını denetleyin.

    kubectl get nodes
    

    Yanıt şöyle görünür:

    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. Aşağıdaki dosyayı kopyalayın ve olarak adlandırın language.yml. Dosya, web sitesi kapsayıcısı ve deployment algılama kapsayıcısı olmak üzere iki kapsayıcı türü language-frontend için birer service bölüm ve bölüme language sahiptir.

    # 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. Kendi kapsayıcı kayıt defteri görüntü adlarınızı, istemci gizli dizinizi ve Dil hizmeti ayarlarınızı eklemek için aşağıdaki tabloya göre dil ön uç dağıtım satırlarını language.yml değiştirin.

    Dil ön uç dağıtım ayarları Amaç
    Satır 32
    image Özellik
    Container Registry'nizdeki ön uç görüntüsünün görüntü konumu
    <container-registry-name>.azurecr.io/language-frontend:v1
    Satır 44
    name Özellik
    Önceki bölümde olarak <client-secret> adlandırılan görüntü için Container Registry gizli dizisi.
  4. Kendi kapsayıcı kayıt defteri görüntü adlarınızı, istemci gizli dizinizi ve Dil hizmeti ayarlarınızı eklemek için aşağıdaki tabloya göre dil dağıtım satırlarını language.yml değiştirin.

    Dil dağıtım ayarları Amaç
    Satır 78
    image Özellik
    Container Registry'nizdeki dil görüntüsünün görüntü konumu
    <container-registry-name>.azurecr.io/language:1.1.006770001-amd64-preview
    Satır 95
    name Özellik
    Önceki bölümde olarak <client-secret> adlandırılan görüntü için Container Registry gizli dizisi.
    Satır 91
    apiKey Özellik
    Dil hizmeti kaynak anahtarınız
    Satır 92
    billing Özellik
    Dil hizmeti kaynağınız için faturalama uç noktası.
    https://westus.api.cognitive.microsoft.com/text/analytics/v2.1

    apiKey ve faturalama uç noktası Kubernetes düzenleme tanımının bir parçası olarak ayarlandığından, web sitesi kapsayıcısının bunları bilmesi veya isteğin bir parçası olarak geçirmesi gerekmez. Web sitesi kapsayıcısı, düzenleyici adıyla languagedil algılama kapsayıcısına başvurur.

  5. Bu örnek için düzenleme tanımı dosyasını oluşturduğunuz ve kaydettiğiniz klasörden language.ymlyükleyin.

    kubectl apply -f language.yml
    

    Yanıt:

    service "language-frontend" created
    deployment.apps "language-frontend" created
    service "language" created
    deployment.apps "language" created
    

Kapsayıcıların dış IP'lerini alma

İki kapsayıcı için ve language hizmetlerinin language-frontend çalıştığını doğrulayın ve dış IP adresini alın.

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

EXTERNAL-IP Hizmet için beklemede olarak gösteriliyorsa, sonraki adıma geçmeden önce IP adresi gösterilene kadar komutu yeniden çalıştırın.

Dil algılama kapsayıcısını test edin

Bir tarayıcı açın ve önceki bölümden kapsayıcının language dış IP'sine gidin: http://<external-ip>:5000/swagger/index.html. Dil algılama uç noktasını test etmek için API'nin özelliğini kullanabilirsiniz Try it .

Kapsayıcının swagger belgelerini gösteren ekran görüntüsü

İstemci uygulama kapsayıcısını test edin

Aşağıdaki biçimi kullanarak tarayıcıdaki URL'yi kapsayıcının language-frontend dış IP'si olarak değiştirin: http://<external-ip>/helloworld. İngilizce kültür metni helloworld olarak Englishtahmin edilir.

Kaynakları temizleme

Kümeyle işiniz bittiğinde Azure kaynak grubunu silin.

az group delete --name cogserv-container-rg

Sonraki adımlar

Azure AI kapsayıcıları