终止 Azure Kubernetes 服务 (AKS) 群集上长时间运行的操作

有时,由于各种原因,群集中节点上的 Pod 中运行的部署或其他进程的运行时间会比预期的要长。 你可以使用以下 az rest 命令使用 2024-01-02-preview 之后的任何预览版 API 版本来深入了解任何正在进行的操作(例如创建、升级和缩放)的进度:

export ResourceID="<cluster-resource-id>"
az rest --method get --url "https://management.chinacloudapi.cn$ResourceID/operations/latest?api-version=2024-01-02-preview"

此命令提供一个百分比,指示操作的完成程度。 你可以使用此方法针对群集上最多 50 个最新操作获取这些见解。 “percentComplete”属性表示正在进行的操作的完成程度,如以下示例所示:

"id": "/subscriptions/<subscription-id>/resourcegroups/myResourceGroup/providers/Microsoft.ContainerService/managedClusters/contoso/operations/<operation-id>",
  "name": "<operation-id>",
  "percentComplete": 10,
  "startTime": "2024-04-08T18:21:31Z",
  "status": "InProgress"

还有一个与上述命令等效的 cli 命令,用于显示群集中最新操作的状态。

az aks operation show-latest \
    --resource-group myResourceGroup \
    --name myCluster

下面是一个示例输出:

{
  "endTime": null,
  "error": null,
  "id": "/subscriptions/<subscription-id>/resourcegroups/myResourceGroup/providers/Microsoft.ContainerService/managedClusters/contoso/operations/<operation-id>",
  "name": "<operation-id>",
  "operations": null,
  "percentComplete": 1.0,
  "resourceGroup": "myResourceGroup",
  "resourceId": null,
  "startTime": "2024-06-12T18:16:21+00:00",
  "status": "InProgress"
}

还可以使用上述输出中的操作 ID 来运行此命令。 Id 参数表示要使用的操作 ID。 例如:

az aks operation show \
    --resource-group myResourceGroup \
    --name myCluster \
    --operation-id "<operation-id>"

尽管当不再需要操作时让其正常终止很重要,但在某些情况下,需要使用 abort 命令释放对具有长时间运行操作的节点池和群集的控制。

AKS 对中止长期运行操作的支持现已正式发布。 此功能允许你收回控制权并无缝运行其他操作。 使用 Azure REST APIAzure CLI 支持此设计。

中止操作支持以下方案:

  • 如果长时间运行的操作停滞或疑似处于错误状态或失败,则可以中止该操作,前提是它是托管群集或代理池上最后一个正在运行的操作。
  • 如果长时间运行的操作停滞或失败,则可以中止该操作。
  • 只要操作未首先达到终端状态,就可以中止错误触发的操作。

准备阶段

  • Azure CLI 版本 2.47.0 或更高版本。 可通过运行 az --version 查找版本,运行 az upgrade 升级版本。 如果需要进行安装或升级,请参阅安装 Azure CLI

中止长时间运行的操作

可以将 az aks nodepool 命令与 operation-abort 参数结合使用,以中止节点池或托管群集上的操作。

以下示例终止指定群集上某个节点池上的操作。

az aks nodepool operation-abort \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name myNodePool 

以下示例终止指定群集上的某个操作。

az aks operation-abort \
    --name myAKSCluster \
    --resource-group myResourceGroup

在响应中,返回了 HTTP 状态代码 204。

应取消托管群集或代理池上的预配状态。 使用 REST API 获取托管群集获取代理池来验证操作。 应在接受中止请求的几秒钟内将预配状态更新为“已取消”。 托管群集/代理池上最后一次运行操作 ID 的操作状态(可以通过针对托管群集或代理池执行 GET 操作进行检索)应显示为“正在取消”状态。

终止操作时,操作不会回滚到以前的状态,并会停在操作中任何在进行的步骤。 完成后,群集预配状态将显示“已取消”状态。 如果操作恰好是群集升级,则在取消操作期间,它会停在其所在位置。

后续步骤

详细了解容器见解,以了解它如何帮助你监视 Kubernetes 群集和容器工作负载的性能和运行状况。