官网
https://kubernetes.io/zh-cn/docs/tasks/run-application/horizontal-pod-autoscale/
原理
基本原理:HPA 通过监控分析控制器控制的所有 Pod 的负载变化情况来确定是否需要调整 Pod 的副本数量
HPA的实现有两个版本:
- autoscaling/v1,只包含了根据CPU指标的检测,稳定版本
- autoscaling/v2,支持根据memory或者用户自定义指标进行伸缩
部署教程
https://github.com/kubernetes-sigs/metrics-server
开始部署hpa
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.6.1/components.yaml
hap部署验证
kubectl top pod # 查看pod资源使用
kubectl top node # 查看node资源使用
创建hpa
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: nginx-hpa-mem
namespace: test # 跟要自动伸缩的deploy要在同一个命名空间
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: nginx-deployment # 这里指定要自动伸缩的deployment的名字
minReplicas: 1
maxReplicas: 10
metrics:
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 80
---
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: nginx-hpa-cpu
namespace: test # 跟要自动伸缩的deploy要在同一个命名空间
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: nginx-deployment # 这里指定要自动伸缩的deployment的名字
minReplicas: 1
maxReplicas: 10
targetCPUUtilizationPercentage: 80
查看结果
kubectl describe deployment nginx-deployment -n test
kubectl describe hpa nginx-hpa-mem -n test
kubectl describe hpa nginx-hpa-cpu -n test
注意事项
Deployment对象必须配置requests的参数,不然无法获取监控数据,也无法通过HPA进行动态伸缩