在 Azure Kubernetes 服务 (AKS) 中停止和启动节点池

你可能不需要持续运行 AKS 工作负载。 例如,你可能有一个开发群集,其中包含运行特定工作负载的节点池。 为了优化计算成本,可以完全停止 AKS 群集中的节点池。 需要再次运行工作负荷时,可以重启节点池。 本文介绍如何使用 Azure CLI在 AKS 群集中停止和启动节点池。

功能和限制

  • 无法停止系统池。
  • 支持现成节点池。
  • 已停止的节点池可以升级。
  • 若要停止节点池,群集和用户节点池都必须正在运行,并且节点池 provisioningState 必须处于 Succeeded 状态。
  • 若要启动节点池,群集必须正在运行,并且必须停止用户节点池。
  • 您无法停止使用节点自动预配 (NAP)的集群中的节点池。

开始之前

本文假定你已拥有一个 AKS 群集。 如果需要 AKS 群集,请使用 Azure CLIAzure PowerShellAzure 门户创建一个。

本文需要 Azure CLI 2.38.0 或更高版本。 运行 az --version 来查找已安装的版本。 有关安装或升级Azure CLI的详细信息,请参阅安装Azure CLI

使用 Azure CLI 停止正在运行的 AKS 节点池

在停止节点池之前,请确认群集和用户节点池正在运行,节点池为Succeeded节点池provisioningState,并且群集不使用节点自动预配。

Warning

停止节点池会停止池中的所有虚拟机。 在停止池之前,请确保其工作负荷可以容忍中断,或者可以在另一个节点池上运行。

  1. 使用 az aks nodepool stop 命令停止正在运行的 AKS 节点池。

    az aks nodepool stop --resource-group myResourceGroup --cluster-name myAKSCluster --nodepool-name testnodepool 
    
  2. 使用 az aks nodepool show 命令验证您的节点池已停止运行。

    az aks nodepool show --resource-group myResourceGroup --cluster-name myAKSCluster --nodepool-name testnodepool
    

    下面的精简示例输出显示 powerState 的状态为 Stopped

    {
    [...]
     "osType": "Linux",
        "podSubnetId": null,
        "powerState": {
            "code": "Stopped"
            },
        "provisioningState": "Succeeded",
        "proximityPlacementGroupId": null,
    [...]
    }
    

    注意

    如果 provisioningState 显示 Stopping,则节点池仍处于停止过程中。

    注意

    停止节点池也会停止该节点池的 群集自动缩放程序 。 启动节点池会重启其集群自动扩缩器。 不要在池处于停止状态时手动修改虚拟机规模集中的实例数量。 不支持直接修改 AKS 管理的基础结构资源,并可能导致群集自动缩放程序不一致和操作失败。 有关详细信息,请参阅 代理节点的用户自定义


使用 Azure CLI重启 AKS 节点池

在启动节点池之前,请确认群集正在运行并且用户节点池已停止。

  1. 使用az aks nodepool start命令重启已停止的节点池

    az aks nodepool start --resource-group myResourceGroup --cluster-name myAKSCluster --nodepool-name testnodepool 
    
  2. 使用 az aks nodepool show 命令验证节点池是否已启用。

    az aks nodepool show --resource-group myResourceGroup --cluster-name myAKSCluster --nodepool-name testnodepool
    

    下面的精简示例输出显示 powerState 的状态为 Running

    {
    [...]
     "osType": "Linux",
        "podSubnetId": null,
        "powerState": {
            "code": "Running"
            },
        "provisioningState": "Succeeded",
        "proximityPlacementGroupId": null,
    [...]
    }
    

    注意

    如果 provisioningState 显示 Starting,则节点池仍在启动过程中。


后续步骤