使用 az aks command invoke 重启 AKS 中的 Deployment
当重启 Kubernetes 部署时,通常会使用 kubectl rollout restart deployment <deployment-name> -n <namespace> 命令。然而,在某些情况下,可能无法直接访问 AKS 集群的 Kubernetes API,此时可以使用 Azure CLI 的 az aks command invoke 命令来执行该操作。
前置权限 🔗
需要具备在目标 AKS 集群上执行 Run Command 的 Azure RBAC 权限。实践中,仅有 Kubernetes RBAC 的 Kubernetes Admin 往往不足以执行 az aks command invoke,建议至少具备该 AKS 资源范围的 Contributor 权限。
重启 Deployment 🔗
az aks command invoke --name <cluster-name> --resource-group <resource-group> --subscription "<subscription-id-or-name>" --command "kubectl rollout restart deployment <deployment-name> -n <namespace>" --output json
注意,该命令的退出码为 az 命令的退出码,并不是 kubectl 命令的退出码。即使 kubectl 命令执行失败,az aks command invoke 的退出码仍然可能是 0。好在这个命令返回的 JSON 格式的结果里,包含了 exitCode 字段,表示 kubectl 命令的退出码。可以通过解析该字段来判断 kubectl 命令是否执行成功。
比如当 Deployment 不存在时,返回的 JSON 结果如下:
{
"exitCode": 1,
"finishedAt": "2026-07-13T12:57:22+00:00",
"id": "b1c77d81f142404d825db5f8a490f05a",
"logs": "Error from server (NotFound): deployments.apps \"abc\" not found\n",
"provisioningState": "Succeeded",
"reason": null,
"startedAt": "2026-07-13T12:57:17+00:00"
}
另外,kubectl rollout restart 执行后会立即返回,并不会等待重启完成。如果想知道重启结果,还需要使用 kubectl rollout status 命令查看 Deployment 状态。可以执行如下命令等待重启完成:
az aks command invoke --name <cluster-name> --resource-group <resource-group> --subscription "<subscription-id-or-name>" --command "kubectl rollout status deployment <deployment-name> -n <namespace>" --output json
返回示例如下:
{
"exitCode": 0,
"finishedAt": "2026-07-13T12:59:59+00:00",
"id": "826c6fba27ae45eeb28956d6f32a6e20",
"logs": "....",
"provisioningState": "Succeeded",
"reason": null,
"startedAt": "2026-07-13T12:59:54+00:00"
}