1、环境:kubeadm安装的k8s 1.19.2版本
2、Horizontal Pod Autoscaler的操作对象是Replication Controller、ReplicaSet或Deployment对应的Pod,根据观察到的CPU使用量与用户的阈值进行比对,做出是否需要增减实例数量的决策
3、安装metrics-server来采集pod的cpu指标,先把资源文件下载下来
wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
因为官方默认的是使用Google镜像,国内是无法pull下来,所以我们先从dockerhub上面把镜像pull下来
docker pull phperall/metrics-server:v0.4.1
docker tag phperall/metrics-server:v0.4.1 k8s.gcr.io/metrics-server/metrics-server:v0.4.1
把标签改成跟配置里面的一致
部署metrics-server
kubectl apply -f components.yaml
kubectl get pod -n kube-system |grep metrics-server
4、配置一个pod资源,设置cup和内存限制
加上这一段配置
resources:
requests:
memory: 50Mi
cpu: 50m
5、创建一个hpa资源,vim stream-hpa.yml ,也可以用kubectl命令来创建
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: stream-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: appointment-stream-deployment
minReplicas: 3
maxReplicas: 10
targetCPUUtilizationPercentage: 5
保存之后,kubectl apply -f stream-hpa.yml
查看一下,已经创建好了hpa,pod资源的指标也能监控到,
6、接下来压力测试,自动伸缩效果,我这里是配置好了ingress的,所以用域名压测
ab -n 500000 -c 100 https://test.smartracing.cn/v1/appointment-stream/health
在node节点上查看服务器的负载和pod的cpu情况
从上面可以看出,随着cpu压力增大,pod已经自动拓展了,然后停掉当前的压测,在观察
大概十分之后,pod又恢复了3个副本,跟我预期的一致。
总结遇到的问题:
1、新版k8s已经弃用了heapster,使用metrics来代替,安装一个metrics就行了
2、创建hpa之后报错
这个情况是metrics无法获取到pod的cpu指标,修改kube-controller-manager.yaml,新增一个选项
--horizontal-pod-autoscaler-use-rest-clients=true
改完之后,重启kubelet
systemctl restart kubelet.service
删掉hpa重新创建