官网
https://kubernetes.io/zh-cn/docs/tasks/run-application/horizontal-pod-autoscale/
原理
基本原理:HPA 通过监控分析控制器控制的所有 Pod 的负载变化情况来确定是否需要调整 Pod 的副本数量
HPA的实现有两个版本:
- autoscaling/v1,只包含了根据CPU指标的检测,稳定版本
- autoscaling/v2,支持根据memory或者用户自定义指标进行伸缩
- metric-server,只是数据的中转和聚合,两者都是调用的 kubelet 的 api 接口获取的数据,而 kubelet 代码中实际采集指标的是 cadvisor 模块,你可以在 node 节点访问 10250 端口获取监控数据:
- Kubelet Summary metrics: https://127.0.0.1:10250/metrics,暴露 node、pod 汇总数据
- Cadvisor metrics: https://127.0.0.1:10250/metrics/cadvisor,暴露 container 维度数据
部署教程
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进行动态伸缩
标签:name,缩放,metrics,nginx,https,deployment,Pod,k8s,hpa From: https://blog.51cto.com/yht1990/5847959