Azure Kubernetes hizmetine bir dil algılama kapsayıcısı dağıtma
Dil algılama kapsayıcısını dağıtmayı öğrenin. Bu yordam, yerel Docker Kapsayıcıları oluşturma, kapsayıcıları kendi özel kapsayıcı Kayıt defterinize gönderme, kapsayıcıyı bir Kubernetes kümesinde çalıştırma ve bir Web tarayıcısında test etme işlemlerini gösterir.
Önkoşullar
Bu yordam, yüklenmesi ve yerel olarak çalıştırılması gereken çeşitli araçlar gerektirir. Azure Cloud Shell kullanmayın.
- Bir Azure aboneliği kullanın. 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 konsol penceresinde çalışıp çalışmadığını doğrulama.
- kubectl.
- Doğru fiyatlandırma katmanına sahip bir Azure kaynağı. Fiyatlandırma katmanlarının tümü bu kapsayıcı ile çalışmaz:
- Yalnızca F0 veya standart fiyatlandırma katmanlarına sahip dil kaynağı.
- S0 fiyatlandırma katmanı ile bilişsel Hizmetler kaynağı.
Örneği çalıştırma
Bu yordam, dil algılama için bilişsel hizmetler kapsayıcı örneğini yükler ve çalıştırır. Örnek, biri istemci uygulaması, diğeri de bilişsel hizmetler kapsayıcısı için olmak üzere iki kapsayıcı içerir. Bu resimlerin her ikisini de Azure Container Registry göndereceğiz. Kendi kayıt defterinizde olduktan sonra, bu görüntülere erişmek ve kapsayıcıları çalıştırmak için bir Azure Kubernetes hizmeti oluşturun. Kapsayıcılar çalışırken, kapsayıcıların performansını izlemek için kubectl CLI kullanın. İstemci uygulamasına bir HTTP isteğiyle erişin ve sonuçları görüntüleyin.

Örnek kapsayıcılar
Örnek, biri ön uç Web sitesi için olmak üzere iki kapsayıcı görüntülerine sahiptir. İkinci görüntü, metnin algılanan dilini (kültür) döndüren dil algılama kapsayıcısıdır. İşiniz bittiğinde her iki kapsayıcıya dış IP 'den erişilebilir.
Dil ön uç kapsayıcısı
Bu web sitesi, dil algılama uç noktası isteklerini yapan kendi istemci tarafı uygulamanız ile eşdeğerdir. Yordam tamamlandığında, ile bir tarayıcıda Web sitesi kapsayıcısına erişerek bir karakter dizesinin algılanan dilini alırsınız http://<external-IP>/<text-to-analyze> . Bu URL 'ye bir örnek http://132.12.23.255/helloworld! . Tarayıcıdaki sonuç English .
Dil kapsayıcısı
Dil algılama kapsayıcısına, bu özel yordamda, herhangi bir dış istek tarafından erişilebilir. Kapsayıcı, standart bilişsel hizmetler kapsayıcısına özgü dil algılama API 'sinin kullanılabilir olması için hiçbir şekilde değiştirilmedi.
Bu kapsayıcı için bu API, dil algılama için bir POST isteğidir. Tüm bilişsel hizmetler kapsayıcılarında olduğu gibi, barındırılan Swagger bilgileriyle kapsayıcı hakkında daha fazla bilgi edinebilirsiniz http://<external-IP>:5000/swagger/index.html .
Bağlantı noktası 5000, bilişsel hizmetler kapsayıcılarıyla kullanılan varsayılan bağlantı noktasıdır.
Azure Container Registry hizmeti oluşturma
Kapsayıcıyı Azure Kubernetes hizmetine 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.
Azure CLı 'da oturum açın
az logincogserv-container-rgBu yordamda oluşturulan her kaynağı tutan adlı bir kaynak grubu oluşturun.az group create --name cogserv-container-rg --location westusAdınızın biçimiyle kendi Azure Container Registry oluşturun
registry, örneğinpattyregistry. Adda tireler kullanmayın veya karakterlerin altını çizin.az acr create --resource-group cogserv-container-rg --name pattyregistry --sku BasicLoginserver özelliğini almak için sonuçları kaydedin. Bu, daha sonra dosyasında kullanılan barındırılan kapsayıcının adresinin bir parçası olacaktır
language.yml.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" }Kapsayıcı kayıt defterinizde oturum açın. Kayıt defterinize görüntü gönderebilmeniz için önce oturum açmanız gerekir.
az acr login --name pattyregistry
Web sitesi Docker görüntüsünü al
Bu yordamda kullanılan örnek kod, bilişsel hizmetler kapsayıcıları örnekleri deposundadır. Depoyu, örneğin yerel kopyasına sahip olacak şekilde kopyalayın.
git clone https://github.com/Azure-Samples/cognitive-services-containers-samplesDepo yerel bilgisayarınızda olduktan sonra, \dotnet\Language\FrontendService dizininde Web sitesini bulun. Bu web sitesi, dil algılama kapsayıcısında barındırılan dil algılama API 'sini çağıran istemci uygulaması gibi davranır.
Bu web sitesi için Docker görüntüsünü oluşturun. Aşağıdaki komutu çalıştırdığınızda, konsolunun 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 defterinizde sürümü izlemek için etiketi, gibi bir sürüm biçimiyle ekleyin
v1.Görüntüyü kapsayıcı Kayıt defterinize gönderin. Bu birkaç dakika sürebilir.
docker push pattyregistry.azurecr.io/language-frontend:v1Bir
unauthorized: authentication requiredhata alırsanız komutuyla oturum açınaz acr login --name <your-container-registry-name>.İşlem tamamlandığında, sonuçların şuna benzer olması gerekir:
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ünü al
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-previewdaha yeni bir sürüm olarak değiştirin.docker pull mcr.microsoft.com/azure-cognitive-services/language:1.1.006770001-amd64-previewResmi kapsayıcı kayıt defteriyle etiketleyin. En son sürümü bulun ve
1.1.006770001-amd64-previewdaha yeni bir sürüme sahipseniz sürümü değiştirin.docker tag mcr.microsoft.com/azure-cognitive-services/language pattiyregistry.azurecr.io/language:1.1.006770001-amd64-previewGö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 al
Bu yordamda daha sonra oluşturduğunuz Azure Kubernetes hizmeti ile kapsayıcı kayıt defterinizi bağlamak üzere gerekli bilgileri almak için aşağıdaki adımlar gereklidir.
Hizmet sorumlusu oluşturun.
az ad sp create-for-rbacappId3. adımdaki atanan parametrenin sonuç değerini kaydedin<appId>.passwordSonraki bölümün istemci gizli parametresi için öğesini kaydedin<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" }Kapsayıcı kayıt defteri KIMLIĞINIZI alın.
az acr show --resource-group cogserv-container-rg --name pattyregistry --query "id" --o tableKapsam parametre değeri için çıktıyı bir
<acrId>sonraki adımda kaydedin. Şöyle görünür:/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/cogserv-container-rg/providers/Microsoft.ContainerRegistry/registries/pattyregistry- adım için tam değeri bu bölümde saklayın.
AKS kümesine yönelik doğru erişimi, kapsayıcı kayıt defterinizde depolanan görüntüleri kullanmak üzere vermek için, bir rol ataması oluşturun.
<appId>Ve<acrId>değerlerini önceki iki adımda toplanan değerlerle değiştirin.az role assignment create --assignee <appId> --scope <acrId> --role Reader
Azure Kubernetes hizmeti oluşturma
Kubernetes kümesi oluşturun. Tüm parametre değerleri, ad parametresi dışında önceki bölümden oluşur. Kendisini kimin oluşturduğunu ve bunun amacını belirten bir ad seç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-keysBu 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 Web sitesi kapsayıcısı veya dil algılama kapsayıcısı henüz yok.
Kubernetes kümesinin kimlik bilgilerini alın.
az aks get-credentials --resource-group cogserv-container-rg --name patty-kube
Kubernetes hizmetinize Orchestration tanımını yükleyin
Bu bölümde, Azure Kubernetes hizmeti ile konuşmak için kubectl CLI kullanılmaktadır.
Orchestration tanımını yüklemeden önce, kubectl 'nin düğümlere erişimi olup olmadığını denetleyin.
kubectl get nodesYanı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.11Aşağıdaki dosyayı kopyalayın ve adlandırın
language.yml. Dosyada birservicebölüm vedeploymenther biri iki kapsayıcı türü,language-frontendWeb sitesi kapsayıcısı ve algılama kapsayıcısı için bir bölüm bulunurlanguage.# 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: falselanguage.ymlKendi kapsayıcı kayıt defteri görüntü adlarınızı, istemci gizli anahtarı ve dil hizmeti ayarlarınızı eklemek için aşağıdaki tabloya göre dil ön uç dağıtım hatlarını değiştirin.Dil ön uç dağıtım ayarları Amaç Satır 32
imageözelliðiContainer Registry ön uç görüntüsünün görüntü konumu <container-registry-name>.azurecr.io/language-frontend:v1Satır 44
nameözelliðiResim için, önceki bölümde olduğu gibi bilinen gizli dizi Container Registry <client-secret>.language.ymlKendi kapsayıcı kayıt defteri görüntü adlarınızı, istemci gizli anahtarı ve dil hizmeti ayarlarınızı eklemek için aşağıdaki tabloya göre dil dağıtım çizgilerini değiştirin.Dil dağıtım ayarları Amaç Satır 78
imageözelliðiContainer Registry dil görüntüsünün görüntü konumu <container-registry-name>.azurecr.io/language:1.1.006770001-amd64-previewSatır 95
nameözelliðiResim için, önceki bölümde olduğu gibi bilinen gizli dizi Container Registry <client-secret>.Satır 91
apiKeyözelliðiDil hizmeti kaynak anahtarınız Satır 92
billingözelliðiDil hizmeti kaynağınız için faturalandırma uç noktası. https://westus.api.cognitive.microsoft.com/text/analytics/v2.1Apikey ve faturalandırma uç noktası Kubernetes Orchestration tanımının bir parçası olarak ayarlandığı için, Web sitesi kapsayıcısının bu ilgili bilgileri bilmeleri veya isteğin bir parçası olarak iletilmesi gerekmez. Web sitesi kapsayıcısı, Orchestrator adına göre dil algılama kapsayıcısını ifade eder
language.Oluşturduğunuz ve kaydettiğiniz klasörden bu örnek için Orchestration tanım dosyasını yükleyin
language.yml.kubectl apply -f language.ymlYanıt:
service "language-frontend" created deployment.apps "language-frontend" created service "language" created deployment.apps "language" created
Kapsayıcılardan dış IP 'Leri al
İki kapsayıcı için, language-frontend ve language hizmetlerinin ç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-IPHizmeti için bekliyor 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 etme
Bir tarayıcı açın ve önceki bölümden kapsayıcının dış IP adresine gidin language : http://<external-ip>:5000/swagger/index.html . Try itDil algılama uç noktasını test etmek IÇIN API 'nin özelliğini kullanabilirsiniz.

İstemci uygulama kapsayıcısını test etme
Tarayıcıdaki URL 'YI language-frontend aşağıdaki biçimi kullanarak kapsayıcının dış IP 'sine değiştirin: http://<external-ip>/helloworld . ' Nin Ingilizce kültür metni helloworld olarak tahmin edilir English .
Kaynakları temizleme
Küme ile işiniz bittiğinde Azure kaynak grubunu silin.
az group delete --name cogserv-container-rg