Kubernetes v1.30.6 环境下 HPA 自动扩缩容完整实践指南

简介: 本文基于Kubernetes v1.30.6,详解HPA自动扩缩容端到端实践,涵盖Metrics Server部署、TLS问题修复、测试应用部署、压测验证及私有Harbor镜像同步方案,提供版本兼容性与生产配置建议,助你快速落地弹性伸缩能力。

Kubernetes v1.30.6 环境下 HPA 自动扩缩容完整实践指南

适用版本:Kubernetes v1.30.6 + Metrics Server v0.7.2
场景:自建集群 / 私有云 / 边缘计算环境
目标:实现 HPA 自动扩缩容的端到端落地
Harbor 地址:192.168.1.129:8082(harbor.local.com)


引言

Horizontal Pod Autoscaler(HPA)是 Kubernetes 实现应用弹性伸缩的核心能力,能够根据 CPU、内存或自定义指标自动调整工作负载副本数,从而在保障服务质量的同时优化资源利用率。然而,在自建 Kubernetes 集群(尤其是 v1.24+ 移除 Docker 后)中部署 HPA,常面临 镜像拉取失败、Metrics Server 无法采集指标、TLS 证书验证错误、HPA 状态未知 等一系列问题。

本文基于 Kubernetes v1.30.6 环境,完整演示从 Metrics Server 安装、测试应用部署、HPA 创建到负载压测验证 的全链路操作,并提供各组件的版本兼容性说明生产级配置建议,助你一次性打通 HPA 落地路径。

一、环境与版本选型(关键前提)

Kubernetes 对组件版本有严格的兼容性要求。针对 v1.30.6,我们选择如下组件:

组件 推荐版本 依据
Kubernetes v1.30.6 当前环境
Metrics Server v0.7.2 官方兼容性矩阵 明确支持 v1.29–v1.30
测试应用 registry.k8s.io/hpa-example 官方维护,含 CPU request,适用于所有现代集群
容器运行时 containerd ≥ v1.7 K8s v1.30 推荐版本

结论:无需降级或特殊适配,使用官方默认组件即可


二、部署 Metrics Server(指标采集核心)

HPA 依赖 Metrics Server 提供资源指标(如 CPU 使用率)。

2.1 安装

kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.7.2/components.yaml

2.2 修复自建集群 TLS 问题(常见于 kubeadm 部署)

若控制台出现以下错误:

x509: cannot validate certificate for 10.x.x.x because it doesn't contain any IP SANs

说明 kubelet 使用的自签名证书未包含 IP 在 SAN 字段中。

解决方案(测试/开发环境):

kubectl edit deploy metrics-server -n kube-system

在容器 args 中添加:

args:
  - --kubelet-preferred-address-types=InternalIP
  - --kubelet-insecure-tls   # 跳过 kubelet 证书验证

生产环境应使用包含节点 IP SAN 的合规证书。

2.3 验证

kubectl get pods -n kube-system -l k8s-app=metrics-server
kubectl top nodes    # 应正常返回 CPU/MEM 使用

三、部署 HPA 测试应用:php-apache

使用 Kubernetes 官方 HPA 示例:

kubectl apply -f https://k8s.io/examples/application/php-apache.yaml

该应用关键特性:

  • 镜像:registry.k8s.io/hpa-example
  • 设置了 resources.requests.cpu: 200m(HPA 必需)
  • 暴露 Service php-apache 供压测

验证:

kubectl get deploy/php-apache
kubectl describe pod -l run=php-apache | grep -A5 "Requests"

四、创建 HorizontalPodAutoscaler

kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
  • --cpu-percent=50:目标 CPU 利用率为 50%(基于 requests 计算)
  • 副本数范围:1 ~ 10

查看状态:

kubectl get hpa

正常输出:

NAME         REFERENCE               TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache   0%/50%    1         10        1          20s

若显示 <unknown>/50%,请检查:

  1. Metrics Server 是否运行正常(kubectl top pods
  2. Pod 是否设置了 resources.requests.cpu

五、压测验证自动扩缩容

5.1 启动负载生成器(新开终端)

kubectl run -i --tty load-generator --rm \
  --image=busybox:1.28 \
  --restart=Never \
  -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://php-apache; done"

使用 busybox:1.28 确保包含 wget,避免因镜像变更导致命令缺失。

5.2 实时观察 HPA 行为

kubectl get hpa php-apache --watch

典型扩缩容过程

TARGETS       REPLICAS
0%/50%        1        ← 初始状态
248%/50%      1        ← 负载注入,CPU 飙升
248%/50%      4        ← HPA 扩容(248/50 ≈ 5,受算法平滑)
78%/50%       5        ← 继续扩容
0%/50%        5        ← 停止压测
0%/50%        3        ← 冷却期后开始缩容
0%/50%        1        ← 最终回到最小副本

行为说明

  • 扩容响应较快(秒级)
  • 缩容有 默认 5 分钟冷却期(由 --horizontal-pod-autoscaler-downscale-stabilization 控制)

5.3 停止压测

在负载终端按 Ctrl + C,Pod 自动清理。


六、私有镜像仓库(Harbor)适配方案

若无法访问 registry.k8s.io,可将镜像同步至本地 Harbor。

6.1 镜像同步

docker pull registry.k8s.io/hpa-example
docker tag registry.k8s.io/hpa-example 192.168.1.129:8082/apps/hpa-example
docker push 192.168.1.129:8082/apps/hpa-example

6.2 配置 containerd 支持 HTTP 仓库

编辑 /etc/containerd/config.toml

[plugins."io.containerd.grpc.v1.cri".registry]
  [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
    [plugins."io.containerd.grpc.v1.cri".registry.mirrors."192.168.1.129:8082"]
      endpoint = ["http://192.168.1.129:8082"]
  [plugins."io.containerd.grpc.v1.cri".registry.configs]
    [plugins."io.containerd.grpc.v1.cri".registry.configs."192.168.1.129:8082".tls]
      insecure_skip_verify = true

重启:

systemctl restart containerd

七、常见问题排查清单

现象 根本原因 解决方案
failed to pull image containerd 强制 HTTPS,Harbor 为 HTTP 配置 insecure_skip_verify = true
x509: no IP SANs kubelet 证书缺失 IP SAN 添加 --kubelet-insecure-tls
TARGETS: <unknown>/50% 1. Metrics Server 异常
2. Pod 无 CPU request
1. 修复 Metrics Server
2. 补充 resources.requests.cpu
HPA 副本不增加 负载未达目标利用率 kubectl top pods 验证实际 CPU

八、结语与生产建议

本文在 Kubernetes v1.30.6 环境下,完整验证了 HPA 的自动扩缩容能力。HPA 是云原生弹性架构的基石,建议在生产中:

  1. 避免使用 :latest 标签,使用语义化版本镜像
  2. 合理设置 resources.requests,直接影响 HPA 决策
  3. 生产环境使用合规 TLS 证书,替代 insecure 配置
  4. 结合 Prometheus Adapter,实现基于 QPS、延迟等自定义指标的扩缩容

通过本次实践,你已掌握 HPA 从部署到验证的完整链路,可将其应用于真实业务系统,实现资源弹性与成本优化的双重目标。


参考链接


本文测试环境:Kubernetes v1.30.6, containerd v1.7.28, Metrics Server v0.7.2

相关文章
|
8天前
|
数据采集 人工智能 安全
|
17天前
|
云安全 监控 安全
|
3天前
|
机器学习/深度学习 人工智能 前端开发
构建AI智能体:七十、小树成林,聚沙成塔:随机森林与大模型的协同进化
随机森林是一种基于决策树的集成学习算法,通过构建多棵决策树并结合它们的预测结果来提高准确性和稳定性。其核心思想包括两个随机性:Bootstrap采样(每棵树使用不同的训练子集)和特征随机选择(每棵树分裂时只考虑部分特征)。这种方法能有效处理大规模高维数据,避免过拟合,并评估特征重要性。随机森林的超参数如树的数量、最大深度等可通过网格搜索优化。该算法兼具强大预测能力和工程化优势,是机器学习中的常用基础模型。
291 164
|
2天前
|
机器学习/深度学习 自然语言处理 机器人
阿里云百炼大模型赋能|打造企业级电话智能体与智能呼叫中心完整方案
畅信达基于阿里云百炼大模型推出MVB2000V5智能呼叫中心方案,融合LLM与MRCP+WebSocket技术,实现语音识别率超95%、低延迟交互。通过电话智能体与座席助手协同,自动化处理80%咨询,降本增效显著,适配金融、电商、医疗等多行业场景。
302 155
|
4天前
|
机器学习/深度学习 人工智能 前端开发
构建AI智能体:六十九、Bootstrap采样在大模型评估中的应用:从置信区间到模型稳定性
Bootstrap采样是一种通过有放回重抽样来评估模型性能的统计方法。它通过从原始数据集中随机抽取样本形成多个Bootstrap数据集,计算统计量(如均值、标准差)的分布,适用于小样本和非参数场景。该方法能估计标准误、构建置信区间,并量化模型不确定性,但对计算资源要求较高。Bootstrap特别适合评估大模型的泛化能力和稳定性,在集成学习、假设检验等领域也有广泛应用。与传统方法相比,Bootstrap不依赖分布假设,在非正态数据中表现更稳健。
233 113
|
11天前
|
SQL 自然语言处理 调度
Agent Skills 的一次工程实践
**本文采用 Agent Skills 实现整体智能体**,开发框架采用 AgentScope,模型使用 **qwen3-max**。Agent Skills 是 Anthropic 新推出的一种有别于mcp server的一种开发方式,用于为 AI **引入可共享的专业技能**。经验封装到**可发现、可复用的能力单元**中,每个技能以文件夹形式存在,包含特定任务的指导性说明(SKILL.md 文件)、脚本代码和资源等 。大模型可以根据需要动态加载这些技能,从而扩展自身的功能。目前不少国内外的一些框架也开始支持此种的开发方式,详细介绍如下。
807 6