2、Kubernetes节点池基础:节点池概念、节点池类型(系统池/用户池)、节点池与集群弹性伸缩的关系

2.1 节点池概念

节点池(Node Pool)是Kubernetes集群中一组配置相同的节点集合。在云原生环境中,节点池将底层基础设施(如虚拟机规格、磁盘类型、网络配置)与上层调度逻辑解耦,使得运维人员可以按业务需求对节点进行分组管理。

节点池的核心价值在于:

  • 统一配置:池内所有节点共享相同的实例规格、镜像、标签和污点。
  • 独立扩缩:每个节点池可以独立配置弹性伸缩策略,互不影响。
  • 故障隔离:不同节点池可部署在不同可用区或硬件资源上,降低故障域。
  • 成本优化:通过混合使用按量付费和抢占式实例,实现成本与稳定性的平衡。
关键认知:节点池是集群资源管理的"逻辑单元",而非物理实体。在Kubernetes API层面,节点池通常由云厂商的Cluster API或托管集群(如ACK、EKS、GKE)的NodeGroup资源来定义。

2.2 节点池类型:系统池与用户池

在生产集群中,节点池通常划分为两种类型:系统节点池和用户节点池。这种划分是为了实现控制面组件与业务负载的隔离,避免资源争抢。

对比维度 系统节点池 用户节点池
用途 运行集群核心组件(CoreDNS、kube-proxy、Ingress Controller、监控Agent等) 运行业务容器(微服务、批处理任务、AI训练等)
节点规格 通常使用稳定、中等规格(如4C8G),避免频繁扩缩 根据业务需求灵活选择,可包含GPU、高内存等异构实例
污点策略 默认添加 CriticalAddonsOnly=true:NoSchedule 污点 无默认污点,或按业务添加自定义污点
弹性伸缩 通常关闭或设置极小伸缩范围,保持稳定 开启弹性伸缩,根据负载动态调整节点数量
更新策略 优先使用原地升级或滚动更新,最小化影响 可接受快速替换,支持蓝绿部署
成本模型 按量付费为主,保证可用性 可混合使用抢占式实例,降低成本
最佳实践:在规划eBPF观测部署时,建议将eBPF Agent(如Cilium、Pixie、Hubble)部署在系统节点池中。因为观测Agent需要稳定的运行环境和较高的节点权限,与业务负载隔离可以避免因业务扩缩导致观测数据中断。

下图展示了系统节点池与用户节点池在集群中的逻辑关系:

节点池类型与集群架构 Kubernetes 集群 控制面 (Master) 系统节点池 Node-1 (系统) Node-2 (系统) CoreDNS eBPF Agent Ingress 监控Agent 用户节点池 Node-3 (用户) Node-4 (用户) 业务Pod-A 业务Pod-B 业务Pod-C 业务Pod-D 系统池运行基础设施组件,用户池运行业务负载,两者通过污点和容忍度实现调度隔离

2.3 节点池与集群弹性伸缩的关系

集群弹性伸缩(Cluster Autoscaler, CA)是节点池的核心能力之一。CA通过监控Pod的调度状态,在Pod因资源不足而Pending时,自动触发节点池扩容;在节点利用率持续低于阈值时,触发缩容。

节点池与弹性伸缩的协作机制如下:

  1. Pod调度失败触发扩容:当Pod因资源不足无法调度时,CA检测到Pending Pod,根据Pod的节点选择器、亲和性规则,选择匹配的节点池进行扩容。
  2. 节点池按配置创建节点:CA调用云厂商API,按照节点池预设的实例规格、镜像、磁盘大小创建新节点。
  3. 节点加入集群:新节点自动注册到集群,kubelet启动后,调度器将Pending Pod调度到新节点。
  4. 缩容评估与执行:CA定期检查节点利用率,如果节点利用率低于阈值(如50%)且节点上的Pod可以被重新调度,则执行缩容。
  5. 节点池差异化策略:系统节点池通常关闭弹性伸缩或设置极小范围,用户节点池则根据业务负载动态调整。
容量规划陷阱:如果eBPF观测Agent部署在用户节点池,当用户节点池因业务低峰缩容时,观测Agent也会被驱逐,导致观测数据中断。因此,建议将eBPF Agent部署在系统节点池,并为其预留足够的资源(CPU/Memory),确保观测链路始终在线。

下图展示了节点池弹性伸缩的完整流程:

节点池弹性伸缩流程 ① Pod调度失败 资源不足 → Pending ② CA检测Pending 匹配节点池配置 ③ 调用云API 创建新节点 ④ 节点加入集群 调度Pending Pod ⑤ 缩容评估 利用率低于阈值 ⑥ 驱逐Pod并缩容 删除空闲节点 系统节点池通常关闭弹性伸缩,用户节点池根据业务负载动态扩缩,两者策略独立配置

2.4 节点池规划建议

基于上述概念,在规划eBPF观测部署时,建议遵循以下节点池设计原则:

  • 分离部署:eBPF Agent(如Cilium、Hubble、Pixie)部署在系统节点池,业务Pod部署在用户节点池。
  • 资源预留:在系统节点池中为eBPF Agent预留足够的CPU和内存资源,避免因资源竞争导致观测数据丢失。
  • 污点与容忍度:系统节点池添加 CriticalAddonsOnly=true:NoSchedule 污点,eBPF Agent通过容忍度调度到系统节点池。
  • 弹性伸缩策略:系统节点池关闭弹性伸缩或设置固定节点数(如3-5台),用户节点池开启弹性伸缩。
  • 多可用区:每个节点池尽量跨多个可用区部署,提高容灾能力。
容量规划公式:系统节点池节点数 = ceil( (eBPF Agent预留资源 + 其他系统组件资源) / 单节点可用资源 ) + 1(冗余)