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

相关推荐
张忠琳1 小时前
【client-go v0.36.1】tools/cache 深度分析(下篇)— RealFIFO 深度、集成架构、生命周期、设计模式总结
云原生·kubernetes·cache·informer·client-go
浩风祭月1 小时前
一个开发者的“看门狗”:我把服务器监控从被动告警变成了主动预防
后端·docker
张忠琳2 小时前
【client-go v0.36.1】(store Part 2)Store 超深度分析 — threadSafeMap 核心、索引体系、RV追踪、事务机制
云原生·kubernetes·informer·store·client-go
sbjdhjd3 小时前
04(上)| k8s中的微服务
微服务·云原生·kubernetes·开源·云计算·excel·kubelet
梦想的颜色5 小时前
硬核|Docker从入门到精通:镜像构建、仓库推送、Compose编排、生产部署全攻略
运维·服务器·docker·容器·部署·环境·镜像
SXJR5 小时前
使用docker 部署向量数据库Milvus
数据库·docker·容器·milvus·向量数据库
qq_452396235 小时前
第二篇:《K8s 集群搭建:Minikube、kubeadm、Kind 对比与实操》
容器·kubernetes·kind
jingqiulyue6 小时前
docker run出现exited或者不断restart怎么办
docker·容器
小哈里6 小时前
【K8S】OCI标准下的企业级镜像治理:Harbor+Skopeo+Trivy 最佳实践
云原生·容器·kubernetes·harbor·镜像·skopen
花间相见6 小时前
【Kubernetes02】—— 使用 kubeadm 从零搭建 K8s 集群(实操避坑版)
云原生·容器·kubernetes