一. 前言
我们可以通过–replicas的方式来扩缩容,或者是通过dashboard的方式界面化的扩缩容。其实都需要手动,如果kubernetes可以通过当时容器使用情况来自动的扩缩容,其实有的可以进行预知,有的根本就是不确定的,纯手工去做也是不现实的人海战术。 Horizontal Pod Autoscaling,简称HPA, Kubernetes通过HPA的设定,实现了容器的弹性伸缩功能。对于Kubernetes中的POD集群来说,HPA可以实现很多自动化功能,比如当POD中业务负载上升的时候,可以创建新的POD来保证业务系统稳定运行,当POD中业务负载下降的时候,可以销毁POD来减少资源的浪费。当前的弹性伸缩的指标包括:CPU,内存,并发数,包传输大小。HPA控制器默认每隔30秒就会运行一次,一旦创建的HPA,我们就可以通过命令查看获取到的当前指标信息。
二. 原理
metrics-server 通过 kube-apiserver 发现所有节点,然后调用 kubelet APIs(通过 https 接口)获得各节点(Node)和 Pod 的 CPU、Memory 等资源使用情况。因为k8s的api-server将所有的数据持久化到了etcd中,显然k8s本身不能处理这种频率的采集,而且这种监控数据变化快且都是临时数据,因此需要有一个组件单独处理他们,k8s版本只存放部分在内存中,于是metric-server的概念诞生了。
三. Metrics-Server部署
1. 查看官网指导说明
![在这里插入图片描述](https://img-blog.csdnimg.cn/2020070919363761.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FpbnFpbmRlMTIz,size_16,color_FFFFFF,t_70)
2. 下载components.yaml文件
wget https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.3.6/components.yaml
3. 修改配置文件components.yaml
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200709193848886.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FpbnFpbmRlMTIz,size_16,color_FFFFFF,t_70)
4. 执行
kubectl apply components.yaml
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200709193946374.png)
5. 查看
kubectl top node
![在这里插入图片描述](https://img-blog.csdnimg.cn/2020070919413380.png)
kubectl top pods -n kube-system
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200709194311753.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FpbnFpbmRlMTIz,size_16,color_FFFFFF,t_70)
kubectl cluster-info
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200709194432580.png)
四. 自动扩容
1. 在docker-project的代码中增加测试用例,重新打包镜像,上传到伺服
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200710182041753.png)
2. 修改docker-project.yaml配置文件,增加资源限制
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200710182129129.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FpbnFpbmRlMTIz,size_16,color_FFFFFF,t_70)
3. 运行
kubectl apply -f docker-project.yaml
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200710141539906.png)
4. 创建自动扩容的hpa
kubectl autoscale deployment docker-project --min=1 --max=3
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200710181936486.png)
5. 查看hpa
kubectl get hpa
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200710182001146.png)
6. cpu测试
通过shell脚本调用:http://192.168.214.128:31000/api/testCpu
#!/bin/bash
int=1
while(( $int |