K8s基础之HPA弹性伸缩
HPA弹性伸缩1、概念2、创建测试deployment和service3、创建HPA4、网站压测5、验证HPA效果1、概念HPA全称是Horizontal Pod Autoscaler,翻译成中文是POD水平自动伸缩,HPA可以基于CPU利用率对replication controller、deployment和replicaset中的pod数量进行自动扩缩容pod自动缩放不适用于无法缩放的对象,
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数量就会减少
更多推荐
所有评论(0)