1. Kubernetes HPA功能深度解析
最近在客户现场做K8s集群优化时,发现很多团队对HPA(Horizontal Pod Autoscaler)的使用存在误区。有人把它当万能灵药,不管什么服务都挂上HPA;也有人完全不敢用,担心自动扩缩会引发稳定性问题。今天我就结合一个生产级HPA实验,聊聊这个核心功能的正确打开方式。
HPA本质上是通过监控指标动态调整Pod副本数的控制器。与手动扩缩容相比,它能实现:
- 毫秒级指标采集(默认30s间隔)
- 平滑的扩缩容过渡(避免副本数剧烈波动)
- 多维度指标支持(CPU/内存/自定义指标)
但要注意,不是所有服务都适合HPA。像有状态服务、启动耗时长的服务就需要特殊处理。接下来我们通过完整实验,看看HPA的最佳实践。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 实验环境搭建与配置
2.1 集群准备要点
我选用K3s作为实验环境(v1.25.6+k3s1),相比minikube更接近生产环境特性。关键配置:
bash复制# 禁用traefik以使用nginx ingress
curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--disable traefik" sh -
# 安装metrics-server
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
重要提示:生产环境建议使用--request参数明确Pod资源需求,否则HPA计算会不准确。我们测试时故意不设置,后面会看到影响。
2.2 测试应用部署
用Go写了个简单的压力测试应用:
go复制// 关键压力测试逻辑
http.HandleFunc("/stress", func(w http.ResponseWriter, r *http.Request) {
cpuOps := 10000000 // 默认计算量
if s := r.URL.Query().Get("scale"); s != "" {
if i, err := strconv.Atoi(s); err == nil
