节点池简介


本页面介绍节点池在 Google Kubernetes Engine (GKE) 中的工作原理。

如需了解如何管理节点池,请参阅添加和管理节点池

概览

节点池是集群中全都具有相同配置的一组节点。节点池使用 NodeConfig 规范。池中的每个节点都有一个 Kubernetes 节点标签 cloud.google.com/gke-nodepool,该标签的值就是节点池的名称。

创建集群时,指定的节点数和类型将用于创建集群的第一个节点池。然后,您可以向集群添加其他不同大小和类型的自定义节点池。任何给定节点池中的所有节点都彼此相同。

例如,您可以在集群中创建一个具有本地 SSD满足最低要求的 CPU 平台Spot 虚拟机、特定节点映像、不同机器类型或更高效的虚拟网络接口的节点池。

如果您要调度的 Pod 比其他 Pod 需要更多的资源(例如更多内存或更多本地磁盘空间),则自定义节点池会非常有用。如果您需要更好地控制 Pod 的调度位置,可以使用节点污点

您可以逐个创建、升级和删除节点池,而不会影响整个集群。您无法在节点池中配置单个节点;任何配置更改都会影响节点池中的所有节点。

您可以通过添加或移除节点来调整集群中的节点池的大小。

默认情况下,所有新节点池都运行与控制层面相同的 Kubernetes 版本。现有节点池可以手动升级,也可以自动升级。您还可以在集群中的每个节点池上运行多个 Kubernetes 节点版本、单独更新每个节点池,并针对特定部署定位不同节点池。

将 Service 部署到特定节点池

定义 Service 时,可以间接控制将其部署到哪个节点池。节点池不依赖于 Service 的配置,但依赖于 Pod 的配置。

  • 您可以通过在 Pod 清单中设置 nodeSelector,明确地强制将 Pod 部署到特定节点池。这会强制 Pod 仅在该节点池中的节点上运行。如需查看示例,请参阅将 Pod 部署到特定节点池

  • 您可以为容器指定资源请求量。Pod 仅在能够满足资源请求量的节点上运行。例如,如果 Pod 定义包含需要四个 CPU 的容器,则 Service 将不会选择在具有两个 CPU 的节点上运行的 Pod。

多区域级集群或地区级集群中的节点

如果您创建了多区域级地区级集群,则所有节点池将自动复制到这些区域。系统会在这些区域中自动创建任何新节点池。同样,只要执行删除操作,也会从其他区域中删除这些节点池。

请注意,由于此乘法效应,在创建节点池时,这可能会消耗您的项目在特定地区的更多配额

删除节点池

删除节点池时,GKE 会排空节点池中的所有节点,并删除和重新安排所有 pod。排空过程涉及 GKE 删除节点池中每个节点上的 Pod。通过分配的正常终止期限 MAX_POD 删除 Pod,将节点池中的每个节点排空。MAX_POD 是安排到节点的 Pod 上的最大 terminationGracePeriodSeconds,上限为一小时。在删除节点池期间,不会应用 PodDisruptionBudget 设置。

如果 Pod 具有特定的节点选择器,且如果集群中的其他节点均不符合标准,则 Pod 可能仍处于无法安排的状态。

集群被删除后,GKE 不会遵循通过排空节点来正常终止节点的过程。如果集群上运行的工作负载必须正常终止,请使用 kubectl drain 清理工作负载,然后再删除集群。

如需删除节点池,请参阅删除节点池

后续步骤