你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用 Kubernetes 工具升级间接连接的已启用 Azure Arc 的数据控制器

本文介绍如何使用 Kubernetes 工具升级间接连接的已启用 Azure Arc 的数据控制器。

在数据控制器升级期间,自定义资源定义(CRD)和容器等部分数据控制平面可能会升级。 升级数据控制器不会导致数据服务(SQL 托管实例或 PostgreSQL 服务器)停机。

本文将应用 .yaml 文件以执行以下操作:

  1. 创建用于运行升级的服务帐户。
  2. 升级启动程序。
  3. 升级数据控制器。

注意

一些数据服务层级和模式已经是正式发布版,有些则以预览版提供。 如果在同一数据控制器上安装正式发布版和预览版服务,则无法就地升级。 若要升级,请删除所有非正式发布版数据库实例。 可以在发行说明中查找正式发布版和预览版服务的列表。

先决条件

在开始升级数据控制器之前,需要:

  • 连接到 Kubernetes 群集并进行身份验证
  • 已选择现有 Kubernetes 上下文

需要一个具有 imageTag: v1.0.0_2021-07-30 或更高版本的间接连接的数据控制器。

安装工具

若要使用 Kubernetes 工具升级数据控制器,需要安装 Kubernetes 工具。

本文中的示例使用 kubectl,但如果你熟悉 Kubernetes 仪表板、oc 或等其他 Kubernetes 工具和 Kubernetes yaml/json,也可通过这些工具使用类似方法。

安装 kubectl 工具

查看可用映像并选择版本

使用以下命令拉取数据控制器的可用映像列表:

az arcdata dc list-upgrades --k8s-namespace <namespace>

上述命令返回如以下示例所示的输出:

Found 2 valid versions.  The current datacontroller version is <current-version>.
<available-version>
...

升级数据控制器

本部分演示如何升级间接连接的数据控制器。

注意

一些数据服务层级和模式已经是正式发布版,有些则以预览版提供。 如果在同一数据控制器上安装正式发布版和预览版服务,则无法就地升级。 若要升级,请删除所有非正式发布版数据库实例。 可以在发行说明中查找正式发布版和预览版服务的列表。

有关支持的升级路径,请参阅升级已启用 Azure Arc 的数据服务

升级

在开始升级数据控制器之前,需要连接到 Kubernetes 群集并向其进行身份验证,并选择一个现有的 Kubernetes 上下文。

创建用于运行升级的服务帐户

重要

需要 Kubernetes 权限来创建服务帐户、角色绑定、群集角色、群集角色绑定,以及授予服务帐户的所有 RBAC 权限。

保存 arcdata-deployer.yaml 的副本,并将文件中的占位符 {{NAMESPACE}} 替换为数据控制器的命名空间,例如:arc。 运行以下命令,使用编辑后的文件创建部署程序服务帐户。

kubectl apply --namespace arc -f arcdata-deployer.yaml

升级启动程序

以下命令创建用于升级启动程序和相关 Kubernetes 对象的作业。

重要

以下命令中的 yaml 文件默认为 mcr.microsoft.com/arcdata。 请保存 yaml 文件的副本并在必要时将其更新为使用不同的注册表/存储库。

kubectl apply --namespace arc -f https://raw.githubusercontent.com/microsoft/azure_arc/main/arc_data_services/upgrade/yaml/bootstrapper-upgrade-job.yaml

升级数据控制器

以下命令修补映像标记以升级数据控制器。

kubectl apply --namespace arc -f https://raw.githubusercontent.com/microsoft/azure_arc/main/arc_data_services/upgrade/yaml/data-controller-upgrade.yaml

监视升级状态

可以使用 kubectl 监视升级进度。

kubectl

kubectl get datacontrollers --namespace <namespace> -w
kubectl get monitors --namespace <namespace> -w

升级过程分为两部分。 首先升级控制器,然后升级监视堆栈。 在升级过程中,使用 kubectl get monitors -n <namespace> -w 查看状态。 输出将为:

NAME           STATUS     AGE
monitorstack   Updating   36m
monitorstack   Updating   36m
monitorstack   Updating   39m
monitorstack   Updating   39m
monitorstack   Updating   41m
monitorstack   Ready      41m

疑难解答

当所需版本设置为特定版本时,引导程序作业将尝试升级到该版本,直到它成功为止。 如果升级成功,则规范的 RunningVersion 属性将更新为新版本。 对于映像标记不正确、无法连接到注册表或存储库、分配给容器的 CPU 或内存不足或存储不足等情况,升级可能会失败。

  1. 运行以下命令,查看是否有任何 Pod 显示 Error 状态或具有较高重启次数:

    kubectl get pods --namespace <namespace>
    
  2. 若要查看事件以了解是否存在错误,请运行

    kubectl describe pod <pod name> --namespace <namespace>
    
  3. 若要获取 Pod 中的容器列表,请运行

    kubectl get pods <pod name> --namespace <namespace> -o jsonpath='{.spec.containers[*].name}*'
    
  4. 若要获取容器的日志,请运行

    kubectl logs <pod name> <container name> --namespace <namespace>
    

若要查看常见错误以及如何对其进行故障排除,请转到对资源进行故障排除