众所周知,kubernetes一大特色是可以自动对POD进行扩缩容,因为应用的资源使用率通常都有高峰和低谷的时候,如何削峰填谷,提高集群的整体资源利用率,让service中的Pod个数自动调整呢?这就有赖于Horizontal Pod Autoscaling了,顾名思义,使Pod水平自动缩放。
而kubernetes实际上是可以支持VPA(垂直)和HPA(水平)两种扩缩容的方式,通俗的来讲,VPA就是堆配置,调整现有的POD资源,而HPA就是增加POD,在实际的生产环境中一般使用HPA就可以了,VPA需要停止POD,因此使用的场景较少。
使用HPA之前,需要安装metrics-server或者heapster,这样才可以获取节点和pod的资源使用情况。检查metrics-server和heapster是否可用最简单的办法是使用top命令,查看是否可以获取到pod的资源使用情况。
![[kubernetes] HPA实现自动水平伸缩POD_nginx](https://file.cfanz.cn/uploads/png/2022/03/31/23/83575755bP.png)
01 资源准备
1)创建pod,一定要配置resources
[root@host21 hpa]# cat nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx
name: nginx
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- image: harbor.od.com/public/nginx:v1.7.9
name: nginx
resources:
limits: # 最多可以占用这么多资源
cpu: "50m"
memory: 20Mi
requests: # 保证这个pod初始可以分配这么多资源
cpu: "50m"
memory: 20Mi2)准备Service
[root@host21 hpa]# cat nginx-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-svc
spec:
ports:
- port: 80
targetPort: 80
protocol: TCP
selector:
app: nginx3)应用
kubectl apply -f nginx.yaml
kubectl apply -f nginx-svc.yaml4)查看
![[kubernetes] HPA实现自动水平伸缩POD_top命令_02](https://file.cfanz.cn/uploads/png/2022/03/31/23/6B6477C88L.png)
02 创建HPA
1)创建HPA
[root@host21 hpa]# cat nginx-hpa.yaml
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: nginx-hpa
spec:
maxReplicas: 5 # 最大pod数量
minReplicas: 1 # 最小pod数量
scaleTargetRef: # 需要扩缩容的资源
apiVersion: apps/v1
kind: Deployment
name: nginx
targetCPUUtilizationPercentage: 50 # 使用率超过50%就扩容2)应用
kubectl apply -f nginx-hpa.yaml3)查看
![[kubernetes] HPA实现自动水平伸缩POD_nginx_03](https://file.cfanz.cn/uploads/png/2022/03/31/23/AY78a44HU5.png)
4)curl测试,可以看到pods数量已经变为2了
![[kubernetes] HPA实现自动水平伸缩POD_生产环境_04](https://file.cfanz.cn/uploads/png/2022/03/31/23/454VbO295a.png)
5)自动扩容了一个pod
![[kubernetes] HPA实现自动水平伸缩POD_生产环境_05](https://file.cfanz.cn/uploads/png/2022/03/31/23/1073227L70.png)
6)停止curl后,使用率会降下来,pod数量会被缩容到1
![[kubernetes] HPA实现自动水平伸缩POD_top命令_06](https://file.cfanz.cn/uploads/png/2022/03/31/23/7b4Gf2ebc3.png)
![[kubernetes] HPA实现自动水平伸缩POD_生产环境_07](https://file.cfanz.cn/uploads/jpeg/2022/03/30/8/O21Z92Off4.jpeg)










