2. Kubernetes 节点池基础
2.1 节点池的概念
节点池(Node Pool)是 Kubernetes 集群中一组具有相同配置、标签、污点和资源的节点集合。在托管 Kubernetes 服务(如 AKS、EKS、GKE、TKE)中,节点池是管理同质化工作节点的基本单元。每个节点池内的节点共享相同的实例规格、操作系统、磁盘类型和初始化脚本,从而简化了集群的扩缩容与运维操作。
核心定义:节点池 = 一组同质化节点 + 统一的配置模板 + 独立的扩缩容策略。
2.2 节点池的作用
| 作用维度 | 说明 | 关键收益 |
|---|---|---|
| 资源隔离 | 不同节点池使用不同的实例规格或机型,实现计算、内存、GPU 资源的物理隔离 | 避免业务相互干扰,保障关键工作负载的稳定性 |
| 弹性伸缩 | 每个节点池可独立配置 Cluster Autoscaler 策略,按需扩缩容 | 精准匹配业务流量波动,降低闲置成本 |
| 混合机型管理 | 在同一集群中同时管理标准型、计算型、内存型、GPU 型等多种节点池 | 满足多样化工作负载的硬件需求,提升资源利用率 |
| 升级与运维 | 节点池级别的滚动升级、镜像预拉取、安全补丁更新 | 最小化对业务的影响,实现灰度升级 |
| 成本控制 | 为不同节点池设置不同的实例类型和计费模式(按需/竞价/预留实例) | 优化整体集群成本,竞价实例池可降低 60%-80% 计算费用 |
2.3 常见使用场景
2.3.1 弹性伸缩场景
节点池是 Kubernetes 弹性伸缩的基础单元。当工作负载 Pod 因资源不足而处于 Pending 状态时,Cluster Autoscaler 会检查所有节点池的剩余容量,并触发对应节点池的扩容操作。缩容时则根据节点利用率逐步回收空闲节点。
最佳实践:为每个节点池设置最小/最大节点数限制,并配置缩容冷却时间(scale-down-delay-after-add),避免频繁扩缩容导致的震荡。
2.3.2 混合机型场景
现代云原生应用通常包含多种类型的工作负载,单一机型无法满足所有需求。通过节点池可以实现混合机型管理:
- 标准型节点池:运行常规微服务、Web 应用,平衡计算与内存资源。
- 计算型节点池:运行批处理任务、CI/CD 构建、视频转码等 CPU 密集型工作负载。
- 内存型节点池:运行缓存、数据库、内存分析等内存密集型应用。
- GPU 型节点池:运行 AI 训练、推理、图形渲染等需要 GPU 加速的工作负载。
- 竞价实例节点池:运行无状态、可中断的弹性任务,大幅降低成本。
2.3.3 节点池升级与镜像预拉取场景
节点池的升级操作(如更新操作系统版本、Kubernetes 版本、容器运行时)通常采用滚动升级策略。在升级过程中,新节点加入集群前需要拉取业务镜像,这一过程往往成为升级速度的瓶颈。容器镜像预拉取策略正是为了解决这一问题而设计——在节点加入集群之前,提前将目标镜像拉取到节点本地,从而加速节点就绪时间。
注意:节点池升级时,如果未使用镜像预拉取,每个新节点启动后需要同时拉取多个业务镜像,可能导致 Pod 调度延迟 30 秒到数分钟不等,具体取决于镜像大小和网络带宽。
2.4 节点池与工作负载的关联
工作负载通过 nodeSelector、节点亲和性(nodeAffinity) 或 污点容忍(Toleration) 将 Pod 调度到指定的节点池。以下是一个将 Pod 调度到 GPU 节点池的示例:
apiVersion: v1
kind: Pod
metadata:
name: gpu-inference-pod
spec:
containers:
- name: inference
image: inference-server:latest
resources:
requests:
nvidia.com/gpu: 1
limits:
nvidia.com/gpu: 1
nodeSelector:
type: gpu
tolerations:
- key: "nvidia.com/gpu"
operator: "Exists"
effect: "NoSchedule"
2.5 节点池的生命周期管理
节点池的典型生命周期包含以下阶段:
- 创建:指定实例规格、磁盘大小、操作系统、初始节点数、标签和污点。
- 扩缩容:手动调整节点数或通过 Cluster Autoscaler 自动调整。
- 升级:滚动升级节点池内的节点(Kubernetes 版本、操作系统、容器运行时)。
- 维护:替换故障节点、打安全补丁、更新配置。
- 删除:清空节点上的 Pod 后移除节点池。
关键指标:节点池升级速度通常由“节点就绪时间”衡量。未使用镜像预拉取时,节点就绪时间 = 节点初始化时间 + 镜像拉取时间;使用预拉取后,节点就绪时间 ≈ 节点初始化时间,可缩短 40%-70%。
2.6 节点池配置示例(TKE / AKS)
以下是一个使用 Terraform 创建混合节点池的配置片段:
# 标准型节点池
resource "tencentcloud_kubernetes_node_pool" "standard" {
cluster_id = tencentcloud_kubernetes_cluster.main.id
name = "standard-pool"
node_count = 3
max_size = 10
min_size = 1
instance_type = "S5.LARGE8" # 4C8G
subnet_ids = [var.subnet_id]
labels = {
"type" = "standard"
}
}
# GPU 型节点池
resource "tencentcloud_kubernetes_node_pool" "gpu" {
cluster_id = tencentcloud_kubernetes_cluster.main.id
name = "gpu-pool"
node_count = 1
max_size = 5
min_size = 0
instance_type = "GN10X.LARGE96" # 8C32G V100
subnet_ids = [var.subnet_id]
labels = {
"type" = "gpu"
}
taints {
key = "nvidia.com/gpu"
value = "true"
effect = "NoSchedule"
}
}
小结:节点池是 Kubernetes 集群实现资源隔离、弹性伸缩和混合机型管理的核心抽象。理解节点池的概念与生命周期,是后续学习容器镜像预拉取策略加速节点池升级的基础。在下一章中,我们将深入分析节点池升级过程中的性能瓶颈,并量化镜像拉取时间对升级速度的影响。