Pod 水平自动伸缩(Horizontal Pod Autoscaler)特性, 可以基于:
replication controller
deployment
replica set
custom metrics
HPA无法缩放的对象,比如DaemonSets
。
HPA由Kubernetes API资源和控制器实现,控制器会周期性的获取平均CPU利用率,并与目标值相比来调整replication controller
或者deployment
中副本的数量。
controller manager
的--horizontal-pod-autoscaler-sync-period
参数指定周期(默认值15秒),从resource metrics API
和custom metrics API
获取指标。
通常情况下,控制器将从一系列的聚合 API 中获取指标数据:
metrics.k8s.io
:由 metrics-server
(需要额外启动)提供custom.metrics.k8s.io
external.metrics.k8s.io
控制器也可以直接从 Heapster 获取指标。
注意:FEATURE STATE: Kubernetes 1.11 [deprecated] 自 Kubernetes 1.11起,从 Heapster 获取指标特性已废弃。
HPA的扩容算法:期望副本数 = ceil[当前副本数 * ( 当前指标 / 期望指标 )]
例如,CPU利用率:
200.0/100.0=2.0
, 副本数量将会翻倍。50.0/100.0=0.5
。--horizontal-pod-autoscaler-tolerance
参数全局配置的容忍值,默认为0.1
), 将会放弃本次缩放。2018年1月22日,新的指标监控目标是暴露一个API可以让HPA用来获取任意的指标,就像Master的指标API,这个新的API围绕获取的指标构建,这些指标通过引用Kubernetes对象(或组)和指标名称,因此,这些API对于其他的想要消费自定义指标的消费者(尤其是控制器)将很有用。
API的根路径类似这样:/apis/custom-metrics/v1alpha1
,方便起见,下面省略相同的根路径:
Node
、PersistentVolune
):/{object-type}/{object-name}/{metric-name...}
/{object-type}/*/{metric-name...}
/{object-type}/*/{metric-name...}?labelSelector=foo
/namespaces/{namespace-name}/{object-type}/{object-name}/{metric-name...}
/namespaces/{namespace-name}/{object-type}/*/{metric-name...}
/namespaces/{namespace-name}/{object-type}/*/{metric-name...}?labelSelector=foo
/namespaces/{namespace-name}/metrics/{metric-name}
Metrics Server是集群范围的资源使用情况数据聚合器。
kube-up.sh
脚本部署集群,则会默认部署为Deployment
[deployment components.yaml](https://github.com/kubernetes-sigs/metrics-server/releases)
文件来部署Metrics Server从Summary API
中收集指标数据,这些指标数据是每个节点上的kubelet
暴露出来的。