内容提要
Fairwinds的CTO Andy Suderman讨论了Kubernetes自动缩放的演变和未来。他解释了Kubernetes自动缩放的历史,包括Horizontal Pod Autoscaler(HPA)和Cluster Autoscaler的引入。Suderman还提到了KEDA和Karpenter等较新的项目。他强调了理解影响最终用户体验的指标的重要性,并指出CPU和内存利用率可能并不总是最佳的自动缩放指标。Suderman还介绍了Goldilocks项目,该项目为设置资源请求和限制提供建议。他总结时提到了多维度Pod自动缩放器以及在Kubernetes中动态更改Pod资源请求和限制的即将到来的功能。
延伸解读
自动缩放项目的分类与定位
文章将Kubernetes自动缩放分为三类:水平Pod自动缩放(HPA、KEDA)、垂直Pod自动缩放(VPA)和集群自动缩放(Cluster Autoscaler、Karpenter)。HPA是唯一内置的自动缩放器,可根据多种指标调整Pod副本数;VPA则基于历史CPU和内存使用调整Pod资源请求;Cluster Autoscaler根据待调度Pod数量增减节点;Karpenter作为更智能的集群自动缩放器,还能选择最优节点规格。理解这些分类有助于在实际场景中选择合适的工具。
选择自动缩放指标:从CPU/内存转向用户体验
Suderman强调,平台工程师应关注影响最终用户体验的指标,而非默认的CPU和内存利用率。他引用四个黄金信号(延迟、流量、错误率、饱和度)说明:延迟可能不适合触发缩放,错误率仅适用于过载即报错的应用,而流量通常是很好的指标,但需要了解单个Pod能处理的请求速率,这需要数据或负载测试。CPU和内存利用率很少是正确的缩放指标,应逐步摒弃。
Goldilocks:基于VPA的资源配置建议工具
Goldilocks项目源于客户常问“资源请求和限制应该设多少”。它通过自动为集群中的Deployment创建VPA对象,并聚合VPA推荐值到仪表板,帮助用户快速获得资源请求的基线,无需手动分析历史指标。该项目并非替代HPA或VPA,而是作为VPA的封装,简化了获取建议的流程。当水平缩放基于非CPU/内存指标时,HPA与VPA可以良好协作。
未来方向:多维度自动缩放与动态资源调整
Kubernetes社区正在推进多维度Pod自动缩放器(MPA),它由Google构建并已贡献回社区,可同时基于CPU或内存进行垂直和水平缩放。尽管Suderman认为CPU/内存通常不是最佳水平缩放指标,但对于缺乏其他指标的用户,MPA仍值得关注。另一个路线图项目是动态更改Pod资源请求和限制,这不会影响调度,但为VPA等工具动态调整Pod资源提供了新机会。
Q&A
Kubernetes自动缩放的历史是什么?
Kubernetes自动缩放始于Horizontal Pod Autoscaler(HPA),它允许根据CPU使用情况自动缩放Pod副本。随后引入了Cluster Autoscaler,用于动态调整集群节点数量。
HPA和VPA有什么区别?
HPA用于水平缩放Pod副本,而VPA用于动态调整Pod的CPU和内存请求,二者在功能上互补。
Goldilocks项目的目的是什么?
Goldilocks项目旨在为Kubernetes中的资源请求和限制提供建议,帮助用户优化Pod性能。
KEDA和Karpenter的作用是什么?
KEDA扩展了HPA的功能,允许基于多种指标进行水平自动缩放;Karpenter则是一个智能的集群自动缩放器,优化节点大小以适应调度的Pod。
在Kubernetes中,哪些指标最适合用于自动缩放?
平台工程师应关注影响最终用户体验的指标,如延迟、流量、错误率和饱和度,而不仅仅是CPU和内存利用率。
Kubernetes社区未来的自动缩放方向是什么?
Kubernetes社区正在朝着多维度Pod自动缩放器(MPA)和动态更改Pod资源请求和限制的方向发展。