评估业务集群的资源
推荐的控制平面实践
使用以下实践来规划 中业务集群控制平面的资源。
以下要求基于安装了 Core 软件包的最低 部署。安装 Extensions 后,实际要求可能会更高。请阅读特定于 Extension 的指导,了解其他资源要求。
控制平面节点规格
控制平面规格需求会随集群的节点数量、节点类型以及运行的对象数量和类型而变化。以下建议源自集群密度测试,这些测试用于评估负载下的控制平面行为。测试会在指定的一组命名空间中部署以下对象:
- 6 个部署,其中的 Pod 仅运行 sleep 进程
- 6 个服务
- 6 个指向上述服务的 Ingress
- 12 个包含 2048 个随机字符串字符的 Secret
- 12 个包含 2048 个随机字符串字符的 ConfigMap
上表数据基于安装在公有云虚拟机上的 环境,其中控制平面节点配置为 16 个 vCPU 和 128 GB RAM,工作节点配置为 8 个 vCPU 和 32 GB RAM。
在有三个控制平面节点的大型高密度集群中,若有一个节点下线——无论是由于电力或网络故障等意外问题、基础设施问题,还是为了节省成本而主动关机——剩余两个节点都必须承担额外工作。此时,存活的控制平面机器上的 CPU 和内存使用量可能会显著上升。
升级期间也会出现这种情况,因为更新控制平面 Operator 时,通常会依次封锁、驱逐并重启控制平面节点。这种顺序维护会将负载集中到仍在运行的节点上。
为降低级联故障的风险,请确保控制平面服务器有充足的资源余量:目标是将总体 CPU 和内存利用率保持在约 60% 或以下,以便集群能够应对短暂的负载增长。如有必要,请增加控制平面的 CPU 和 RAM,以防止资源耗尽导致潜在中断。
节点规格会因集群中的节点数量和对象数量而异,也取决于是否正在集群中主动创建对象。创建对象期间,与对象处于 Running 阶段时相比,控制平面的资源使用活动会更加频繁。
主要版本的 已测试集群上限
过度使用节点的物理资源可能会削弱 Kubernetes 所依赖的调度保障。请采用资源请求和限制、QoS 类以及节点调优等控制措施,尽量减少内存交换和其他资源争用。
这些数据基于 的测试配置、方法和调优结果。以下条目列出的是在测试条件下观察到的 最大值,而非固定上限。
由于 版本、控制平面工作负载和网络插件的组合无限多,因此这些数值并非适用于所有部署的保证上限,也不一定能在所有维度上同时达到。
规划具有类似特征的部署时,可将这些数值作为参考。\
增加或减少 集群中的节点数量时,建议:
- 如有可用区域,请将节点分布到所有可用区域,以提高可用性。
- 每次扩容或缩容不超过 25 到 50 个节点。
缩减大型、高密度集群时,操作可能需要相当长的时间,因为在关闭待移除节点之前,必须迁移或终止这些节点上的工作负载。如果一次需要处理大量资源,耗时可能尤其长。
如果需要驱逐大量对象,API 客户端可能会开始对请求进行速率限制。默认客户端每秒查询数 (QPS) 和突发设置分别为 50 和 100,且在 中无法更改这些值。\
- 支持超过 500 个节点的集群;此处列出的是建议的最大值。如果您的使用场景需要更大的集群,请联系技术支持。
- 此处列出的 Pod 数量是测试环境中的计数。实际 Pod 容量会因各原生应用的内存、CPU 和存储需求而异。
- 如果有大量活跃项目,etcd 的键空间可能会过大并超出空间配额,进而导致性能下降。建议定期维护 etcd(例如进行碎片整理),以回收存储空间并避免性能问题。
- 多个控制循环会在状态发生变化时遍历命名空间中的所有对象。在单个命名空间中,某一类型的对象数量过多会增加这些循环的开销,并减慢处理速度。此处给出的上限假设系统拥有足够的 CPU、内存和磁盘资源来满足原生应用的需求。
- 测试在一个包含 29 台服务器的集群上运行(3 个控制平面节点、2 个基础设施节点和 24 个工作节点),其中有 500 个命名空间。 将自定义资源定义 (CRD) 总数限制为 1,024 个,其中包括由 提供的 CRD、集成产品添加的 CRD,以及用户创建的 CRD。创建超过 1,024 个 CRD 可能导致 kubectl 请求遭到限流。
示例
在一个测试场景中,使用 4.1、Kube-OVN 网络插件以及以下工作负载对象,对 500 个工作节点进行了测试。每个工作节点配备 8 个 vCPU 和 32 GB 内存:
- 除默认值外,另有 200 个命名空间
- 每个节点 60 个 Pod;30 个服务器 Pod 和 30 个客户端 Pod(总计 30k 个)
- 由服务器 Pod 提供后端的服务,每个命名空间 15 个(总计 3k 个)
- 每个命名空间 20 个 Secret(总计 4k 个)
- 每个命名空间 10 个 ConfigMap(总计 2k 个)
- 每个命名空间 6 个网络策略,包括拒绝所有、允许来自 Ingress 的流量以及命名空间内规则
以下因素已知会影响集群工作负载扩展能力,规划扩展时应将其纳入考虑。如需更多指导,请联系技术支持。
- 每个节点的 Pod 数量
- 每个 Pod 的容器数量
- 使用的探针类型(例如,存活性/就绪性、exec/http)
- 网络策略数量
- 项目或命名空间数量
- 服务/端点数量及其类型
- 分片数量
- Secret 数量
- ConfigMap 数量
- API 调用速率,用于估算集群配置变化的速度。
- 按 5 分钟窗口统计每秒 Pod 创建请求数的 Prometheus 查询:
sum(irate(apiserver_request_count{resource="pods",verb="POST"}[5m])) - 按 5 分钟窗口统计每秒所有 API 请求数的 Prometheus 查询:
sum(irate(apiserver_request_count{}[5m]))
- 按 5 分钟窗口统计每秒 Pod 创建请求数的 Prometheus 查询:
- 集群节点的 CPU 资源消耗
- 集群节点的内存资源消耗