教程 - 将应用程序部署到 Azure Kubernetes 服务 (AKS)

Kubernetes 为容器化应用程序提供一个分布式平台。 你生成自己的应用程序和服务并将其部署到 Kubernetes 群集中,让群集管理可用性和连接性。

在本教程中(第 4 部分,共 7 部分),你要将示例应用程序会部署到 Kubernetes 群集中。 学习如何:

  • 更新 Kubernetes 清单文件。
  • 在 Kubernetes 中运行应用程序。
  • 测试应用程序。

提示

借助 AKS,可以使用以下方法进行配置管理:

  • GitOps:让群集状态的声明可以自动应用于群集。 若要了解如何使用 GitOps 通过 AKS 群集部署应用程序,请参阅 [GitOps with Flux v2][gitops-flux-tutorial] 教程中的 [Azure Kubernetes 服务群集先决条件][gitops-flux-tutorial-aks]。

  • DevOps:让你可以利用持续集成 (CI) 和持续交付 (CD) 进行生成、测试和部署。 若要查看如何使用 DevOps 通过 AKS 群集部署应用程序的示例,请参阅使用 Azure Pipelines 生成并部署到 AKS用于部署到 Azure Kubernetes 服务的 GitHub Actions

开始之前

在上一教程中,你已将应用程序打包到容器映像中、将映像更新到 Azure 容器注册表并且创建了 Kubernetes 群集。 必须先预创建 aks-store-quickstart.yaml Kubernetes 清单文件,然后才能完成本教程。 此文件是从教程 1 - 准备 AKS 应用程序的应用程序源代码中下载的。

本教程需要 Azure CLI 2.0.53 或更高版本。 使用 az --version 检查版本。 若要安装或升级,请参阅安装 Azure CLI

更新清单文件

在这些教程中,你的 Azure 容器注册表 (ACR) 实例存储示例应用程序的容器映像。 若要部署此应用程序,必须更新 Kubernetes 清单文件中的映像名称,使之包括你的 ACR 登录服务器名称。

  1. 使用 az acr list 命令获取登录服务器地址,并查询登录服务器。

    az acr list --resource-group myResourceGroup --query "[].{acrLoginServer:loginServer}" --output table
    
  2. 确保你位于所克隆的 aks-store-demo 目录中,然后使用文本编辑器打开 aks-store-quickstart.yaml 清单文件。

  3. 通过将 ghcr.io/azure-samples 替换为 ACR 登录服务器名称来更新容器的 image 属性。

    containers:
    ...
    - name: order-service
      image: <acrName>.azurecr.cn/aks-store-demo/order-service:latest
    ...
    - name: product-service
      image: <acrName>.azurecr.cn/aks-store-demo/product-service:latest
    ...
    - name: store-front
      image: <acrName>.azurecr.cn/aks-store-demo/store-front:latest
    ...
    
  4. 保存并关闭该文件。

运行应用程序

  1. 使用 kubectl apply 命令部署应用程序,该命令会分析清单文件并创建所定义的 Kubernetes 对象。

    kubectl apply -f aks-store-quickstart.yaml
    

    下面的示例输出表明已成功在 AKS 群集中创建了资源:

    statefulset.apps/rabbitmq created
    configmap/rabbitmq-enabled-plugins created
    service/rabbitmq created
    deployment.apps/order-service created
    service/order-service created
    deployment.apps/product-service created
    service/product-service created
    deployment.apps/store-front created
    service/store-front created
    
  2. 使用 kubectl get pods 命令查看 Pod,来检查部署是否成功。

    kubectl get pods
    

测试应用程序

应用程序运行时,Kubernetes 服务将向 Internet 公开应用程序前端。 此过程可能需要几分钟才能完成。

命令行

  1. 使用带有 --watch 参数的 kubectl get service 命令来监视进度。

    kubectl get service store-front --watch
    

    最初,store-front 服务的 EXTERNAL-IP 显示为 <pending>:

    store-front   LoadBalancer   10.0.34.242   <pending>     80:30676/TCP   5s
    
  2. EXTERNAL-IP 地址从 <pending> 更改为公共 IP 地址时,请使用 CTRL-C 停止 kubectl 监视进程。

    以下示例输出显示向服务分配了有效的公共 IP 地址:

    store-front   LoadBalancer   10.0.34.242   52.179.23.131   80:30676/TCP   67s
    
  3. 通过打开 Web 浏览器并导航到服务的外部 IP 地址来查看应用程序的运作情况:http://<external-ip>

    AKS 应用商店示例应用程序的屏幕截图。

如果应用程序未加载,可能是因为映像注册表存在授权问题。 若要查看容器的状态,请使用 kubectl get pods 命令。 如果无法拉取容器映像,请参阅使用 Azure 容器注册表从 Azure Kubernetes 服务进行身份验证

Azure 门户

导航到 Azure 门户以查找部署信息。

  1. 导航到 AKS 群集资源。

  2. 在服务菜单的“Kubernetes 资源”下,选择“服务和入口”。

  3. 复制 store-front 服务列中显示的外部 IP。

  4. 将 IP 粘贴到浏览器中以访问商店页面。

    AKS 应用商店示例应用程序的屏幕截图。

清理资源

由于你已验证应用程序的功能,现在可以从应用程序中删除群集。 我们将在下一篇教程中再次部署该应用程序。

  1. 使用 kubectl delete 命令停止和删除容器实例和资源。

    kubectl delete -f aks-store-quickstart.yaml
    
  2. 使用 kubectl get pods 命令检查是否已删除所有应用程序 Pod。

    kubectl get pods
    

后续步骤

在本教程中,你已在 AKS 中将示例 Azure 应用程序部署到 Kubernetes 群集。 你已了解如何执行以下操作:

  • 更新 Kubernetes 清单文件。
  • 在 Kubernetes 中运行应用程序。
  • 测试应用程序。

下一教程介绍如何在 Kubernetes 中使用 PaaS 服务处理有状态工作负荷。