Kubernetes容器编排体系里,自动扩缩容是保证应用在流量波动下稳定运行的关键能力。HPA根据负载指标调整Pod副本数,VPA根据历史用量调整Pod资源请求,二者配合可以让集群在高峰期顶得住、低谷期不浪费。本文以实际YAML配置为主线,说明HPA与VPA的适用场景、配置方法与常见的抖动排查手段。
HPA工作原理:指标驱动副本数计算
HPA通过指标服务获取当前负载,按公式计算期望副本数:期望副本数等于当前副本数乘以当前指标值除以期望指标值,结果向上取整。CPU指标由metrics-server提供,QPS、队列长度等自定义指标需接入Prometheus。
kubectl autoscale deployment api-server --cpu-percent=70 --min=2 --max=10
这条命令生成一个最简单的HPA:CPU使用率超过70%时扩容到最多10副本,低于70%回缩到最少2副本。
HPA完整配置:以CPU与自定义指标为例
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: api-server-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: api-server
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
behavior:
scaleDown:
stabilizationWindowSeconds: 300
scaleUp:
stabilizationWindowSeconds: 60
behavior字段控制缩容与扩容的稳定窗口:缩容稳定窗口拉长到300秒,防止指标抖动导致副本数反复横跳;扩容窗口缩短,保证流量高峰快速拉起副本。
VPA:把资源请求调整到合理区间
VPA不调整副本数,而是根据历史资源用量推荐或直接修改Pod的CPU与内存request。它适合资源初始值拍脑袋、实际用量波动明显的应用。
apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
name: api-server-vpa
spec:
targetRef:
apiVersion: apps/v1
kind: Deployment
name: api-server
updatePolicy:
updateMode: Auto
updateMode为Auto时,VPA会驱逐Pod并重建以应用新资源值,业务会有短暂中断,生产环境建议先使用Off/Initial模式观察推荐值。
HPA与VPA配合使用
两者管的是不同维度:VPA保证单个Pod资源够用,HPA保证整体副本数与流量匹配。配合使用的经验是资源错开管理——让HPA管CPU扩容,VPA管内存请求调整,避免对同一指标双头决策;同时给每个Pod设置requests,否则HPA拿不到利用率。
扩缩容抖动排查与调优
副本数反复抖动,优先检查指标采集间隔与稳定窗口;CPU利用率被容器内部大量短线程拉高时,改测自定义业务指标更符合实际;扩容不生效,检查Pod是否有资源请求值与HPA目标值是否合理;缩容丢失连接,给Pod配置preStop钩子与terminationGracePeriodSeconds。
原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/kubernetes-zi-dong-kuo-suo-rong-shi-zhan-hpa-yu-vpa-pei-zhi/