HPA通过动态调整Pod副本数实现负载自适应伸缩。它依赖Metrics Server采集指标,要求目标Deployment设置resources.requests,依据CPU/内存等利用率与目标阈值比较,按公式计算期望副本数并取各指标结果最大值执行扩缩容。
要让容器在负载升高时自动增加副本、负载下降时自动减少,关键就是正确配置 Horizontal Pod Autoscaler(HPA)。它不改单个容器资源,而是动态调整 Pod 数量,适合无状态服务的弹性应对。
HPA 不是开箱即用的功能,依赖底层指标采集能力:
kubectl get apiservices | grep metrics 和 kubectl top pods 验证cpu: 100m、memory: 256Mi;HPA 计算利用率时以 requests 为分母,没设 requests 就无法生效replicas 初始值大于 0;若为 0,HPA 不会触发任何扩缩动作一份典型的 HPA YAML 中,以下字段决定伸缩行为是否合理:
apiVersion、kind、name 完全一致minReplicas 保障最低可用性,maxReplicas 防止突发流量引发资源耗尽type: Resource + name: cpu + averageUtilization: 70type: Resource + name: memory + averageUtilization: 80
以下 YAML 将为名为 my-app 的 Deployment 设置双指标 HPA:
apiVersion: autoscaling/v2kind: HorizontalPodAutoscalermetadata: name: my-app-hpaspec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: my-app minReplicas: 2 maxReplicas: 10 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 70 - type: Resource resource: name: memory target: type: Utilization averageUtilization: 85
保存为 hpa.yaml 后执行 kubectl apply -f hpa.yaml 即可启用。几分钟后可通过 kubectl get hpa 查看当前指标值与推荐副本数。
配置完成后,还需注意这些实际运行中的要点:
type: External 或 type: Pods