Horizontal Pod Autoscaler(HPA)
前面可以实现通过手工执行`kubectl scale`命令实现Pod扩容或缩容,但是这显然不符合Kubernetes的定位目标--自动化、智能化。
Kubernetes期望可以实现通过监测Pod的使用情况,实现pod数量的自动调整,于是就产生了Horizontal Pod Autoscaler(HPA)这种控制器。
HPA可以获取每个Pod利用率,然后和HPA中定义的指标进行对比,同时计算出需要伸缩的具体值,最后实现Pod的数量的调整。
其实HPA与之前的Deployment一样,也属于一种Kubernetes资源对象,它通过追踪分析RC控制的所有目标Pod的负载变化情况,来确定是否需要针对性地调整目标Pod的副本数,这是HPA的实现原理。
接下来,我们来做一个实验
安装metrics-server(v0.3.6)
# 安装git [root@master ~]# yum install git -y
# 获取metrics-server, 注意使用的版本 [root@master ~]# git clone -b v0.3.6 https://github.com/kubernetes-incubator/metrics-server
# 修改deployment, 注意修改的是镜像和初始化参数 [root@master ~]# cd /root/metrics-server/deploy/1.8+/ [root@master 1.8+]# vim metrics-server-deployment.yaml
按图中添加下面选项 hostNetwork: true image: 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 ./
# 查看pod运行情况
[root@master 1.8+]# kubectl get pod -n kube-system
# 使用kubectl top node 查看资源使用情况
注:刚安装好,metrics-server要先进行数据采集,需要一点儿时间,要稍等一会再执行命令查看
[root@master 1.8+]# kubectl top node [root@master 1.8+]# kubectl top pod -n kube-system
# 至此,metrics-server安装完成
准备deployment和servie
# 创建deployment
[root@master 1.8+]# kubectl run nginx --image=nginx:1.17.1 --requests=cpu=100m -n dev
注:1.18版本及以后用kubectl run不能创建deployment,建议参考下面操作
用命令创建deployment,生成yaml
生成deployment的yaml文件,并修改资源限制 [root@master ~]# kubectl create deployment nginx --image=nginx:1.17.1 -n dev --dry-run=client -o yaml > nginx.yaml [root@master ~]# kubectl create -f nginx.yaml deployment.apps/nginx created [root@master ~]# kubectl get deploy,pod -n dev
创建service
[root@master ~]# kubectl expose deployment nginx --type=NodePort --port=80 -n dev [root@master ~]# kubectl get deploy,pod,svc -n dev
部署HPA
创建pc-hpa.yaml文件,内容如下:
apiVersion: autoscaling/v1 kind: HorizontalPodAutoscaler metadata: name: pc-hpa namespace: dev spec: minReplicas: 1 #最小pod数量 maxReplicas: 10 #最大pod数量 targetCPUUtilizationPercentage: 3 # CPU使用率指标,这里限制为3% scaleTargetRef: # 指定要控制的nginx信息 apiVersion: apps/v1 kind: Deployment name: nginx
# 创建hpa
[root@master ~]# vim pc-hpa.yaml [root@master ~]# kubectl create -f pc-hpa.yaml
# 查看hpa
[root@master ~]# kubectl get hpa -n dev
测试
192.168.1.50:32178
这里使用脚本测试
vim test.sh #!bin/bash while true do curl 192.168.1.50:32178 &> /dev/null done chmod 755 test.sh bash test.sh
hpa变化
[root@master ~]# kubectl get hpa -n dev -w
deployment变化
[root@master ~]# kubectl get deployment -n dev -w
pod变化
[root@master ~]# kubectl get pods -n dev -w
参考
黑马B站k8s课程https://www.bilibili.com/video/BV1Qv41167ck/ https://gitee.com/yooome/golang/blob/main/k8s%E8%AF%A6%E7%BB%86%E6%95%99%E7%A8%8B-%E8%B0%83%E6%95%B4%E7%89%88/k8s%E8%AF%A6%E7%BB%86%E6%95%99%E7%A8%8B.md https://www.yuque.com/fairy-era/yg511q/xyqxge标签:kubectl,dev,nginx,详解,master,deployment,HPA,root,Pod From: https://www.cnblogs.com/gys001/p/16916462.html