Kubernetes 系列 Horizontal Pod Autoscaler
一.介绍
前面讲通过Deployment等资源对象,通过手工执行kubectl scale命令,我们可以实现pod扩容或缩容,但不够自动化、智能化。 分布式系统要能够根据当前负载的变化情况自动触发水平扩展或缩容的行为,因为这一过程可能是频繁发生的,不可预料的,所以手动控制的方式是不现实的。
Horizontal Pod Autoscaler为pod的横向自动扩展,简称HPA。在k8s v1.6开始,对根据应用自定义指标进行自动扩容和缩容的功能进行增强,API版本为autoscaling/v2alpha1, 仍在不断演进过程中。
HPA与 RC、Deployment一样,也属于一种k8s资源对象。通过追踪分析rc控制的所有目标pod的负载变化情况,来确定是否需要针对性地调整目标pod的副本数,这是hpa的实现原理。当前hpa可以有以下两种方式作为pod负载的度量指标:
1.cpuUtilizationPercentage
2应用程序自定义的度量指标,比如服务在每秒内的相应的请求数(TPS或QPS)
QPS:Queries Per Second意思是“每秒查询率
TPS:是TransactionsPerSecond的缩写,也就是事务数/秒
二. cpuUtilizationPercentage
cpuUtilizationPercentage是一种算术平均值,即目标pod所有副本自身的cpu利用率的平均值。比如我们定义一个pod的pod request为0.4,而当前pod的cpu使用量为0.2,则它的cpu使用率为50%, 如果某一时刻cpuUtilizationPercentage的值超过80%,则意味着当前的pod副本数很可能不足以支撑接下来更多的请求,需要进行动态扩容,而当请求高峰时段过去后,pod的cpu利用率又会降下来,此时对应的pod副本数应该自动减少到一个合理的水平。
使用cpuUtilizationPercentage计算过程中,使用到的pod的cpu使用量通常是1min(分钟)内的平均值,目前通过查询Heapster扩展组件来得到这个值,所以需要安装部署Heapster
apiVersion: autoscaling/v1 kind: HorizontalPodAutoscaler metadata: name: php-apache namespace: default spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: php-apache minReplicas: 1 maxReplicas: 10 targetCPUUtilizationPercentage: 90
上面定义,知道这个HPA控制的目标对象为一个名叫php-apache的deploymnet里的pod副本,当这些pod副本的cpuUtilizationPercentage值超过90%时,会触发自动动态扩容行为,扩容或缩容时必须满足的一个约束条件是pod的副本数要介于1与10之间。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
2018-12-27 redis 系列27 Cluster高可用 (2)