K8S之HPA 水平自动扩缩

总结:

HPA作用于工作负载上, 可以实现Pod副本的动态缩扩容

HPA的缩扩容阈值最初只有CPU和内存的使用率, 现在多出了CPU和内存使用量, 以及入带宽和出带宽。可结合业务场景定制阈值

容器启动时可能会使用过量资源, 因此HPA具有一定的冷却时间, 以等待容器启动完毕, 该时间可在kubelet启动参数中更改

一、介绍:
HPA(Horizontal Pod Autoscaler, 水平扩展)是Kubernetes的一种机制, 它可以根据Pod的CPU或内存负载自动的扩容以及缩容, 从而解决Pod负载过高时需要手动扩容的情况。HPA是k8s的一种资源, 它周期性采集指定Pod的CPU和内存使用数据, 会根据之前设定的机制计算决定是否扩容或缩容
HPA支持多副本控制的工作负载, 例如Deployment, Replication Controller, ReplicaSet, StatefulSet
不适用于不可以扩缩的对象(如Damonset)
指标:
1.最大扩容数量
2.最小缩容数量
3.扩缩容阈值
4.工作负载率

二、计算机制:
期望副本数量·= [当前副本数 * (当前指标 / 期望指标)]

三、实现原理:
该机制主要是基于kubernetes api 资源与controller 实现。api决定controller行为,controller周期性调整副本数量。

四、创建HPA
两种方式:命令行与yaml文件
命令行:
kubectl 以标准方式支持 HPA。 我们可以通过 kubectl create 命令创建一个 HPA 对象, 通过 kubectl get hpa 命令来获取所有 HPA 对象, 通过 kubectl describe hpa 命令来查看 HPA 对象的详细信息。 最后,可以使用 kubectl delete hpa 命令删除对象。

也可使用 autoscaler 自动设置在kubernetes集群中运行的pod数量

kubectl autoscale (-f FILENAME | TYPE NAME | TYPE/NAME) [–min=MINPODS] –max=MAXPODS [–cpu-percent=CPU]

参数解释:
-f, TYPE NAME, TYPE/NAME: 所需绑定的工作负载
–min: 最小缩容数
–min: 最大扩容数
–cpu-percent: cpu缩扩容阈值, 单位为百分比

[root@dce-172-30-40-237 tmp]# kubectl autoscale deployment my-nginx --cpu-percent=50 --min=1 --max=10
horizontalpodautoscaler.autoscaling/my-nginx autoscaled

一个绑定my-nginx的HPA, 缩扩容数量范围为1至10, cpu阈值为50%

Yaml配置文件:

hpa.yaml

apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
  name: hpa-test
  namespace: default
spec:
  maxReplicas: 10
  minReplicas: 1
  scaleTargetRef:
    apiVersion: extensions/v1beta1
    kind: Deployment
    name: deployment-nginx
  metrics:
  - type: Resource
    resource:
      name: cpu
      targetAverageUtilization: 60

spec.scaleTargetRef指定需绑定的工作负载

spec.metrics[0].resource.name指定资源名, 可以为cpu或memory

targetAverageUtilization指定目标阈值

maxReplicas指定最大副本扩容数

minReplicas指定最小副本扩容数

创建HPA

[root@dce-172-30-40-237 tmp]# kubectl apply -f hpa.yaml
horizontalpodautoscaler.autoscaling/hpa-test created

不断请求该service,一段时间后,发现副本数量变化

[root@dce-172-30-40-237 tmp]# kubectl get hpa -o wide
NAME       REFERENCE                     TARGETS         MINPODS   MAXPODS   REPLICAS   AGE
hpa-test   Deployment/deployment-nginx   <unknown>/60%   1         10        4          20m
my-nginx   Deployment/my-nginx           <unknown>/50%   1         10        3          33m
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值