使用 az aks command invoke 重启 AKS 中的 Deployment
· 约 1 分钟阅读
当重启 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"}