Kubernetes自动扩缩容实战:HPA与VPA配置及调度策略

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/

(0)
小编小编
上一篇 10小时前
下一篇 10小时前

相关推荐