kubernetes Horizontal Pod Autoscaler
https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/
首先必须确保集群中已经安装metrics-server的组件,否则无法获取集群内资源数据,无法进行以下操作。 关指标可以从metrics.k8s.io、custom.metrics.k8s.io或external.metrics.k8s.io等API获取。 kubectl api-versions |grep metrics
原理:
通过集群内的资源监控系统(metrics-server已经代替heaspter ),
Horizontal Pod Autoscaler根据观察到的CPU利用率(或在其他应用程序提供的Beta支持下,根据观察到的CPU利用率)自动缩放复制控制器,部署,副本集或状态集中的Pod数量
通过kubectl api-versions可以看到,目前有3个版本:
autoscaling/v1 #只支持通过cpu为参考依据,来改变pod副本数
autoscaling/v2beta1 # 1.8以上 支持通过cpu、内存、连接数以及用户自定义的资源指标数据为参考依据。
autoscaling/v2beta2 #同上,小的变动
kubectl explain hpa ##默认查询到的是autoscaling/v1版本
kubectl explain hpa --api-version=autoscaling/v2beta1 #可以使用--api-version指明版本
HPA多个指标和自定义指标
配置HPA 当cpu=80或者内存=80自动扩容 最小4个pod 最大8个pod
HPA yaml文件:
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
name:tv-web-hpa
namespace: prod
spec:
minReplicas: 4 ##最小1个副本
maxReplicas: 8 ##最大8个副本
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: tv-web-dm
metrics:
- type: Resource
resource:
name: cpu
targetAverageUtilization: 80 ##注意此时是根据使用率,也可以根据使用量:targetAverageValue
- type: Resource
resource:
name: memory
targetAverageUtilization: 80 ##注意此时是根据使用率,也可以根据使用量:targetAverageValue targetAverageValue: 100Mi
指示 描述
apiVersion: autoscaling/v2beta1 autoscaling正在使用的Kubernetes API组的版本。此示例清单使用beta版本,因此启用了按CPU和内存进行缩放。
name: hello-world 表示HPA正在为hello-word部署执行自动扩展。
minReplicas: 1 表示正在运行的最小副本数不能低于1。
maxReplicas: 10 表示部署中的最大副本数不能超过10。
targetAverageUtilization: 50 表示当平均运行的Pod使用超过其请求CPU的50%时,部署将扩展Pod。
targetAverageValue: 100Mi 表示当平均运行的Pod使用超过100Mi的内存时,部署将扩展Pod。
