节点池是 Kubernetes 集群中全都具有相同配置的一组节点。节点池使用 NodePool
规范。池中的每个节点都有一个 Kubernetes 节点标签,该标签的值就是节点池的名称。
默认情况下,所有新节点池都运行与控制平面相同的 Kubernetes 版本。
创建 Kubernetes 集群时,您指定的节点数和节点类型将用于创建集群的第一个节点池。您可以向集群添加其他不同大小和类型的节点池。任何给定节点池中的所有节点都彼此相同。
如果您要调度的 pod 比其他 pod 需要更多的资源(例如更多内存或本地磁盘空间),则自定义节点池会非常有用。如果您需要更好地控制 Pod 的调度,可以使用节点污点。
您可以单独创建和删除节点池,而不会影响整个集群。您无法在节点池中配置单个节点。任何配置更改都会影响节点池中的所有节点。
您可以通过扩大或缩小节点池来调整集群中的节点池大小。缩减节点池是一项自动化流程,您只需减小节点池大小,GDC 系统便会自动排空并逐出任意节点。在缩减节点池时,您无法选择要移除的特定节点。
准备工作
如需查看和管理 Kubernetes 集群中的节点池,您必须拥有以下角色:
- User Cluster Admin (
user-cluster-admin
) - 用户集群节点查看器 (
user-cluster-node-viewer
)
这些角色未绑定到命名空间。
添加节点池
通过 GDC 控制台创建 Kubernetes 集群时,您可以在集群创建初始化之前自定义默认节点池并创建其他节点池。如果您必须将节点池添加到现有 Kubernetes 集群,请完成以下步骤:
控制台
- 在导航菜单中,依次选择 Kubernetes Engine > 集群。
- 在集群列表中点击相应集群。系统随即会显示集群详情页面。
- 依次选择节点池 > 添加节点池。
- 为节点池分配名称。创建节点池后,您将无法修改名称。
- 指定要在节点池中创建的工作器节点数。
- 选择最符合工作负载要求的机器类。机器类显示在以下设置中:
- 机器类型
- vCPU
- 内存
- 点击保存。
API
使用
kubectl
CLI 通过交互式编辑器打开Cluster
自定义资源规范:kubectl edit clusters.cluster.gdc.goog/KUBERNETES_CLUSTER_NAME -n platform \ --kubeconfig MANAGEMENT_API_SERVER
替换以下内容:
KUBERNETES_CLUSTER_NAME
:集群的名称。MANAGEMENT_API_SERVER
:托管 Kubernetes 集群的区域 API 服务器的 kubeconfig 路径。如果您尚未为目标地区中的 API 服务器生成 kubeconfig 文件,请参阅登录了解详情。
在
nodePools
部分中添加新条目:nodePools: ... - machineTypeName: MACHINE_TYPE name: NODE_POOL_NAME nodeCount: NUMBER_OF_WORKER_NODES taints: TAINTS labels: LABELS acceleratorOptions: gpuPartitionScheme: GPU_PARTITION_SCHEME
替换以下内容:
MACHINE_TYPE
:节点池的工作器节点的机器类型。查看可用机器类型,了解可配置的资源。NODE_POOL_NAME
:节点池的名称。NUMBER_OF_WORKER_NODES
:要在节点池中预配的工作器节点数。TAINTS
:要应用于此节点池的节点的污点。这是一个可选字段。LABELS
:要应用于此节点池的节点的标签。它包含一个键值对列表。此字段为可选字段。GPU_PARTITION_SCHEME
:GPU 分区方案(如果您要运行 GPU 工作负载)。例如mixed-2
。如果未设置此字段,则 GPU 不会进行分区。如需了解可用的多实例 GPU (MIG) 配置文件,请参阅支持的 MIG 配置文件。
保存文件并退出编辑器。
查看节点池
如需查看 Kubernetes 集群中的现有节点池,请完成以下步骤:
控制台
- 在导航菜单中,依次选择 Kubernetes Engine > 集群。
- 在集群列表中点击相应集群。系统随即会显示集群详情页面。
- 选择节点池。
系统会显示集群中运行的节点池列表。您可以在此页面中管理集群的节点池。
API
查看特定 Kubernetes 集群的节点池:
kubectl get clusters.cluster.gdc.goog/KUBERNETES_CLUSTER_NAME -n platform \ -o json --kubeconfig MANAGEMENT_API_SERVER | \ jq .status.workerNodePoolStatuses
输出类似于以下内容:
[ { "conditions": [ { "lastTransitionTime": "2023-08-31T22:16:17Z", "message": "", "observedGeneration": 2, "reason": "NodepoolReady", "status": "True", "type": "Ready" }, { "lastTransitionTime": "2023-08-31T22:16:17Z", "message": "", "observedGeneration": 2, "reason": "ReconciliationCompleted", "status": "False", "type": "Reconciling" } ], "name": "worker-node-pool", "readyNodes": 3, "readyTimestamp": "2023-08-31T18:59:46Z", "reconcilingNodes": 0, "stalledNodes": 0, "unknownNodes": 0 } ]
删除节点池
如果删除节点池,则节点及指向节点的路由也将随之删除。这些节点会逐出并重新调度其上运行的任何 pod。如果 Pod 具有特定的节点选择器,且集群中的其他节点均不符合条件,则这些 Pod 可能仍处于无法调度的状态。
在删除节点池之前,请确保您至少有 3 个工作器节点,以确保集群有足够的计算空间来有效运行。
如需删除节点池,请完成以下步骤:
控制台
在导航菜单中,依次选择 Kubernetes Engine > 集群。
点击要删除的节点池所在的集群。
选择节点池。
点击要删除的节点池旁边的 delete 删除。
API
使用
kubectl
CLI 通过交互式编辑器打开Cluster
自定义资源规范:kubectl edit clusters.cluster.gdc.goog/KUBERNETES_CLUSTER_NAME -n platform \ --kubeconfig MANAGEMENT_API_SERVER
替换以下内容:
KUBERNETES_CLUSTER_NAME
:集群的名称。MANAGEMENT_API_SERVER
:托管 Kubernetes 集群的区域 API 服务器的 kubeconfig 路径。如果您尚未为目标地区中的 API 服务器生成 kubeconfig 文件,请参阅登录了解详情。
从
nodePools
部分中移除节点池条目。例如,在以下代码段中,您必须移除machineTypeName
、name
和nodeCount
字段:nodePools: ... - machineTypeName: n2-standard-2-gdc name: nodepool-1 nodeCount: 3
请务必移除要删除的节点池的所有字段。
保存文件并退出编辑器。