拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Cluster Autoscaler 千节点可扩展性测试报告解读:1000 节点 × 30 Pod 的规模承诺与验证方法

Cluster Autoscaler 千节点可扩展性测试报告解读1000 节点 × 30 Pod 的规模承诺与验证方法【免费下载链接】autoscalerAutoscaling components for Kubernetes项目地址: https://gitcode.com/GitHub_Trending/au/autoscaler本文以 cluster-autoscaler/proposals/scalability_tests.md 为核心系统解读 Kubernetes Cluster AutoscalerCA在 GA 版本所声明的可扩展性目标——1000 节点、每节点 30 个 Pod——背后的定义、测试环境、六大测试场景与实测结论并对照当前仓库中的 kubemark 云提供商实现与 FAQ 中的 SLO 说明进行源码级印证。读完本文你将理解 CA规模化到什么程度才算达标的评判标准、如何借助 kubemark 以低成本搭建千节点测试集群以及该规模承诺的适用前提与边界。一、为什么需要一份可扩展性测试报告作为 Cluster Autoscaler 走向 GA正式发布的一部分项目团队需要向用户量化承诺这一组件在多大规模的集群上依然可用。仓库根目录的 cluster-autoscaler/README.md 在特性清单中明确写着 Support for 1000 nodes running 30 pods each并直接指向本测试报告作为依据cluster-autoscaler/FAQ.md 也在回答 How mature is Cluster Autoscaler? 时提到 It was tested that CA scales well. CA should handle up to 1000 nodes running 30 pods each. Our testing procedure is described here。因此scalability_tests.md不是一份内部实验记录而是对外发布的规模承诺依据文档它定义了CA 扩展到 1000 节点的确切含义、用于度量的性能指标、测试环境的搭建方式以及支撑该结论的实测数据。二、CA 可扩展到 1000 节点的确切定义该文档首先澄清了一个容易模糊的概念——什么才算可扩展Cluster Autoscaler scales up to a certain number of nodes if it stays responsive. It performs scale up and scale down operations on the cluster within reasonable time frame.即可扩展意味着 CA 在目标规模下保持响应能够在合理时间窗内完成集群的扩容scale up与缩容scale down。文档进一步解释了为什么要强调这一点若 CA 失去响应可能被 liveness probe存活探针杀掉或者无法在需要时提供/释放计算资源导致集群无法承载新增工作负载或者由于没有及时缩容而产生更高的云厂商账单。可见可扩展性不仅是功能正确更是时效正确——CA 必须在用户可感知的延迟范围内对集群状态变化作出反应。三、预期性能标准单次迭代 30 秒上限为了把反应时间短落实为可测量的指标文档定义了**迭代iteration**这一核心概念every iteration (cluster state analysis to see if cluster size needs to be changed and according adjustment of the cluster size) needs to finish relatively quickly一次迭代 一次完整的集群状态分析 → 判断是否需要调整集群规模 → 执行相应调整循环。CA 能否及时响应直接取决于单次迭代的耗时。由此给出量化标准迭代时长的上限设定为 30 秒。从当前仓库源码看这一迭代正是 cluster-autoscaler/main.go 中主循环所执行的核心动作loop.RunAutoscalerOnce(ctx, autoscaler, healthCheck, lastRun)在autoscalingOpts.ScanInterval定时触发下反复运行而循环内部即为一次完整的伸缩决策处理。换言之30 秒的上限直接约束的就是这条主循环路径上的分析-决策-调整总耗时。四、测试环境kubemark GCP 的千节点模拟集群在真实公有云上直接拉起 1000 台节点做压测成本极高。为此本报告使用了 Kubernetes 社区的可扩展性测试利器kubemark在 GCP 上构建了一套约 1000 节点的测试集群。原文给出的具体配置如下组件规格说明1 个 master1 核 VM外部集群控制面17 个节点8 核 VM每核最多运行 8 个 Kubemark 节点承载 Hollow Node1 个 Kubemark master32 核 VMkubemark 集群控制面1 台独立 VM—专用于运行 Cluster Autoscaler这套拓扑的精髓在于用少量真实 VM 模拟出千节点规模的假象真实集群中只有 18 台机器但通过 kubemark 的 Hollow Node 机制在逻辑上呈现为 1000 个 K8s 节点从而以极低成本触发 CA 的全部伸缩逻辑。仓库中的 cluster-autoscaler/proposals/kubemark_integration.md 对这一机制给出了更完整的背景说明kubemark 环境包含两个集群外部集群external cluster如 GCE 上的普通集群与运行其上的 kubemark 集群拥有独立的 master**Hollow Node空心节点**以 Pod 形式运行在外部集群中由 Replication Controller 统一创建与管控每个 Hollow Node 对应一个逻辑节点使 CA 看到的是一个节点数万级的大集群而实际占用的物理资源极小。CA 侧对应的实现位于 cluster-autoscaler/cloudprovider/kubemark/kubemark_linux.go注意该云提供商仅在 Linux 上编译见 kubemark_other.go 中的桩实现非 Linux 平台直接klog.Fatal提示 only supported on Linux。从源码结构看其关键设计包括ProviderName kubemark并通过builder.RegisterCloudProvider注册甚至被设为默认云提供商BuildKubemark同时维护两个 client一个连接外部集群InClusterConfig另一个连接 kubemark 集群优先读取/kubeconfig/cluster_autoscaler.kubeconfig并各自建立 informer 与KubemarkControllerNodeGroup 通过dynamic.SpecFromString(value, true)解析命令行传入的--nodes{MIN}:{MAX}:{NG_LABEL_VALUE}规格来构建minSize/maxSize直接决定伸缩边界IncreaseSize通过SetNodeGroupSize增加目标规模DeleteNodes在低于MinSize时拒绝删除DecreaseTargetSize只允许缩减尚未创建完成的节点——这与 kubemark_integration.md 中以 singleton Replication Controller 方式管理节点的设计一一对应。关于 NodeGroup 的组织方式kubemark_integration.md 明确同一 NodeGroup 的节点通过标签autoscaling.k8s.io/nodegroup标识CA 启动时会解析--nodes{MIN}:{MAX}:{NG_LABEL_VALUE}若集群中该标签的节点不足{MIN}个则自动补齐。这样即便 CA 重启或崩溃NodeGroup 的归属关系也不会丢失。五、测试执行与指标采集方法所有测试场景共享同一套通用负载目标约 1000 个节点、每节点约 30 个 Pod。执行方式为During each test scenario we have collected iteration duration histogram.即在每个场景运行期间持续采集迭代时长直方图iteration duration histogram用迭代时长的分布来评估 CA 的响应性。这与第三节定义的 30 秒迭代上限形成闭环30 秒是阈值直方图数据则是判定依据。六、六大测试场景详解文档共设计了 6 个场景按方向分为 3 个 Scale-up扩容与 3 个 Scale-down缩容覆盖了集群负载突发变化的典型形态。6.1 [Scale-up] 从零开始扩容Scales up at all场景集群已饱和新创建的 Pod 必须依赖扩容才能运行模拟集群中的突发活动潮起始状态1 个节点上运行 2 个 Pod节点已满无法再容纳新 Pod操作调度约 30 000 个新 Pod触发扩容到 1000 节点、每节点 30 Pod预期结果集群达到 1000 节点所有 Pod 运行所有节点满载。该场景验证的是 CA 扩容链路的最基本情况——能否在饱和集群中为大规模 Pod 洪峰完成从 1 到 1000 的扩容。6.2 [Scale-up] 在承接既有扩容负载的同时继续扩容场景集群已饱和分两批创建 Pod两批之间有小间隔模拟 CA 正在扩容时又迎来新一轮活动突发起始状态1 节点、2 Pod节点已满操作先调度约 21 000 个新 Pod触发扩容到 700 节点→ 等待约 1.5 分钟 → 再调度约 9 000 个新 Pod触发扩容到 1000 节点预期结果集群达到 1000 节点所有 Pod 运行所有新节点满载。该场景比 6.1 更严苛CA 必须在上一轮扩容尚未完成的中间态继续响应新一轮扩容请求验证其状态机的连续性。6.3 [Scale-down] 缩容空节点场景集群中存在大量空节点等待 CA 自动缩容模拟集群活动度的骤降起始状态700 个 Pod 运行在 700 个节点上节点约 70% 满集群共 1000 节点操作不做任何事预期结果300 个节点被移出集群。该场景验证 CA 的闲置节点回收能力——直接决定云账单的高低。6.4 [Scale-down] 缩容低利用率节点场景集群存在大量低利用率节点等待 CA 缩容同时迫使 CA 计算如何重调度 Pod起始状态52 000 个 Pod 运行在 1000 个节点上其中 300 个节点约 30% 满、700 个节点约 70% 满节点组最小规模 970操作不做任何事预期结果30 个节点被移出集群。与 6.3 的空节点直接删不同本场景中节点上仍有 PodCA 必须基于模拟调度器评估这些 Pod 能否搬到其余节点只有搬得走才会缩容因此对计算开销的考验更大节点规模、Pod 数量均为所有场景之最。6.5 [Scale-down] 不缩容低利用率但不可移除的节点场景集群存在大量低利用率但无法移除的节点模拟带有不可移除节点的活动骤降起始状态1000 个 Pod 运行在 1000 个节点上其中 700 个节点 90% 满300 个节点约 30% 满因 host port 冲突等原因低利用率却不可移除操作不做任何事预期结果集群规模不变所有 Pod 继续运行。该场景验证的是缩容逻辑的保守面——不能为了缩容而破坏正在运行的 Pod即使节点利用率很低只要 Pod 无法迁移就必须保持原状。6.6 [Scale-up] 忽略不可调度 Pod继续调度可调度 Pod场景创建不可调度的 Pod 不应影响可调度 Pod 的调度起始状态1 节点上运行 1 个 Pod另有 1000 个不可调度 Pod 处于 Pending操作调度 30 000 个 Pod触发扩容到 1000 节点、每节点 30 Pod预期结果集群规模 1000所有可调度 Pod 运行不可调度 Pod 保持 Pending。该场景验证 CA 不会因 Pending 池中存在永远无法满足的 Pod如资源请求超出任何节点上限而阻塞或拖慢正常 Pod 的扩容路径。七、测试结果与最终结论文档给出的结论非常直接Cluster Autoscaler in GA version fulfills all the expected results of all the listed test scenarios. Furthermore the maximum measured iteration duration for all these tests is below 10s.即6 个场景全部达成预期结果扩容达 1000 节点、缩容精确到目标节点数、不可移除节点不被误删、不可调度 Pod 不阻塞正常调度所有测试中的实测最大迭代时长低于 10 秒远优于预设的 30 秒上限据此正式声明Cluster AutoscalerGA 版可扩展到 1000 节点、平均每节点 30 个 Pod。八、与 SLO 及性能预期的衔接这份测试报告的价值不止于一次性的压测它还直接支撑了 cluster-autoscaler/FAQ.md 中对外公布的性能 SLO。FAQ 在 What are the Service Level Objectives for Cluster Autoscaler? 一节中说明CA 的核心 SLO 是延迟时间从 Pod 被调度器标记为不可调度到 CA 向云厂商发出扩容请求的间隔在可扩展性测试中目标是在大集群下最大 20 秒延迟据此向用户给出的实际预期为小集群100 节点、每节点 ≤30 Pod延迟不超过 30 秒、平均约 5 秒大集群1001000 节点延迟不超过 60 秒、平均约 15 秒。同时 FAQ 也点明了达成该性能的前提条件与本文报告的适用边界一脉相承所有 Pod不得使用 Pod affinity/anti-affinity——FAQ 明确指出当前调度器中 affinity 谓词的实现比其它所有谓词加起来还慢约 3 个数量级会令 CA 在大集群上难以可用大集群中建议为 CA Pod 预留完整 1 核 CPU将 CA 放在过载节点上无法达到声明的性能没有对超过 1000 节点的集群进行过性能测试支持更大规模并非 1.0 的目标。这些说明既界定了本报告的测试边界也为用户在生产环境复现该性能水平提供了可操作的约束条件。九、局限性与适用前提总结基于文档本身及仓库佐证材料读者在引用1000 节点 × 30 Pod这一结论时应同时知悉其适用前提测试载体为 kubemark 模拟集群基于 kubemark_integration.md 描述的外部集群 Hollow Node 方案并非真实云厂商实例云厂商侧的节点供应延迟不计入 CA 迭代时长测试平台为 GCP/GCE其他云厂商如 AWS由于缺少相应测试基础设施并未纳入标准开发与发布流程的性能验证见 FAQ.md测试上限即 1000 节点超过该规模没有性能数据支撑该承诺依赖kubemark 云提供商在 Linux 环境下运行其他平台仅有桩实现迭代时长 30 秒是设计上限实测最大值 10 秒是特定负载形态下的结果不代表所有场景。十、如何在仓库中进一步深入若想复现或深入理解本测试可在当前仓库中按以下路径继续探索scalability_tests.md —— 本文所解读的原始报告kubemark_integration.md —— kubemark 云提供商的集成设计Hollow Node、NodeGroup 标签、--nodes配置kubemark_linux.go —— kubemark CloudProvider 的 Linux 实现双集群 client、NodeGroup 增删、min/max 边界校验main.go —— CA 主循环与RunAutoscalerOnce即迭代的执行入口FAQ.md —— 由本测试衍生的 SLO 与性能预期说明README.md —— 1000 nodes running 30 pods each 特性声明的对外入口e2e/cluster_size_autoscaling.go 与 e2e/e2e_test.go —— 面向真实集群的端到端伸缩验证可作为理解测试执行方式的补充材料。综上这份可扩展性测试报告为 Cluster Autoscaler 的 GA 承诺提供了完整的方法论与数据支撑以迭代时长 ≤ 30 秒作为响应性度量以 kubemark 低成本构建千节点模拟环境以六个覆盖扩容/缩容极端形态的场景完成验证最终以实测最大迭代时长 10 秒的结论确立了 1000 节点 × 30 Pod 的规模化能力基线。对使用者而言理解其定义、测试设计与适用边界远比记住一个1000 节点的数字更有价值。【免费下载链接】autoscalerAutoscaling components for Kubernetes项目地址: https://gitcode.com/GitHub_Trending/au/autoscaler创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门