65.9K
CodeProject 正在变化。 阅读更多。
Home

启动您的 AI 之旅:使用 Azure AI 和 AKS 构建您的第一个智能应用(第二部分)

starIconstarIconstarIconstarIconstarIcon

5.00/5 (1投票)

2023年10月16日

CPOL

6分钟阅读

viewsIcon

5319

在上篇文章中,我们创建了一个利用 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.ymlservice.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_KEYVISION_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.ymlservice.yml文件中包含的资源定义和服务配置后,在Azure Portal中打开aks-intelligent-app Kubernetes服务,在侧边栏的Kubernetes资源下选择工作负载,并找到名为intelligent-app的部署。其状态必须为“就绪 1/1”。如果遇到此状态问题,请查看这些故障排除资源

The Workloads section of the aks-intelligent-app in Azure Portal. The Deployments tab is visible with the "intelligent-app" deployment outlined.

在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,然后单击发送

A POST request in Postman to 20.121.76.153, the key set to "file" and the value set to "sample1.png." The JSON body is previewed at the bottom.

如我们所见,我们的智能应用程序已成功部署到AKS并在云上按预期运行。

后续步骤

在这两部分文章中,我们探讨了如何创建一个智能应用程序,该应用程序利用Azure AI for Vision分析图像并提取数据。我们学习了如何构建一个Python Web API以对上传的图像执行OCR,并随后通过Azure Kubernetes服务部署此API。

除了OCR和图像分析,您还可以继续探索Azure的众多服务,并通过将各种实际用途应用于您的智能应用程序,进一步尝试Azure AI和AKS,包括自然语言处理、语音识别和合成、客户反馈情绪分析以及自动化内容审核。

前往本系列的下一部分,继续探索Azure的众多服务,并发现更多增强您的智能应用程序的方法。

© . All rights reserved.