本页面介绍节点池在 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
清理工作负载,然后再删除集群。
如需删除节点池,请参阅删除节点池。