目录
在Azure Kubernetes服务(AKS)上部署智能应用
在上一篇文章中,我们探讨了如何创建智能应用,该应用利用Azure AI视觉的计算机视觉服务来分析图像和提取数据。我们学习了如何构建Python Web API以对上传的图像执行OCR,然后随后在本地测试此API。
在本文中,我们将使用Azure Kubernetes 服务(AKS)在Azure上的云中开发、发布和维护我们的应用。
让我们开始吧!
先决条件
若要按照本教程操作,请确保已完成快速启动AI之旅:使用Azure AI和AKS构建第一个智能应用(1)
将容器镜像推送到Azure容器注册表(ACR)
首先,打开CLI或终端并键入以下命令:
az login
按照浏览器上显示的说明输入Azure凭据。
通过身份验证后,将在本地环境和Azure之间启动安全连接。此过程授予你对云服务和资源的访问权限。
接下来,在终端中键入以下命令,以设置新的Azure容器注册表(ACR)来存储容器镜像:
az acr create --resource-group computer-vision --name <name-of-azure-container-registry> --sku Basic
请记住替换<name-of-azure-container-registry>为容器注册表名称。该名称在Azure中必须是唯一的,并符合这些规则。
上述命令在基本SKU 下的computer-vision资源组中创建 Azure容器注册表(ACR)。此ACR是用于在Azure中存储容器镜像的安全专用存储库。
接下来,使用以下命令登录注册表:
az acr login -n <name-of-azure-container-registry>
通过上述az acr login命令,可以安全地进行身份验证和访问指定的ACR,而无需每次都提供Azure凭据。
现在,在终端中运行以下命令。它将显示要登录的终结点URL,并与ACR交互,以推送和拉取容器镜像。
az acr show --name <name-of-azure-container-registry> --query loginServer --output table
此命令返回以下终结点URL:
Result
----------------------------------
<name-of-azure-container-registry>.azurecr.io
现在,运行以下命令以显示所有容器镜像、其存储库、标记和大小:
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
intelligent-app latest a7bf9f753617 16 hours ago 197MB
标记是将Docker镜像推送到远程注册表(如Azure容器注册表)所必需的。它们还可以让您区分同一镜像的不同版本,并上传或下载所需的镜像。
运行以下命令以标记Docker镜像:
docker tag intelligent-app <name-of-azure-container-registry>.azurecr.io/intelligent-app:v1
然后,再次运行docker images命令以检查标记的镜像:
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
intelligent-app latest c52168039265 About a minute ago 197MB
<name-of-azure-container-registry>.azurecr.io/intelligent-app v1 c52168039265 About a minute ago 197MB
现在运行以下命令,以便Docker可以安全地将镜像上传到Azure容器注册表:
docker push <name-of-azure-container-registry>.azurecr.io/intelligent-app:v1
将镜像部署到容器注册表后,AKS可以在部署期间访问它。
在Azure Kubernetes服务(AKS)上部署智能应用
在将智能应用部署到AKS之前,我们需要预配AKS群集并定义Kubernetes清单。
若要预配AKS群集以托管应用程序,请为群集指定所需的配置,例如节点数、节点大小和网络选项。但首先,下载并安装Kubernetes命令行工具(kubectl),这是一个实现Azure身份验证的客户端凭据插件:
az aks install-cli
如果您使用的是Linux,请查看本教程。然后运行以下命令:
sudo az aks install-cli
接下来,在终端中运行以下命令,以启用对Azure中Microsoft.Network命名空间提供的与网络相关的资源和服务的访问:
az provider register --namespace Microsoft.Network
现在,我们必须创建一个AKS群集。运行以下命令,创建computer-vision资源组中命名为aks-intelligent-app的AKS群集。
az aks create --resource-group computer-vision --name aks-intelligent-app --node-count 1 --generate-ssh-keys
上面的命令指定目标资源组:computer-vision。节点池配置了一个虚拟机(VM),并自动生成用于安全节点访问的安全外壳(SSH)密钥。
接下来,运行以下命令,通过将AKS群集附加到ACR来更新创建的AKS群集。这样做允许AKS群集在将工作负载部署到群集时从指定的ACR拉取容器镜像。
az aks update -n aks-intelligent-app -g computer-vision --attach-acr <name-of-azure-container-registry>
然后,运行以下命令,将kubectl配置为使用computer-vision资源组中的AKS群集。
az aks get-credentials --resource-group computer-vision --name aks-intelligent-app
上述命令检索kubectl与AKS群集通信所需的凭据和上下文信息。
我们仍然需要定义用YAML编写的Kubernetes清单,描述应用程序部署的所需状态,包括容器、网络和扩展规则。我们将准备这些清单(包括部署和服务配置),以定义应如何部署和公开应用程序。
首先,在根文件夹中创建一个名为 Deployment 的文件夹。
注:在本例中,根文件夹是初学者项目模板的/Microsoft_Series17-18_Code/intelligent-app-before文件夹。
然后,在Deployment文件夹中创建两个文件:deployment.yml和service.yml。
将以下配置添加到deployment.yml文件,将<name-of-azure-container-registry>占位符替换为注册表的名称:
apiVersion: apps/v1
kind: Deployment
metadata:
name: intelligent-app
spec:
replicas: 1
selector:
matchLabels:
app: intelligent-app
template:
metadata:
labels:
app: intelligent-app
spec:
nodeSelector:
kubernetes.io/os: linux
containers:
- name: intelligent-app
image: <name-of-azure-container-registry>.azurecr.io/intelligent-app:v1
resources:
limits:
memory: 512Mi
cpu: "1"
requests:
memory: 256Mi
cpu: "0.2"
ports:
- containerPort: 5000
env:
- name: FLASK_DEBUG
value: "1"
- name: VISION_KEY
value: <THE-KEY-1-VALUE-FROM-YOUR-AZURE-AI-SERVICE>
- name: VISION_ENDPOINT
value: <THE-ENDPOINT-VALUE-FROM-YOUR-AZURE-AI-SERVICE>
此外,请根据Azure AI实例的API密钥和终结点编辑上述VISION_KEY和VISION_ENDPOINT环境变量。
然后,将以下配置添加到service.yml文件:
apiVersion: v1
kind: Service
metadata:
name: intelligent-app-service
spec:
type: LoadBalancer
ports:
- protocol: TCP
port: 80
targetPort: 5000
name: port5000
selector:
app: intelligent-app
现在,我们将使用kubectl部署我们的应用程序。应用Kubernetes清单会创建必要的资源,并将容器化应用程序部署到AKS群集。
首先,将终端更改为部署文件夹:
cd Deployment
然后,执行以下命令,创建或更新deployment.yml文件中定义的Kubernetes资源:
kubectl apply -f deployment.yml
使用以下代码根据service.yml文件中定义的配置在Kubernetes集群中创建Kubernetes服务资源:
kubectl apply -f service.yml
应用deployment.yml 和 service.yml 文件中包含的资源定义和服务配置后,在Azure门户中打开aks-intelligent-app Kubernetes服务,在边栏上的Kubernetes资源下选择“工作负载”,然后找到名为intelligent-app的部署。它必须具有“就绪1/1”状态。如果遇到此状态的问题,请查看这些故障排除资源。
在AKS上测试智能应用
若要在AKS上测试应用,请先运行以下命令:
kubectl get services
此命令列出服务及其相应的详细信息,包括服务名称、群集IP地址、外部IP和端口。
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
intelligent-app-service LoadBalancer 10.0.77.60 20.121.76.153 80:30936/TCP 47s
kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 14m
上面的输出显示了一个名为intelligent-app-service的Kubernetes服务的类型设置为LoadBalancer。可以使用群集IP 10.0.77.60从群集内部访问它,并通过端口80(映射到端口30936)上的外部IP 20.121.76.153从外部访问它。
注意:您的IP地址集会有所不同。使用Postman进行测试时,请记住使用您唯一的外部IP地址。
若要测试已部署的应用,请转到Postman,将URL替换为刚刚部署的Kubernetes服务的外部IP,然后单击“发送”:
正如我们所看到的,我们的智能应用已成功部署到AKS,并按预期在云上运行。
后续步骤
在这篇由两部分组成的文章中,我们探讨了如何创建利用Azure AI for Vision来分析图像和提取数据的智能应用。我们学习了如何生成Python Web API以对上传的图像执行OCR,然后通过Azure Kubernetes服务部署此API。
除了OCR和图像分析之外,还可以继续探索Azure的许多服务,并通过将各种实际用途应用于智能应用来进一步试验Azure AI和AKS,包括自然语言处理、语音识别和合成、客户反馈的情绪分析以及自动内容审核。
请转到本系列的下一部分,继续探索Azure的大量服务,并发现增强智能应用的更多方法。
https://www.codeproject.com/Articles/5370125/Jumpstart-Your-AI-Journey-Building-Your-First-Inte