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

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
4月前
|
关系型数据库 数据库 PostgreSQL
PostgreSQL 16 本地开发环境极速搭建
本文提供一套高效、可复用的 PostgreSQL 16 本地开发环境搭建方案,基于 Docker Compose 实现30秒极速启动。包含自动初始化脚本、唯一约束设计、CRUD 操作指南与冲突处理策略,支持数据持久化与一键重置,助力开发者快速投入业务开发,告别环境配置难题。
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
666 2
|
5月前
|
架构师 微服务
【架构师】微服务的拆分有哪些原则?
微服务拆分需遵循七大原则:职责单一、围绕业务、中台化公共模块、按系统保障级别分离、技术栈解耦、避免循环依赖,并遵循康威定律使架构与组织匹配,提升可维护性与协作效率。
455 4
|
4月前
|
分布式计算 Kubernetes 调度
别再把 K8s 当大号 Docker 了:我用 Kubernetes 跑数据任务踩过的那些坑
别再把 K8s 当大号 Docker 了:我用 Kubernetes 跑数据任务踩过的那些坑
151 8
|
11月前
|
监控 Linux 应用服务中间件
Linux多节点多硬盘部署MinIO:分布式MinIO集群部署指南搭建高可用架构实践
通过以上步骤,已成功基于已有的 MinIO 服务,扩展为一个 MinIO 集群。该集群具有高可用性和容错性,适合生产环境使用。如果有任何问题,请检查日志或参考MinIO 官方文档。作者联系方式vx:2743642415。
3629 57
|
11月前
|
人工智能 API 开发者
狂揽7.5k星!这款开源API网关彻底解放开发者:一键聚合GPT-4、Suno、Midjourney,还能在线充值!
New API 是一款基于 One API 二次开发的 AI 模型接口管理与分发系统,支持多种大模型(如 GPT-4、Suno、Midjourney 等)统一封装为 OpenAI 格式接口调用。其核心功能包括多模型统一网关、企业级权限管控、“推理力度”分级、无魔法访问全球 AI 服务、灵活计费体系及开发者友好设计。技术架构采用 Golang + Gin 框架,支持高并发低延迟,适用于企业内部 AI 中台、多模型 SaaS 平台、学术研究协作及个人开发者工具等场景。项目开源地址:https://github.com/kingbug/new-api。
7541 10
|
人工智能 数据挖掘 BI
高效解决排班难题,从手动到自动的全流程升级
在现代企业中,排班管理是人力资源的重要组成部分,涉及合理分配工作、满足业务需求、提升员工满意度及合规性与成本控制等多个方面。传统手动排班因变量多、效率低等问题,难以满足需求。智能排班工具如板栗看板、Deputy、Zoho People、Humanity 和 Shiftboard 的出现,通过自动化和智能化手段,有效解决了这些难题,提升了排班的效率和准确性。选择合适的工具,可以显著提高HR工作的效能,实现事半功倍的效果。
1242 13
高效解决排班难题,从手动到自动的全流程升级
|
人工智能 缓存 Kubernetes
Kubernetes在AI/大数据领域的 最新进展与大规模实践
根据在[CNCC 2022开源分布式云原生系统技术发展](https://ccf.org.cn/cncc2022/schedule_d_4075)论坛的演讲整理。 ![](https://ata2-img.oss-cn-zhangjiakou.aliyuncs.com/neweditor/08cde176-d1d3-49ae-a1f7-cc025d3f06f3.png) 在云计算技术快速发展的过
2715 73
Kubernetes在AI/大数据领域的最新进展与大规模实践
|
数据采集 缓存 监控
Zabbix性能调优三板斧
在“2024 Zabbix中国峰会”上,上海宏时数据系统有限公司的董玉凡分享了《Zabbix性能调优三板斧》。内容涵盖Zabbix性能瓶颈分析、优化核心原则及实际案例。通过配置优化、数据采集优化和架构扩展优化三大方面,结合自监控数据精准施策,显著提升大规模监控场景下的系统稳定性与效率。案例展示了6000+节点和5000+网络设备的成功优化实践。
565 0
|
存储 Java 应用服务中间件
Java“MissingResourceException”错误解决
Java中的“MissingResourceException”错误通常表示程序在尝试访问资源文件(如属性文件)时未能找到指定的资源。解决此问题的方法包括:确保资源文件存在并位于正确路径,检查文件名和路径是否正确,以及确认类加载器能够访问资源文件。
677 6

热门文章

最新文章

下一篇
开通oss服务