2025,每天10分钟,跟我学K8S(二十三)- 对象属性 - HPA

        上一篇讲解了Pod的资源限制,那现实情况会出现,当业务流量上涨后,Pod对资源的占用也上涨了。之前分配的资源不够用了。不可能再又手动的去调整yaml文件,重新创建占用更多资源的pod吧?Kubernetes为我们提供了这样一个资源对象:Horizontal Pod Autoscaling(Pod水平自动伸缩),简称HPAHAP通过监控分析RC或者Deployment控制的所有Pod的负载变化情况来确定是否需要调整Pod的副本数量,这是HPA最基本的原理。

HPA概念

HPA是Kubernetes中的一个控制器,它可以基于指定的指标(如CPU利用率、内存利用率或自定义指标)自动扩展或缩减Pod的数量。这样,当应用程序的负载增加时,HPA会自动增加Pod的数量以分散负载;当负载减少时,则会减少Pod的数量以节省资源。

HPA工作原理

  1. 监控指标‌:HPA通过Kubernetes Metrics API持续监控指定目标对象(如Deployment、StatefulSet或ReplicationController等)关联的Pods的资源使用情况。默认情况下,它主要关注CPU利用率,但也可以配置为监控其他资源或自定义指标。
  2. 阈值设定‌:用户需要为HPA设置最小和最大Pod副本数,并指定一个资源使用率的目标阈值。例如,可以设置当CPU使用率达到80%时触发扩展。
  3. 评估及决策‌:当HPA检测到实际平均资源利用率超过用户设定的目标阈值时,它会决定增加Pod副本的数量;反之,当资源利用率低于另一个较低的阈值时,可能会减少Pod副本的数量。
  4. 执行扩展/缩容‌:根据上述决策,HPA会更新目标对象的.spec.replicas字段,从而触发Kubernetes控制器(如Deployment Controller)去创建或删除相应的Pod实例,达到调整副本数量的目的。

HPA举例

还是用上一章创建的example-deployment为例:

root@k8s-master:~# cat dep.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: example-deployment
  namespace: dev
spec:
  replicas: 3 # 副本数
  selector:
    matchLabels:
      app: example-app
  template:
    metadata:
      labels:
        app: example-app
    spec:
      containers:
      - name: nginx-res
        image: m.daocloud.io/docker.io/nginx # 使用nginx镜像
        ports:
        - containerPort: 80
        resources: # 资源请求和限制
          requests:
            memory: "64Mi" # 内存请求
            cpu: "250m" # CPU请求
          limits:
            memory: "128Mi" # 内存限制
            cpu: "500m" # CPU限制

从yaml文件中知道,做了资源限制,并且启动了3个pod

.

现在我们来创建一个HPA,可以使用kubectl autoscale命令来创建:

root@k8s-master:~# kubectl autoscale -n dev  deployment example-deployment --cpu-percent=10 --min=1 --max=5
horizontalpodautoscaler.autoscaling/example-deployment autoscaled

查看这个HPA

root@k8s-master:~# kubectl get hpa -n dev
NAME                 REFERENCE                       TARGETS              MINPODS   MAXPODS   REPLICAS   AGE
example-deployment   Deployment/example-deployment   cpu: <unknown>/10%   1         5         3          19s

此命令创建了一个关联资源 example-deployment 的HPA,最小的 pod 副本数为1,最大为5。HPA会根据设定的 cpu使用率(10%)动态的加或者cpod数量。当cpu超过限制后,HPA会自动扩容这个example-deployment的Deployment,将pod副本变为最大5。

当然除了通过命令直接创建HPA,也可以在yaml文件中修改,下面yaml文件中在dev的namespace创建了一个名为example-hpa 的HPA,最大副本为5,最小为1,绑定的是名为example-deployment的Deployment对象。CPU利用率目标阈值为50

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: example-hpa
  namespace: dev
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: example-deployment # 与上面的Deployment名称一致
  minReplicas: 1 # 最小副本数
  maxReplicas: 5 # 最大副本数
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50 # CPU利用率目标阈值

查看hpa,注意这里cpu后面出现了一个unknown,这是由于HPA对资源占用的监控是依赖于Metrics监控 的,这个到后面讲解安装后,就会显示。

root@k8s-master:~# kubectl apply -f example-hpa.yaml
horizontalpodautoscaler.autoscaling/example-hpa unchanged
root@k8s-master:~# 
root@k8s-master:~# kubectl get hpa -n dev
NAME                 REFERENCE                       TARGETS              MINPODS   MAXPODS   REPLICAS   AGE
example-deployment   Deployment/example-deployment   cpu: <unknown>/10%   1         5         3          18m

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值