停止和启动 Azure Kubernetes 服务 (AKS) 群集

可能不需要持续运行 Azure Kubernetes 服务 (AKS) 工作负载。 例如,可能有只在营业时间使用的开发群集。 这表示有时群集可能处于空闲状态,只运行系统组件。 可以通过将所有 User 节点池缩放为 0 来减少群集内存占用量,但当该群集运行时,仍需要 System来运行系统组件。

为了在这段时间内更好地优化成本,可以关闭或停止群集。 此操作将停止控制平面和代理节点,从而节省所有计算成本,同时保持除独立 pod 之外的所有对象。 存储群集状态,以备再次启动时可从中断的位置重新开始。

开始之前

本文假设你有现有 AKS 群集。 如果需要 AKS 群集,可以使用 Azure CLIAzure PowerShellAzure 门户 创建一个。

关于群集停止/启动功能

当使用群集停止/启动功能时,以下条件适用:

  • 只有虚拟机规模集支持的群集才支持此功能。
  • 不能停止使用 节点自动预配 (NAP) 功能的群集。
  • 已停止的 AKS 群集的群集状态将最多保留 12 个月。 如果群集停止时间超过 12 个月,则无法恢复状态。 有关详细信息,请参阅 AKS 支持策略
  • 在已停止的 AKS 群集上只能执行启动或删除操作。 要执行其他操作,如缩放或升级,需要首先启动群集。
  • 如果预配了链接到专用群集的 PrivateEndpoints,则在启动已停止的 AKS 群集时需要删除并重新创建它们。
  • 由于停止进程会清空所有节点,因此,任何独立 Pod(例如,不由 Deployment、StatefulSet、DaemonSet、Job 等管理的 Pod)将被删除。
  • 启动群集备份时,预期会出现以下行为:
    • API 服务器的 IP 地址可能会更改。
    • 如果使用的是群集自动缩放程序,则在启动群集时,当前节点计数可能不在所设置的最小范围值和最大范围值之间。 群集以运行其工作负载所需的节点数(不受自动缩放程序设置影响)开始。 当群集执行缩放操作时,最小值和最大值将影响当前节点计数,并且群集最终将进入并保持在所需范围内,直到停止群集为止。

停止 AKS 群集

  1. 使用 az aks stop 命令可以停止正在运行的 AKS 群集,包括节点和控制平面。 以下示例停止名为 myAKSCluster 的群集:

    az aks stop --name myAKSCluster --resource-group myResourceGroup
    
  2. 验证群集是否已停止使用 az aks show 命令,并确认 powerState 显示为 Stopped

    az aks show --name myAKSCluster --resource-group myResourceGroup
    

    输出应该类似于以下简洁示例输出:

    {
    [...]
      "nodeResourceGroup": "MC_myResourceGroup_myAKSCluster_chinaeast2",
      "powerState":{
        "code":"Stopped"
      },
      "privateFqdn": null,
      "provisioningState": "Succeeded",
      "resourceGroup": "myResourceGroup",
    [...]
    }
    

    如果 provisioningState 显示 Stopping,则群集尚未完全停止。

重要

如果使用的是 Pod 中断预算,停止操作可能需要更长的时间,因为清空过程将花费更多的时间才能完成。

启动 AKS 群集

注意

请勿重复停止和启动群集。 这可能导致错误。 停止群集后,应至少等待 15-30 分钟,然后再次启动它。

  1. 使用 az aks start 命令以启动已停止的 AKS 群集。 群集将以先前的控制平面状态和代理节点数重新启动。 以下示例启动名为 myAKSCluster 的群集:

    az aks start --name myAKSCluster --resource-group myResourceGroup
    
  2. 验证群集是否已开始使用 az aks show 命令,并确认 powerState 显示 Running

    az aks show --name myAKSCluster --resource-group myResourceGroup
    

    输出应该类似于以下简洁示例输出:

    {
    [...]
      "nodeResourceGroup": "MC_myResourceGroup_myAKSCluster_chinaeast2",
      "powerState":{
        "code":"Running"
     },
     "privateFqdn": null,
     "provisioningState": "Succeeded",
     "resourceGroup": "myResourceGroup",
    [...]
    }
    

    如果 provisioningState 显示 Starting,则群集尚未完全启动。

后续步骤