【k8s】HPA实现pod的自动扩缩容

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进行展现出来。

根据自己的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个

相关推荐
云游牧者9 小时前
K8S故障排查三板斧-CSDN博客
运维·docker·云原生·kubernetes·k8s·容器化·故障排查
AIDF202611 小时前
K8s 完整知识体系(含架构图)
云原生·容器·kubernetes
极客先躯11 小时前
高级java每日一道面试题-2025年12月09日-实战篇[Docker]-如何配置 Docker 的日志驱动?有哪些日志驱动可选?
java·docker·日志驱动的作用与配置层级·日志驱动全览与对比·日志驱动配置的要点·日志标签定制·容器与宿主机时间戳
霜落花轻扬12 小时前
docker 开发环境卡死的解决办法
运维·docker·容器
@王先生112 小时前
docker安装固定版本20.10 k8s 1.23.17兼容版本
docker·容器·kubernetes
眷蓝天12 小时前
Kubernetes RBAC 认证机制
云原生·容器·kubernetes
岳来12 小时前
k8s pod 重启策略RestartPolicy 学习
容器·kubernetes·pod·restartpolicy