k8s之HorizontalPodAutoscaler
HPA(pod水平自动伸缩)介绍
在前面的学习中,我们可以通过手工执行kubectl scale命令实现pod扩容,但是这显然不符合k8s的定位目标:自动化、智能化。
k8s期望可以通过监测pod的使用情况,实现pod数量的自动调整,于是就产生了HPA这种控制器
HPA可以获取每个pod利用率,然后和HPA中定义的指标进行对比,同时计算出需要伸缩的具体值,最后实现pod数量的调整。
其实HPA与之前的Deployment一样,也属于一种k8s资源对象,它通过追踪分析目标pod的负载变化情况,来确定是否需要针对性地调整目标pod的副本数。
说白了,就相当于你有10个pod在运行,但是pod利用率只有10%,那么HPA会根据指标自动给你删除其他不需要的pod。
安装metrics-server
metrics-server可以用来收集集群中的资源使用情况#安装git[root@master ~]# yum install git -y
#获取metrics-server,注意使用的版本#注意,由于国内访问github较慢的原因,从github上下载文件可能会失败,建议多试几次或者使用代理
[root@master
~]# git clone -b v0.3.6 https://github.com/kubernetes-incubator/metrics-server
#修改deployment,注意修改的是镜像和初始化参数[root@master ~]# cd metrics-server/deploy/1.8+/
[root@master 1.8+]# vim metrics-server-deployment.yaml
#添加如下选项hostNetwork: true
registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.6
args:
- --kubelet-insecure-tls- --kubelet-preferred-address-types=InternalIP,Hostname,InternalDNS,ExternalDNS,ExternalIP
效果如下:
查看安装情况
#安装metrics-server[root@master
1.8+]# kubectl apply -f ./clusterrole.rbac.authorization.k8s.io
/system:aggregated-metrics-reader createdclusterrolebinding.rbac.authorization.k8s.io
/metrics-server:system:auth-delegator createdrolebinding.rbac.authorization.k8s.io
/metrics-server-auth-reader createdapiservice.apiregistration.k8s.io
/v1beta1.metrics.k8s.io createdserviceaccount
/metrics-server createddeployment.apps
/metrics-server createdservice
/metrics-server createdclusterrole.rbac.authorization.k8s.io
/system:metrics-server createdclusterrolebinding.rbac.authorization.k8s.io
/system:metrics-server created#查看pod
[root@master
1.8+]# kubectl get pods -n kube-systemmetrics
-server-6b976979db-mrng6 1/1 Running 0 39s#使用kubectl top node查看资源使用情况
[root@master
1.8+]# kubectl top nodeNAME CPU(cores) CPU
% MEMORY(bytes) MEMORY%master 83m
4% 803Mi 46%node1 37m
1% 330Mi 19%node2
<unknown> <unknown> <unknown> <unknown>[root@master
1.8+]# kubectl top pod -n kube-systemNAME CPU(cores) MEMORY(bytes)
coredns
-6955765f44-pxnqm 2m 11Micoredns
-6955765f44-stjjf 2m 12Mietcd
-master 12m 44Mikube
-apiserver-master 28m 356Mikube
-controller-manager-master 13m 39Mikube
-flannel-ds-m8pv6 3m 32Mikube
-flannel-ds-rszpm 2m 31Mikube
-proxy-dz88s 1m 14Mikube
-proxy-smj5t 1m 14Mikube
-scheduler-master 3m 16Mimetrics
-server-6b976979db-mrng6 2m 11Mi
至此,metrics-server安装完成
准备deployment和service
使用命令行工具
#创建deployment[root@master
1.8+]# kubectl run nginx --image=nginx:1.17.1 --requests=cpu=100m -n dev#创建service
[root@master
~]# kubectl expose deploy nginx --type=NodePort --port=80 -n devservice
/nginx exposed#查看
[root@master
~]# kubectl get deploy,pod,svc -n devNAME READY UP
-TO-DATE AVAILABLE AGEdeployment.apps
/nginx 1/111 5m4sNAME READY STATUS RESTARTS AGE
pod
/nginx-778cb5fb7b-58jrz 1/1 Running 0 5m4sNAME TYPE CLUSTER
-IP EXTERNAL-IP PORT(S) AGEservice
/nginx NodePort 10.101.205.0 <none> 80:31313/TCP 28s
部署HPA
创建pc-hpa.yaml
apiVersion: autoscaling/v1kind: HorizontalPodAutoscaler
metadata:
name: pc
-hpanamespace: devspec:
minReplicas:
1 #最小pod数量maxReplicas:
10 #最大pod数量targetCPUUtilizationPercentage:
3 #cpu使用率指标,意思是当pod使用率达到3%之后就增加新的podscaleTargetRef: #指定要控制的nginx信息
apiVersion: apps
/v1kind: Deployment
name: nginx
使用yaml文件
[root@master ~]# vim pc-hpa.yaml[root@master
~]# kubectl create -f pc-hpa.yamlhorizontalpodautoscaler.autoscaling
/pc-hpa created[root@master
~]# kubectl get hpa -n devNAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
pc
-hpa Deployment/nginx 0%/3% 1101 61s
进行hpa压力测试
新建窗口
新建三个xshell窗口,第一个检测deploy,第二个检测pod,第三个检测hpa
在第二个窗口中输入
[root@master ~]# kubectl get deploy -n dev -wNAME READY UP
-TO-DATE AVAILABLE AGEnginx
1/111 22m
在第三个窗口中输入
[root@master ~]# kubectl get pod -n dev -wNAME READY STATUS RESTARTS AGE
nginx
-778cb5fb7b-58jrz 1/1 Running 0 23m
在第四个窗口中输入
[root@master ~]# kubectl get hpa -n dev -wNAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
pc
-hpa Deployment/nginx 0%/3% 1101 6m56s
使用postman进行压力测试
测试访问,使用postman进行访问,发现能够访问通
使用postman新建一个runner tab,将要测试的地址拖进去,设置压测的数量为10000,点击运行
查看三个监控窗口
deploy监控窗口
pod监控窗口
hpa监控窗口
可以发现由于pod使用率的增加,pod在不断地被创建,最后总共创建了10个pod,即我们设置的最大阈值
压力测试结束之后,在等几分钟,再次查看pod的情况,可以发现,大约10分钟之后,由于pod使用率降低,pod在不断地被删除,最后只剩一个pod
以上是 k8s之HorizontalPodAutoscaler 的全部内容, 来源链接: utcz.com/z/519830.html