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需要稳定的运行环境和较高的节点权限,与业务负载隔离可以避免因业务扩缩导致观测数据中断。
下图展示了系统节点池与用户节点池在集群中的逻辑关系:
2.3 节点池与集群弹性伸缩的关系
集群弹性伸缩(Cluster Autoscaler, CA)是节点池的核心能力之一。CA通过监控Pod的调度状态,在Pod因资源不足而Pending时,自动触发节点池扩容;在节点利用率持续低于阈值时,触发缩容。
节点池与弹性伸缩的协作机制如下:
- Pod调度失败触发扩容:当Pod因资源不足无法调度时,CA检测到Pending Pod,根据Pod的节点选择器、亲和性规则,选择匹配的节点池进行扩容。
- 节点池按配置创建节点:CA调用云厂商API,按照节点池预设的实例规格、镜像、磁盘大小创建新节点。
- 节点加入集群:新节点自动注册到集群,kubelet启动后,调度器将Pending Pod调度到新节点。
- 缩容评估与执行:CA定期检查节点利用率,如果节点利用率低于阈值(如50%)且节点上的Pod可以被重新调度,则执行缩容。
- 节点池差异化策略:系统节点池通常关闭弹性伸缩或设置极小范围,用户节点池则根据业务负载动态调整。
容量规划陷阱:如果eBPF观测Agent部署在用户节点池,当用户节点池因业务低峰缩容时,观测Agent也会被驱逐,导致观测数据中断。因此,建议将eBPF Agent部署在系统节点池,并为其预留足够的资源(CPU/Memory),确保观测链路始终在线。
下图展示了节点池弹性伸缩的完整流程:
2.4 节点池规划建议
基于上述概念,在规划eBPF观测部署时,建议遵循以下节点池设计原则:
- 分离部署:eBPF Agent(如Cilium、Hubble、Pixie)部署在系统节点池,业务Pod部署在用户节点池。
- 资源预留:在系统节点池中为eBPF Agent预留足够的CPU和内存资源,避免因资源竞争导致观测数据丢失。
- 污点与容忍度:系统节点池添加
CriticalAddonsOnly=true:NoSchedule污点,eBPF Agent通过容忍度调度到系统节点池。 - 弹性伸缩策略:系统节点池关闭弹性伸缩或设置固定节点数(如3-5台),用户节点池开启弹性伸缩。
- 多可用区:每个节点池尽量跨多个可用区部署,提高容灾能力。
容量规划公式:系统节点池节点数 = ceil( (eBPF Agent预留资源 + 其他系统组件资源) / 单节点可用资源 ) + 1(冗余)