【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 天前
基于 Arthas 的多集群在线诊断系统设计与实现
kubernetes
Patrick_Wilson4 天前
从「改个端口」到 502:Next.js on k8s 的容器端口、Service 映射与 env 覆盖
docker·kubernetes·next.js
探索云原生4 天前
K8s 1.36 这个 GA 特性,把 initContainer 拉模型的 hack 干掉了
ai·云原生·kubernetes
Suroy4 天前
DockerView-Go:用 Go 写一个终端 Docker 监控工具,顺便做了个 Web 仪表盘
docker
云恒要逆袭4 天前
运行你的第一个Docker容器
后端·docker·容器
宋均浩5 天前
# Docker 镜像瘦身实战:从 1.2G 到 80MB 的五个优化步骤
ci/cd·docker
Java之美5 天前
一次k8s升级引发的DevicePlugin注册失败
云原生·kubernetes
程序员老赵6 天前
10 分钟部署 OpenCode:Docker 一键安装,浏览器打开就能用 AI 写代码(附完整命令与排错)
docker·容器·ai编程
WangMingHua1116 天前
LM Studio Docker 部署——本地大模型一键启动
docker