【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个

相关推荐
我就是你毛毛哥2 小时前
Docker 安装 Jenkins JDK8 版
java·docker·jenkins
岁岁种桃花儿2 小时前
kubenetes从入门到上天系列第二十六篇:Kubernetes的Istio服务网格实战
java·kubernetes·istio
Lucas6492 小时前
K8S-从理论到实战
云原生·容器·kubernetes
lclcooky2 小时前
docker下搭建redis集群
redis·docker·容器
上海运维Q先生2 小时前
K8s环境下在Pod中运行Pod中没有的命令-----nsenter
容器·kubernetes·dubbo
dustcell.2 小时前
docker容器
运维·docker·容器
Forget_85502 小时前
RHEL——Docker容器技术
运维·docker·容器
sxhcwgcy3 小时前
IDEA+Docker一键部署项目SpringBoot项目
spring boot·docker·intellij-idea
jiankeljx3 小时前
docker离线安装及部署各类中间件(x86系统架构)
docker·中间件·系统架构