1、HPA是什么?
HorizontalPodAutoscaler(HPA)是k8s提供的一种用于让pod根据负载进行扩缩容的一种机制,根据占用的内存或cpu使用率,从而去判断pod是否需要扩缩容,通过去监控pod或node的负载情况,从而去对Deployment、ReplicaSet、StatefulSet等可进行副本设置的控制器进行副本数量的调整。
对于pod,在业务高峰期时,如果手动进行pod扩容,则会相对比较浪费时间一些,且扩容应该扩多少的pod也不好决定,特别是对于一些夜间突然业务请求增长,电话联系我们去紧急救火,往往是比较繁琐的,使用HPA的情况,他可以对我们的pod进行自动扩容,通过设置好他的相关配置项,最大pod扩容数量及指标等。
实现HPA自动扩容的需要准备以下几项
- 镜像版本:metrics-server:v0.6.4
- 配置文件:kubernetes-incubator-metrics-server配置文件:
- hpa、deploy、svc的yaml文件
- 压测工具:apifox
2、metrics工具
metrics工具是一个用于收集和监控k8s的pod和node的负载信息,如cpu使用率、内存使用率。
通过请求apiserver的方式,将数据进行获取,并可使用kubectl top pod/node进行展现出来。
- 配置文件下载地址:https://github.com/hauhauwoaini/kubernetes-incubator-metrics-server
- 镜像拉取地址:registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server:v0.6.4
根据自己的k8s集群版本选择对应的配置文件
- 版本为1.8及以上或1.7及以下,进入对应版本目录

需要下载并运行的yaml文件

监测的pod和node指标
- 使用:kubectl top node/pod 命令查看指标信息

3、资源清单准备
- 环境:openEuler 24.03(国产欧拉)
- k8s版本**:** v1.28.15
HPA资源清单信息
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: hpa-test01
namespace: test
spec:
maxReplicas: 10 #可扩容的最大副本数
minReplicas: 3 #最小副本数
scaleTargetRef: #用于指定要监控的指标和监控的目标对象
apiVersion: apps/v1
kind: Deployment
name: dp01
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 5 #平均cpu使用率达到5%时,hpa自动调整副本数量
Deployment资源清单信息
apiVersion: apps/v1
kind: Deployment
metadata:
name: dp01
namespace: test
spec:
replicas: 3
selector:
matchLabels:
#env: abc
run: hello
template:
metadata:
name: ng1
labels:
#env: abc
run: hello
spec:
containers:
- name: c1
image: #镜像替换为自己的镜像
ports:
- containerPort: 85 #端口可设置为自己容器暴露的端口
command:
["nginx","-g","daemon off;"]
env:
- name: dev
value: test
resources:
requests:
memory: "10Mi"
cpu: "250m"
limits:
memory: "200Mi"
cpu: "2000m"
svc资源清单配置
apiVersion: v1
kind: Service
metadata:
name: deploy-svc
namespace: test
spec:
type: NodePort
selector:
run: hello
ports:
- port: 8989
targetPort: 85 #端口可设置为自己容器暴露的端口
nodePort: 31902
4、压测工具Apifox
这是一个国产的用于接口测试应用程序软件,测试方式就是通过一段时间内向pod对应的svc地址,并行发送数个请求,从而实现负载变化,小伙伴也可以查找相关压测工具或者postman进行测试,我们这里就先用Apifox来进行实验。
下载地址:https://apifox.com/

设置请求ip与端口及压测配置 
5、运行情况
压测过程:随着百分比的增加,超过设置的2%时,pod也随之增加,最多增加到我们设置的10个
