如需在 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
字段互斥。这意味着您只能提供其中一个字段,不能同时提供两者。