启动您的 AI 之旅:使用 Azure AI 和 AKS 构建您的第一个智能应用(第二部分)
在上篇文章中,我们创建了一个利用 Azure AI Vision 分析图像并提取数据的智能应用程序。我们开发了一个 API 来对上传的图像执行光学字符识别 (OCR) 并在本地测试了该 API。
在上一篇文章中,我们探讨了如何创建一个智能应用程序,该应用程序利用Azure AI Vision的计算机视觉服务来分析图像并提取数据。我们学习了如何构建一个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中必须是唯一的,并符合这些规则。
上述命令在computer-vision
资源组下创建了一个Azure容器注册表 (ACR),使用基本SKU。此ACR是您在Azure中存储容器镜像的安全私有仓库。
接下来,使用以下命令登录注册表
az acr login -n <name-of-azure-container-registry>
上述az acr login
命令允许您安全地进行身份验证并访问指定的ACR,而无需每次都提供Azure凭据。
现在,在您的终端中运行以下命令。它将显示用于登录并与ACR交互以推送和拉取容器镜像的端点URL。
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集群在将工作负载部署到集群时从指定的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
上述命令检索与AKS集群通信所需的凭据和上下文信息,供kubectl
使用。
我们仍然需要定义用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集群。
首先,将终端切换到deployment文件夹
cd Deployment
然后,运行以下命令来创建或更新deployment.yml文件中定义的Kubernetes资源
kubectl apply -f deployment.yml
使用以下代码,根据service.yml文件中定义的配置在Kubernetes集群中创建Kubernetes服务资源
kubectl apply -f service.yml
应用了deployment.yml和service.yml文件中包含的资源定义和服务配置后,在Azure Portal中打开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
在集群内部访问,并通过外部IP 20.121.76.153
在端口80(映射到端口30936)外部访问。
注意:您的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的众多服务,并发现更多增强您的智能应用程序的方法。