使用预留地区级资源

客户可以预留特定地区中的 Compute Engine 实例,确保资源在需要时可供工作负载使用。如需详细了解如何管理预留,请参阅预留 Compute Engine 可用区资源

创建预留后,您可以创建 Google Kubernetes Engine (GKE) 集群和节点池来使用预留实例。GKE 支持与 Compute Engine 相同的使用模式:

准备工作

在开始之前,请确保您已执行以下任务:

使用以下任一方法设定默认的 gcloud 设置:

  • 使用 gcloud init(如果您想要在系统引导下完成默认设置)。
  • 使用 gcloud config(如果您想单独设置项目 ID、区域和地区)。

使用 gcloud init

如果您收到 One of [--zone, --region] must be supplied: Please specify location 错误,请完成本部分。

  1. 运行 gcloud init 并按照说明操作:

    gcloud init

    如果您要在远程服务器上使用 SSH,请使用 --console-only 标志来防止命令启动浏览器:

    gcloud init --console-only
  2. 按照说明授权 gcloud 使用您的 Google Cloud 帐号。
  3. 创建新配置或选择现有配置。
  4. 选择 Google Cloud 项目。
  5. 选择默认的 Compute Engine 区域。

使用 gcloud config

  • 设置默认项目 ID
    gcloud config set project project-id
  • 如果您使用的是可用区级集群,请设置默认计算可用区
    gcloud config set compute/zone compute-zone
  • 如果您使用的是区域级集群,请设置默认计算区域
    gcloud config set compute/region compute-region
  • gcloud 更新到最新版本:
    gcloud components update

使用 GKE 中的预留实例

在创建集群或节点池时,您可以通过指定 --reservation-affinity 标志来指明预留使用模式。

使用任何匹配的预留

如需自动使用任何匹配的预留中的资源,请将预留相似性标志设置为 --reservation-affinity=any

any 预留使用模式下,节点首先从同一可用区中的任何匹配预留中获取容量,如果不足以满足需求,则通过常规 Compute Engine 资源池满足剩余需求。如需详细了解 Compute Engine 如何匹配预留,请参阅预留的工作原理

如需创建预留和实例以使用任何预留,请执行以下步骤:

  1. 创建包含三个虚拟机实例的预留:

    gcloud compute reservations create RESERVATION_NAME \
        --machine-type=MACHINE_TYPE --vm-count=3
    

    请替换以下内容:

    • RESERVATION_NAME:要创建的预留的名称。
    • MACHINE_TYPE:用于预留的机器类型(仅含名称)。例如 n1-standard-2
  2. 验证预留创建成功:

    gcloud compute reservations describe RESERVATION_NAME
    

    RESERVATION_NAME 替换为您刚刚创建的预留的名称。

  3. 创建包含一个节点的集群以使用任何匹配的预留

    gcloud container clusters create CLUSTER_NAME \
        --machine-type=MACHINE_TYPE --num-nodes=1 \
        --reservation-affinity=any
    

    请替换以下内容:

    • CLUSTER_NAME:要创建的集群的名称。
    • MACHINE_TYPE:用于集群的机器类型(仅含名称)。例如:n1-standard-2
  4. 创建包含三个节点的节点池以使用任何匹配的预留:

    gcloud container node-pools create NODEPOOL_NAME \
        --cluster CLUSTER_NAME --num-nodes=3 \
        --machine-type=MACHINE_TYPE --reservation-affinity=any
    

    请替换以下内容:

    • NODEPOOL_NAME:要创建的节点池的名称。
    • CLUSTER_NAME:您之前创建的集群的名称。
    • MACHINE_TYPE:用于节点池的机器类型(仅含名称)。例如:n1-standard-2

总节点数为 4,超过了预留的容量。有 3 个节点使用预留资源,而最后一个节点则使用常规 Compute Engine 资源池中的容量。

使用特定预留

如需使用特定预留,请将预留相似性标志设置为 --reservation-affinity=specific 并提供具体预留名称。在这种模式下,实例必须使用地区中指定预留的容量。如果此预留的资源容量不足,请求就会失败。

如需创建预留和实例以使用特定预留,请执行以下步骤:

  1. 创建包含 3 个虚拟机实例的特定预留:

    gcloud compute reservations create RESERVATION_NAME \
        --machine-type=MACHINE_TYPE --vm-count=3 \
        --require-specific-reservation
    

    请替换以下内容:

    • RESERVATION_NAME:要创建的预留的名称。
    • MACHINE_TYPE:用于预留的机器类型(仅含名称)。例如 n1-standard-2
  2. 创建包含一个节点的集群以使用任何匹配的预留:

    gcloud container clusters create CLUSTER_NAME \
        --machine-type=MACHINE_TYPE --num-nodes=1 \
        --reservation-affinity=specific --reservation=RESERVATION_NAME
    

    请替换以下内容:

    • CLUSTER_NAME:要创建的集群的名称。
    • MACHINE_TYPE:用于集群的机器类型(仅含名称)。例如:n1-standard-2
    • RESERVATION_NAME:要使用的预留的名称。
  3. 创建包含两个节点的节点池以使用任何匹配的预留:

    gcloud container node-pools create NODEPOOL_NAME \
        --cluster CLUSTER_NAME --num-nodes=2 \
        --machine-type=MACHINE_TYPE \
        --reservation-affinity=specific --reservation=RESERVATION_NAME
    

    请替换以下内容:

    • NODEPOOL_NAME:要创建的节点池的名称。
    • CLUSTER_NAME:您之前创建的集群的名称。
    • MACHINE_TYPE:用于节点池的机器类型(仅含名称)。例如:n1-standard-2
    • RESERVATION_NAME:要使用的预留的名称。

使用特定预留的其他考虑事项

如果所创建的节点池具有特定预留相似度,包括创建集群时的默认节点池,其大小将限制为特定预留在节点池整个生命周期内的容量。这会影响到如下 GKE 功能:

  • 包含多个可用区的集群:在区域级集群或多可用区集群中,一个节点池内的不同节点可能分布在不同的可用区。由于预留是单可用区式的,因此需要多个预留。如需在这些集群中创建使用特定预留的节点池,您必须在节点池的每个可用区中创建具有完全相同的名称和机器属性的特定预留。
  • 集群自动扩缩/超额配置升级:如果您在特定预留中没有额外的容量,节点池的超额配置升级或自动扩缩可能会失败,因为两者都需要创建额外的实例。若要解决此问题,您可以更改预留的大小,或者释放其部分受限资源。

创建节点但不使用预留

如需明确避免使用任何预留中的资源,请将相似性设置为 --reservation-affinity=none

  1. 创建一个集群以使用任何匹配的预留:

    gcloud container clusters create CLUSTER_NAME --reservation-affinity=none
    

    CLUSTER_NAME 替换为要创建的集群的名称。

  2. 创建节点池以使用任何匹配的预留:

    gcloud container node-pools create NODEPOOL_NAME \
        --cluster CLUSTER_NAME \
        --reservation-affinity=none
    

    请替换以下内容:

    • NODEPOOL_NAME:要创建的节点池的名称。
    • CLUSTER_NAME:您之前创建的集群的名称。

清理

为避免因本页中使用的资源导致您的 Google Cloud 帐号产生费用,请执行以下操作:

  1. 通过对每个集群运行以下命令来删除您创建的集群:

    gcloud container clusters delete CLUSTER_NAME
    
  2. 通过为每个预留运行以下命令来删除您创建的预留:

    gcloud compute reservations delete RESERVATION_NAME
    

后续步骤