教程:更新由 Azure Arc 启用的 AKS 中的应用程序

适用于:Azure Stack HCI 22H2 上的 AKS、Windows Server 上的 AKS

使用 Arc 启用的 AKS 在 Kubernetes 中部署应用程序后,可以通过指定新的容器映像或映像版本来更新该应用程序。 应该让更新分阶段进行,使得只有一部分部署会同时更新。 借助这种暂存更新,可以让应用程序在更新期间继续运行。 如果发生部署故障,还可以利用它的回滚机制。

本教程的第 6 部分(共 7 部分)介绍了如何更新示例 Azure 投票应用。 将了解如何执行以下操作:

  • 更新前端应用程序代码
  • 创建更新的容器映像
  • 向 Azure 容器注册表推送容器映像
  • 部署更新的容器映像

开始之前

在前面的教程中,你学习了如何:

  • 将应用程序打包到容器映像中,并将映像上传到 Azure 容器注册表。
  • 在 Azure Stack HCI 上创建 Kubernetes 群集,并将应用程序部署到群集。
  • 克隆应用程序存储库,其中包括应用程序源代码和可以在本教程中使用的预创建的 Docker Compose 文件。

验证是否已创建存储库的克隆,并将目录更改到克隆的目录中。 如果尚未完成这些步骤,请先阅读教程 1 - 创建容器映像

本教程要求运行 Azure CLI 2.0.53 或更高版本。 运行 az --version 即可查找版本。 如果需要进行安装或升级,请参阅安装 Azure CLI

更新应用程序

本部分介绍如何对示例应用程序进行更改,然后更新已部署到 AKS 群集的版本。 确保在克隆的 azure-voting-app-redis 目录中操作。 可在 azure-vote 目录中找到示例应用程序的源代码。 使用编辑器(如记事本)打开 config_file.cfg 文件:

notepad azure-vote/azure-vote/config_file.cfg

将 和 VOTE2VALUE 的值VOTE1VALUE更改为不同的值,例如颜色。 以下示例显示更新的值:

# UI Configurations
TITLE = 'Azure Voting App'
VOTE1VALUE = 'Blue'
VOTE2VALUE = 'Purple'
SHOWHOST = 'false'

保存并关闭该文件。

更新容器映像

若要重新创建前端映像并测试更新的应用程序,请使用 docker-compose。 参数 --build 用于重新创建应用程序映像:

docker-compose up --build -d

在本地测试应用程序

若要验证已更新的容器映像是否显示所做的更改,请打开一个本地 Web 浏览器并访问 http://localhost:8080

屏幕截图,显示已更新的容器映像 Azure 投票应用的示例,该应用在本地运行并在本地 Web 浏览器中打开

config_file.cfg 中提供的更新值显示在正在运行的应用程序中。

标记并推送映像

若要正确使用更新的映像,请使用Azure 容器注册表实例的登录服务器名称标记 azure-vote-front 映像。 运行 az acr list 命令,获取登录服务器名称:

az acr list --resource-group myResourceGroup --query "[].{acrLoginServer:loginServer}" --output table

使用 docker tag 标记映像。 将 替换为 <acrLoginServer> 容器注册表登录服务器名称或公共注册表主机名,并将映像版本更新为 v2,如下所示:

docker tag mcr.microsoft.com/azuredocs/azure-vote-front:v1 <acrLoginServer>/azure-vote-front:v2

现在,请使用 docker push 将映像上传到注册表。 将 <acrLoginServer> 替换为 Azure 容器注册表的登录服务器名称。

注意

如果在推送到容器注册表时遇到问题,请确保仍登录。 使用在 创建 Azure 容器注册表步骤中创建的 Azure 容器注册表的名称运行 az acr login 命令。 例如,az acr login --name <azure container registry name>

docker push <acrLoginServer>/azure-vote-front:v2

部署更新的应用程序

为了提供最长运行时间,必须运行应用程序 Pod 的多个实例。 使用 kubectl get pods 命令验证正在运行的前端实例的数目:

$ kubectl get pods

NAME                               READY     STATUS    RESTARTS   AGE
azure-vote-back-217588096-5w632    1/1       Running   0          10m
azure-vote-front-233282510-b5pkz   1/1       Running   0          10m
azure-vote-front-233282510-dhrtr   1/1       Running   0          10m
azure-vote-front-233282510-pqbfk   1/1       Running   0          10m

如果没有多个前端 Pod,请缩放 azure-vote-front 部署,如下所示:

kubectl scale --replicas=3 deployment/azure-vote-front

若要更新应用程序,请使用 kubectl set 命令。 使用容器注册表的登录服务器或主机名更新 <acrLoginServer>,并指定 v2 应用程序版本:

kubectl set image deployment azure-vote-front azure-vote-front=<acrLoginServer>/azure-vote-front:v2

若要监视部署,请使用 kubectl get pod 命令。 部署更新的应用程序后,将终止 Pod,并使用新的容器映像重新创建:

kubectl get pods

以下示例输出显示,在部署进行时,Pod 正在终止,新实例正在运行:

$ kubectl get pods

NAME                               READY     STATUS        RESTARTS   AGE
azure-vote-back-2978095810-gq9g0   1/1       Running       0          5m
azure-vote-front-1297194256-tpjlg  1/1       Running       0          1m
azure-vote-front-1297194256-tptnx  1/1       Running       0          5m
azure-vote-front-1297194256-zktw9  1/1       Terminating   0          1m

测试更新的应用程序

若要查看更新的应用程序,请先获取 azure-vote-front 服务的外部 IP 地址:

kubectl get service azure-vote-front

接下来,请打开 Web 浏览器并访问服务的 IP 地址:

屏幕截图显示了在本地 Web 浏览器中打开的 Kubernetes 群集中运行的已更新映像 Azure 投票应用的示例。

后续步骤

在本教程中,你更新了一个应用程序,并在 Kubernetes 群集中推出了此更新。 你已了解如何执行以下操作:

  • 更新前端应用程序代码
  • 创建更新的容器映像
  • 向 Azure 容器注册表推送容器映像
  • 部署更新的容器映像

请继续学习下一教程,了解如何将群集升级到 Kubernetes 的新版本。