K8s基础之HPA弹性伸缩

1、概念

HPA全称是Horizontal Pod Autoscaler,翻译成中文是POD水平自动伸缩,HPA可以基于CPU利用率对replication controller、deployment和replicaset中的pod数量进行自动扩缩容
pod自动缩放不适用于无法缩放的对象,比如DaemonSets。
HPA由Kubernetes API资源和控制器实现。资源决定了控制器的行为。控制器会周期性的获取平均CPU利用率,并与目标值相比较后来调整replication controller或deployment中的副本数量。

2、创建测试deployment和service

这里以nginx为案例,通过对nginx网站的压测实现pod的弹性伸缩
首先就是创建一个nginx的deployment
注意:这里如果要为指定pod做HPA,必须要指定request的值,这里用cpu来测试

[root@master ~]# kubectl run nginx --image=nginx:latest --requests=cpu=100m
kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
deployment.apps/nginx created

为nginx创建service,查看暴露端口为30051

[root@master ~]# kubectl expose deploy nginx --type=NodePort --port=80
service/nginx exposed
[root@master ~]#
[root@master ~]# kubectl get svc
NAME         TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.1.0.1      <none>        443/TCP        25d
nginx        NodePort    10.1.101.66   <none>        80:30051/TCP   3s

注意:创建svc之前最好确定目前有没有同名的svc了

访问nginx主页:http://192.168.245.208:30051/
在这里插入图片描述

3、创建HPA

目前HPA已经支持了三个大版本,可以通过kubectl api-versions查看

[root@master k8s]# kubectl api-versions | grep auto
autoscaling/v1
autoscaling/v2beta1
autoscaling/v2beta2

autoscaling/v1 #只支持通过cpu为参考依据,来改变pod副本数
autoscaling/v2beta1 #支持通过cpu、内存、连接数以及用户自定义的资源指标数据为参考依据。
autoscaling/v2beta2 #同上,小的变动

目前比较熟悉的是autoscaling/v1 的版本,这个版本的特点是只支持 CPU 一个指标的弹性伸缩
我们可以简单的通过 kubectl autoscale 命令来创建一个 HPA 资源对象
Controller默认30s轮询一次(可通过 kube-controller-manager 的–horizontal-pod-autoscaler-sync-period 参数进行设置),
查询指定的资源中的 Pod 资源使用率,并且与创建时设定的值和指标做对比,从而实现自动伸缩的功能

可以使用以下命令行创建一个hpa:

[root@master k8s]# kubectl autoscale deployment nginx  --cpu-percent=3  --min=1 --max=10
horizontalpodautoscaler.autoscaling/nginx autoscaled
[root@master k8s]#
[root@master k8s]# kubectl get hpa
NAME    REFERENCE          TARGETS        MINPODS   MAXPODS   REPLICAS   AGE
nginx   Deployment/nginx   <unknown>/3%   1         10        0          9s

也可以使用yaml文件来创建

apiVersion: autoscaling/v1       #hpa的版本
kind: HorizontalPodAutoscaler
metadata:
  name: hpa-test    #hpa的名字
spec:
  minReplicas: 1       #最少pod副本为1
  maxReplicas: 10      #最大pod副本为10
  targetCPUUtilizationPercentage: 3         #设定cpu百分比,超过3%就增加pod数量
  scaleTargetRef:             #指定目标deployment为nginx
    apiVersion: apps/v1
    kind: Deployment
    name: nginx
[root@master k8s]# kubectl create -f hpa.yaml
horizontalpodautoscaler.autoscaling/hpa-test created
[root@master k8s]#
[root@master k8s]#
[root@master k8s]# kubectl get hpa     
NAME       REFERENCE          TARGETS        MINPODS   MAXPODS   REPLICAS   AGE
hpa-test   Deployment/nginx   <unknown>/3%   1         10        0          2s

[root@master k8s]# kubectl get hpa
NAME       REFERENCE          TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
hpa-test   Deployment/nginx   0%/3%     1         10        1          3m33s

hpa刚创建好它还在计算cpu使用率所以状态是unknown,过几分钟再查看就看到计算出的cpu使用率的结果了

在这里插入图片描述
在这里插入图片描述

4、网站压测

准备工作都做好之后,可以配合postman做网站的压力测试了,这里你也可以选用其他压测工具
postman是英文的,我这里安装了个中文版的,版本:8.7.0
地址如下:postman中文版
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5、验证HPA效果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
压测停止之后过了一段时间之后cpu使用率降下来了,小于3%之后,pod接着就会进行缩容的操作,pod数量就会减少

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值