创建节点池

如需在 GKE on AWS 中创建节点池,您必须提供以下资源:

  • 要在其中创建节点池的现有 AWS 集群的名称
  • 适用于节点池虚拟机的 IAM 实例配置文件
  • 将在其中运行节点池虚拟机的子网

如果您希望通过 SSH 访问节点,则可以创建 EC2 密钥对

创建标准节点池

这些资源可用后,您可以使用以下命令创建节点池:

gcloud container aws node-pools create NODE_POOL_NAME \
    --cluster CLUSTER_NAME \
    --instance-type INSTANCE_TYPE \
    --root-volume-size ROOT_VOLUME_SIZE \
    --iam-instance-profile NODEPOOL_PROFILE \
    --node-version NODE_VERSION \
    --min-nodes MIN_NODES \
    --max-nodes MAX_NODES \
    --max-pods-per-node MAX_PODS_PER_NODE \
    --location GOOGLE_CLOUD_LOCATION \
    --subnet-id NODEPOOL_SUBNET \
    --ssh-ec2-key-pair SSH_KEY_PAIR_NAME \
    --config-encryption-kms-key-arn CONFIG_KMS_KEY_ARN \
    --tags "Name=CLUSTER_NAME-NODE_POOL_NAME"

替换以下内容:

  • NODE_POOL_NAME:您为节点池选择的名称
  • CLUSTER_NAME:要将节点池连接到的集群的名称
  • INSTANCE_TYPE:此节点池所需的 AWS 机器实例类型,例如 m5.large
  • ROOT_VOLUME_SIZE:每个节点的根卷的所需大小(以 GB 为单位)
  • NODEPOOL_PROFILE:适用于节点池虚拟机的 IAM 实例配置文件。如需详细了解如何更新 IAM 实例配置文件,请参阅更新 AWS IAM 实例配置文件
  • NODE_VERSION:要在节点池中的每个节点上安装的 Kubernetes 版本(例如,“1.29.3-gke.600”)
  • MIN_NODES:节点池可以包含的最小节点数
  • MAX_NODES:节点池可以包含的最大节点数
  • MAX_PODS_PER_NODE:可以在池中的任何单个节点上创建的 pod 数上限
  • GOOGLE_CLOUD_LOCATION:将管理此节点池的 Google Cloud 位置的名称
  • NODEPOOL_SUBNET:节点池将在其中运行的子网的 ID。
    • 集群的 Pod/Service IP 范围和节点池子网网络之间不得存在任何重叠。如需详细了解如何为集群选择 Pod 和 Service IP 范围,请参阅为集群选择 CIDR 范围
    • 如果此子网位于 VPC 主要 CIDR 块之外,则需要执行一些额外的步骤。如需了解详情,请参阅安全群组
  • SSH_KEY_PAIR_NAME:为 SSH 访问创建的 AWS SSH 密钥对的名称(可选)
  • CONFIG_KMS_KEY_ARN:对用户数据进行加密的 AWS KMS 密钥的 Amazon 资源名称 (ARN)

如果存在,--tags 参数会将给定标记应用于节点池中的所有节点。此示例使用节点所属的集群和节点池的名称来标记池中的所有节点。

Spot 实例节点池

GKE on AWS 支持 AWS Spot 实例节点池,这是一个预览版功能。Spot 实例节点池是 AWS 上提供的费用更低的 Amazon EC2 Spot 实例池。

Spot 实例可以为灵活、无状态的容错型应用节省费用。但是,它们不适合不灵活、有状态的非容错型工作负载,也不适合在实例节点之间紧密耦合的工作负载。当 EC2 需要要回容量时,Spot 实例可能会被 Amazon EC2 中断,因此它们受 Spot 市场中波动的影响。如果您的工作负载需要保证容量,并且不能容忍偶尔的不可用,请选择标准节点池而不是 Spot 实例节点池。

GKE on AWS 中采用的分配策略侧重于选择容量可用性最高的 Spot 实例池,从而最大限度地降低中断风险。此方法对于中断费用较高的工作负载(例如图片和媒体渲染或深度学习)特别有益。具体而言,实现了 Spot 实例的分配策略中所述的 capacityOptimized 分配策略。

创建 Spot 节点池

如需创建 Spot 实例节点池,请运行以下命令:

gcloud container aws node-pools create NODE_POOL_NAME \
    --cluster CLUSTER_NAME \
    --spot-instance-types INSTANCE_TYPE_LIST \
    --root-volume-size ROOT_VOLUME_SIZE \
    --iam-instance-profile NODEPOOL_PROFILE \
    --node-version NODE_VERSION \
    --min-nodes MIN_NODES \
    --max-nodes MAX_NODES \
    --max-pods-per-node MAX_PODS_PER_NODE \
    --location GOOGLE_CLOUD_LOCATION \
    --subnet-id NODEPOOL_SUBNET \
    --ssh-ec2-key-pair SSH_KEY_PAIR_NAME \
    --config-encryption-kms-key-arn CONFIG_KMS_KEY_ARN \
    --tags "Name=CLUSTER_NAME-NODE_POOL_NAME"

请替换以下内容:

  • NODE_POOL_NAME:要分配给此节点池的名称。
  • CLUSTER_NAME:要将此节点池附加到的集群的名称。
  • INSTANCE_TYPE_LIST:AWS EC2 实例类型的逗号分隔列表。节点池会预配这些实例类型的 Spot 实例。实例类型必须具有相同的 CPU 架构、相同数量的 CPU 和相同的内存量。例如:“c6g.large,c6gd.large,c6gn.large,c7g.large,t4g.medium”。您可以使用 Amazon EC2 实例选择器工具来查找具有相同 CPU 和内存配置的实例类型。
  • ROOT_VOLUME_SIZE:每个节点的根卷的所需大小(以 GB 为单位)
  • NODEPOOL_PROFILE:适用于节点池虚拟机的 IAM 实例配置文件
  • NODE_VERSION:要在节点池中的每个节点上安装的 Kubernetes 版本(例如,“1.29.3-gke.600”)
  • MIN_NODES:节点池可以包含的最小节点数
  • MAX_NODES:节点池可以包含的最大节点数
  • MAX_PODS_PER_NODE:可以在池中的任何单个节点上创建的 pod 数上限
  • GOOGLE_CLOUD_LOCATION:将管理此节点池的 Google Cloud 位置的名称
  • NODEPOOL_SUBNET:节点池将在其中运行的子网的 ID。
    • 集群的 Pod/Service IP 范围和节点池子网网络之间不得存在任何重叠。如需详细了解如何为集群选择 Pod 和 Service IP 范围,请参阅为集群选择 CIDR 范围
    • 如果此子网位于 VPC 主要 CIDR 块之外,则需要执行一些额外的步骤。如需了解详情,请参阅安全群组
  • SSH_KEY_PAIR_NAME:为 SSH 访问创建的 AWS SSH 密钥对的名称(可选)
  • CONFIG_KMS_KEY_ARN:对用户数据进行加密的 AWS KMS 密钥的 Amazon 资源名称 (ARN)

最佳实践是在 INSTANCE_TYPE_LIST 字段中列出多个实例类型。此最佳实践非常重要,因为如果节点池仅配置了一个实例类型,并且该实例类型在所需的所有可用区中不可用,则节点池无法预配任何新节点。这会影响应用的可用性,并可能导致服务中断。

请注意,spot-instance-types 字段与 instance-type 字段互斥。这意味着您只能提供其中一个字段,不能同时提供两者。