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.
Ö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.html
daha 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.
Azure CLI'da oturum açma
az login
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
Kendi Azure Container Registry oluşturun ve ardından
registry
pattyregistry
gibi 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" }
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
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.
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
v1
bir sürüm biçimiyle ekleyin.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 komutuylaaz 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
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
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
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.
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" }
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.
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
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.
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.
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
Aşağıdaki dosyayı kopyalayın ve olarak adlandırın
language.yml
. Dosya, web sitesi kapsayıcısı vedeployment
algılama kapsayıcısı olmak üzere iki kapsayıcı türülanguage-frontend
için birerservice
bölüm ve bölümelanguage
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
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
ÖzellikContainer 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.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
ÖzellikContainer 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
ÖzellikDil hizmeti kaynak anahtarınız Satır 92
billing
ÖzellikDil 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
language
dil algılama kapsayıcısına başvurur.Bu örnek için düzenleme tanımı dosyasını oluşturduğunuz ve kaydettiğiniz klasörden
language.yml
yü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
.
İ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 English
tahmin edilir.
Kaynakları temizleme
Kümeyle işiniz bittiğinde Azure kaynak grubunu silin.
az group delete --name cogserv-container-rg